web-dev-qa-db-fra.com

Ansible: impossible d'accéder à la valeur du dictionnaire - erreur obtenue: 'objet dict' n'a pas d'attribut

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

16
user1692261

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

14
leucos

petite correction:

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

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

0
Peter de Zwart