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

18

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'.
Luis F Hernandez
la source

Réponses:

25

La syntaxe que vous avez incluse:

when: me.cool is not defined

est correct.

Vous pouvez également 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 des problèmes connus , soit vous n'avez pas publié la tâche exacte qui a provoqué l'erreur.

techraf
la source
1
L'erreur pourrait toujours se produire, s'il n'a pas publié le code d'origine et a omis une seconde condition quand qui fait référence à la même valeur. Cela fonctionne: when: is_installed.rc is defined and is_installed.rc == 0Cela ne fonctionne pas:when: is_installed.rc is defined \n when is_installed.rc == 0
Aiyion.Prime