Ansible: не удается получить доступ к значению словаря-ошибка: "объект dict" не имеет атрибута

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

когда я запускаю этот playbook, я получаю эту ошибку:

One or more undefined variables: 'dict object' has no attribute 'name' 

Это на самом деле работает просто отлично:

debug: msg="user {{ item.key }} is {{ item.value }}"

что я упустил?

1 ответов


это не тот же код. Если вы внимательно посмотрите на пример, вы увидите, что под users, у вас есть несколько предсказывает.

в вашем случае, у вас есть два предсказывает, но только с одним ключом (alice или telephone) с соответствующими значениями "Алиса", 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

(обратите внимание, что я изменил Хост на localhost поэтому я могу легко запустить его и добавил gather_facts: no так как это не нужно здесь. YMMV.)