Ansible操作に動的に名前付き変数を登録するには?

Ansible操作に動的に名前付き変数を登録するには?

syslogAnsible操作を使用して、2つのグループ(および)のグループIDを名前で検索しようとしています。utmpテスト目的でAnsibleホスト自体から情報を取得するプレイブックを作成しました。

---
- 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.stdoutgid_utmp.stdoutGIDに基づいていくつかの計算を実行します。


私は代わりに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

ベストアンサー1

Setfact は、以前のソリューションの宣言とは異なり、変数をサポートします。

- set_fact:
    "{{ item.name }}": "{{ item.val }}"
  when: item.name not in vars           # this is optional. prevents overwriting vars
  with_items:
    - { name: test, val: myalue }
    - { name: notest, val: novalue }

おすすめ記事