syslog
Ansible操作を使用して、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.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
答え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 }
答え2
これを行う簡単な方法はないと思います。そしてregister
withwith_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