it-swarm.com.de

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

In meinem Code habe ich also 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, wird der folgende Fehler angezeigt

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

Die von Ihnen angegebene Syntax:

when: me.cool is not defined

ist richtig.

Sie können auch not in Verwenden:

when: "'cool' not in me"

Das Problem ist, dass Ihre Fehlermeldung:

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

behauptet, Ihr Zustand sei definiert als:

when: me.cool

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

30
techraf

Sie können vermeiden, dass 'dict object' kein Attribut hat, indem Sie die Syntax jinja2 selectattr () wie folgt verwenden:

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

idee von Michael Hoglan unter https://groups.google.com/forum/#!topic/ansible-project/8XJkHQgttLA

7
emmanuelgws