मैं एक गतिशील कार्य में एक गतिशील रूप से नामित चर कैसे दर्ज करूंगा?


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

धन्यवाद, मैं इसे आज़माऊंगा, लेकिन यह संभव नहीं है कि मैं उस समाधान को डाल दूं क्योंकि यह लंबा है और इससे भी अधिक जटिल है कि मैं सब कुछ (मेरे प्रश्न के नीचे) नकल कर रहा था। पठनीयता, अन्यथा किसी भी तरह की एक ताकत है, इसलिए उसके आसपास काम करना मुझे काटने के लिए वापस आ जाएगा :)
0xC0000022L

सेट फैक्ट चर का समर्थन करता है, जैसा कि पिछले समाधान के कथन के विपरीत है, नीचे उत्तर देखें
वनो

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 देता! :)
Vano
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.