Ansibleタスクを使用して、2つのグループ(syslog
およびutmp
)のグループIDを名前で取得しようとしています。テスト目的で、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
separate変数を登録しながら、このようなタスクをパラメーター化された形式にどのように統合できますか、アイテムごとに1つ、後で使用するために?したがってgoalは、後のタスクで使用できるグループ名に基づいた変数を持つことです。
gid_syslog.stdout
およびgid_utmp.stdout
でint
フィルターを使用して、後のタスクで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
簡単な方法はないと思います。そしてregister
with 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
前のソリューションのステートメントとは対照的に、ファクトを設定すると変数がサポートされます
- set_fact:
"{{ item.name }}": "{{ item.val }}"
when: item.name not in vars
with_items:
- { name: test, val: myalue }
- { name: notest, val: novalue }