web-dev-qa-db-fra.com

Existe-t-il un moyen de vérifier qu'une clé de dictionnaire n'est pas définie dans la tâche ansible?

Donc, dans mon code, j'ai une tâche

- name: cool task
  Shell: 'touch iamnotcool.txt'
  when: me.cool is not defined

et mes vars ressemblent

---
me:
  stumped: yes

Donc, lorsque j'exécute la tâche, elle revient avec l'erreur suivante

{"failed": true, "msg": "The conditional check 'me.cool' failed. The error was: error while evaluating conditional (me.cool): 'dict object' has no attribute 'cool'.
21
Luis F Hernandez

La syntaxe que vous avez incluse:

when: me.cool is not defined

est correct.

Vous pouvez aussi utiliser not in:

when: "'cool' not in me"

Le problème est que votre message d'erreur:

La vérification conditionnelle "me.cool" a échoué.

affirme que votre état est défini comme:

when: me.cool

Donc, soit il y a un bug dans la version que vous utilisez (mais vous n'avez pas partagé celle-ci) et il y avait problèmes connus , ou vous n'avez pas posté la tâche exacte à l'origine de l'erreur.

30
techraf

Vous pouvez éviter que 'dict object' n'ait aucun attribut en utilisant la syntaxe jinja2 selectattr () comme dans:

when: me|selectattr("cool", "defined")|list|length >0

idée obtenue de Michael Hoglan à https://groups.google.com/forum/#!topic/ansible-project/8XJkHQgttLA

7
emmanuelgws