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 }}"
Что мне не хватает?
Ответы
Ответ 1
Это не тот же самый код. Если вы посмотрите внимательно на пример, вы увидите, что в разделе users
у вас есть несколько dicts.
В вашем случае у вас есть два dicts, но только с одним ключом (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.)
Ответ 2
небольшая коррекция:
- name: print phone details
debug: msg="user {{ item.key }} is {{ item.value.name }} ({{ item.value.telephone }})"
with_dict: "{{ users }}" <<<<<<<<<<<<<<<<
Ответ 3
Вы хотите напечатать {{ item.value.name }}
, но имя не определено.
users:
alice: "Alice"
telephone: 123
следует заменить на
users:
name: "Alice"
telephone: 123
Затем оба атрибута name
и telephone
определяются внутри dict (users).