---
- hosts: test
tasks:
- name: print phone details
debug: msg="user {{ item.key }} is {{ item.value.name }} ({{ item.value.telephone }})"
with_dict: users
vars:
users:
alice: "Alice"
telephone: 123
このプレイブックを実行すると、次のエラーが表示されます。
One or more undefined variables: 'dict object' has no attribute 'name'
これは実際にうまく機能します:
debug: msg="user {{ item.key }} is {{ item.value }}"
私は何が欠けていますか?
これはまったく同じコードではありません。この例をよく見ると、users
の下にいくつかの辞書があることがわかります。
あなたの場合、2つの辞書がありますが、それぞれ1つのキー(alice
、またはtelephone
)があり、それぞれの値は「Alice」、123です。
あなたはむしろしたい:
- hosts: localhost
gather_facts: no
tasks:
- name: print phone details
debug: msg="user {{ item.key }} is {{ item.value.name }} ({{ item.value.telephone }})"
with_dict: users
vars:
users:
alice:
name: "Alice"
telephone: 123
(Hostをlocalhost
に変更したため、簡単に実行でき、gather_facts: no
ここでは必要ないので。 YMMV。)
小さな修正:
- name: print phone details
debug: msg="user {{ item.key }} is {{ item.value.name }} ({{ item.value.telephone }})"
with_dict: "{{ users }}" <<<<<<<<<<<<<<<<
印刷したい{{ item.value.name }}
しかし、名前は定義されていません。
users:
alice: "Alice"
telephone: 123
に置き換える必要があります
users:
name: "Alice"
telephone: 123
次に、name
属性とtelephone
属性の両方が、dict(ユーザー)内で定義されます。