---
- 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
Lorsque j'exécute ce playbook, j'obtiens cette erreur:
One or more undefined variables: 'dict object' has no attribute 'name'
Celui-ci fonctionne très bien:
debug: msg="user {{ item.key }} is {{ item.value }}"
Qu'est-ce que je rate?
Ce n'est pas exactement le même code. Si vous regardez attentivement l'exemple, vous verrez que sous users
, vous avez plusieurs dict.
Dans votre cas, vous avez deux dictés mais avec une seule clé (alice
ou telephone
) avec les valeurs respectives de "Alice", 123.
Vous préférez:
- 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
(notez que j'ai changé Host en localhost
afin de pouvoir l'exécuter facilement et ajouté gather_facts: no
puisque ce n'est pas nécessaire ici. YMMV.)
petite correction:
- name: print phone details
debug: msg="user {{ item.key }} is {{ item.value.name }} ({{ item.value.telephone }})"
with_dict: "{{ users }}" <<<<<<<<<<<<<<<<
Vous souhaitez imprimer {{ item.value.name }}
mais le nom n'est pas défini.
users:
alice: "Alice"
telephone: 123
devrait être remplacé par
users:
name: "Alice"
telephone: 123
Ensuite, les attributs name
et telephone
sont définis dans le dict (utilisateurs).