আমি কীভাবে একটি উত্তরীয় কার্যে গতিশীল নাম পরিবর্তনশীল নিবন্ধন করব?


11

আমি একটি উত্তরযোগ্য টাস্ক ব্যবহার করে নাম দিয়ে দুটি গ্রুপের ( syslogএবং utmp) গ্রুপের আইডি পুনরুদ্ধার করার চেষ্টা করছি । পরীক্ষার উদ্দেশ্যে, আমি নিজেই উত্তরযোগ্য হোস্ট থেকে তথ্য পুনরুদ্ধার করার জন্য একটি প্লেবুক তৈরি করেছি।

---
- name: My playbook
  hosts: enabled
  sudo: True
  connection: local
  gather_facts: False
  tasks:
    - name: Determine GIDs
      shell: "getent group {{ item }} | cut -d : -f 3"
      register: gid_{{item}}
      failed_when: gid_{{item}}.rc != 0
      changed_when: false
      with_items:
        - syslog
        - utmp

দুর্ভাগ্যক্রমে আমি প্লেবুক চালানোর সময় নিম্নলিখিত ত্রুটি পেয়েছি:

fatal: [hostname] => error while evaluating conditional: gid_syslog.rc != 0

পরের ব্যবহারের জন্য আমি আলাদা আলাদা ভেরিয়েবল, আইটেম প্রতি একটি করে রেজিস্ট্রেশন করার সময় এই জাতীয় কাজটিকে কীভাবে প্যারামেট্রাইজড ফর্মে একত্রিত করতে পারি ? সুতরাং লক্ষ্যটি হল গ্রুপের নামের উপর ভিত্তি করে ভেরিয়েবল থাকা যা পরবর্তী কাজগুলিতে ব্যবহার করা যেতে পারে।

আমি ব্যবহার করছি intফিল্টার gid_syslog.stdoutএবং gid_utmp.stdoutপরে কাজে GID উপর ভিত্তি করে কিছু হিসাব না।


আমি চেষ্টা করেছিলাম gid.{{item}}এবং এর gid[item]পরিবর্তে gid_{{item}}কোনও লাভ হয়নি।


উপরের বিপরীতে নিম্নলিখিতটি সূক্ষ্মভাবে কাজ করে:

---
- name: My playbook
  hosts: enabled
  sudo: True
  connection: local
  gather_facts: False
  tasks:
    - name: Determine syslog GID
      shell: "getent group syslog | cut -d : -f 3"
      register: gid_syslog
      failed_when: gid_syslog.rc != 0
      changed_when: false
    - name: Determine utmp GID
      shell: "getent group utmp | cut -d : -f 3"
      register: gid_utmp
      failed_when: gid_utmp.rc != 0
      changed_when: false

উত্তর:


8

আমি মনে করি এটির জন্য আর কোনও সহজ উপায় নেই। আর registerসঙ্গে with_itemsলুপ শুধু একটি অ্যারের মধ্যে তাদের সব ফলাফল রাখে variable.results। নিম্নলিখিত কাজগুলি ব্যবহার করে দেখুন:

  tasks:
    - name: Determine GIDs
      shell: "getent group {{ item }} | cut -d : -f 3"
      register: gids
      changed_when: false
      with_items:
        - syslog
        - utmp
    - debug:
        var: gids
    - assert:
        that:
          - item.rc == 0
      with_items: gids.results
    - set_fact:
        gid_syslog: "{{gids.results[0]}}"
        gid_utmp: "{{gids.results[1]}}"
    - debug:
        msg: "{{gid_syslog.stdout}} {{gid_utmp.stdout}}"

আপনি হয় set_factএই জাতীয় কীগুলিতে ভেরিয়েবল সম্প্রসারণ ব্যবহার করতে পারবেন না :

    - set_fact:
        "gid_{{item.item}}": "{{item}}"
      with_items: gids.results

ধন্যবাদ, আমি এটি চেষ্টা করে দেখব, তবে এটি সমাধানের পক্ষে অসম্ভব কারণ আমি এর চেয়ে দীর্ঘতর এবং বিশৃঙ্খলাযুক্ত হয়েছি এমন কি তার চেয়েও বেশি যে আমি সবকিছু নকল করেছি (আমার প্রশ্নের নীচে)। পঠনযোগ্যতা অন্যথায়
জবাবদিহি

পূর্ববর্তী সমাধানের বক্তব্যের বিপরীতে সেট ফ্যাক্টর ভেরিয়েবলকে সমর্থন করে, নীচের উত্তরটি দেখুন
ভ্যানো

2

পূর্ববর্তী সমাধানের বক্তব্যের বিপরীতে সেট ফ্যাক্টটি ভেরিয়েবলকে সমর্থন করে

   - set_fact:
       "{{ item.name }}": "{{ item.val }}"
     when: item.name not in vars
     with_items:
       - { name: test, val: myalue }
       - { name: notest, val: novalue }

1
আমি পারলে +10 দিতাম! :)
ভ্যানো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.