Gibt es eine Möglichkeit, zu überprüfen, ob ein Wörterbuchschlüssel in einer anonymen Aufgabe nicht definiert ist?

17

Also habe ich in meinem Code eine Aufgabe

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

und meine vars sieht aus wie

---
me:
  stumped: yes

Wenn ich die Aufgabe ausführe, kommt sie mit dem folgenden Fehler zurück

{"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
quelle

Antworten:

24

Die von Ihnen eingegebene Syntax:

when: me.cool is not defined

ist richtig.

Sie können auch verwenden not in:

when: "'cool' not in me"

Das Problem ist, dass Ihre Fehlermeldung:

Die bedingte Prüfung 'me.cool' ist fehlgeschlagen.

behauptet, Ihr Zustand ist definiert als:

when: me.cool

Entweder gibt es einen Fehler in der von Ihnen verwendeten Version (aber Sie haben nicht mitgeteilt, um welchen es sich handelt), und es gab bekannte Probleme , oder Sie haben nicht die genaue Aufgabe veröffentlicht, die den Fehler verursacht hat.

techraf
quelle
1
Der Fehler könnte immer noch auftreten, wenn er den ursprünglichen Code nicht veröffentlicht und eine zweite when-Bedingung abbricht, die auf denselben Wert verweist. Dies funktioniert: when: is_installed.rc is defined and is_installed.rc == 0Dies funktioniert nicht:when: is_installed.rc is defined \n when is_installed.rc == 0
Aiyion.Prime