web-dev-qa-db-ja.com

Ansible:辞書の値にアクセスできません-エラーが発生しました: 'dict object'には属性がありません

---
- 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 }}"

私は何が欠けていますか?

16
user1692261

これはまったく同じコードではありません。この例をよく見ると、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。)

14
leucos

小さな修正:

- name: print phone details
  debug: msg="user {{ item.key }} is {{ item.value.name }} ({{ item.value.telephone }})"
  with_dict: "{{ users }}" <<<<<<<<<<<<<<<<
0
Nanda

印刷したい{{ item.value.name }}しかし、名前は定義されていません。

users:
  alice: "Alice"
  telephone: 123

に置き換える必要があります

users:
  name: "Alice"
  telephone: 123

次に、name属性とtelephone属性の両方が、dict(ユーザー)内で定義されます。

0
Peter de Zwart