Ich suche nach einer Möglichkeit, eine Aufgabe auszuführen, wenn eine ansible Variable nicht registriert / undefiniert ist, z
-- name: some task
command: sed -n '5p' "{{app.dirs.includes}}/BUILD.info" | awk '{print $2}'
when: (! deployed_revision) AND ( !deployed_revision.stdout )
register: deployed_revision
ansible
ansible-playbook
sakhunzai
quelle
quelle
when: deployed_revision is not defined or deployed_revision.stdout is not defined or deployed_revision.stdout == ''
when: item.sudo is defined and item.sudo == true
when: foo is defined
(zB funktioniert das nicht:when: {{ foo }} is defined
when: ({{ foo }} in undefined)
{{ foo }}
) beginnen. Dies liegt nicht an Ansible, aber Yaml würde dies als Objekt interpretieren. Wenn Sie mit einer variablen Erweiterung beginnen müssen, umgeben Sie das Ganze einfach mit doppelten Anführungszeichen (wie"{{ foo }}"
), um Yaml zu zwingen, es als Zeichenfolge zu sehen und es unverändert an Ansible zu übergeben.Verwenden Sie gemäß der neuesten Ansible-Version 2.5 das
undefined
Schlüsselwort , um zu überprüfen, ob eine Variable definiert ist, und abhängig davon, ob Sie eine Aufgabe ausführen möchten .Ansible Dokumentation
quelle
Streng genommen müssen Sie alle folgenden Punkte überprüfen: definiert, nicht leer UND nicht keine.
Bei "normalen" Variablen macht es einen Unterschied, ob sie definiert und gesetzt sind oder nicht. Siehe
foo
undbar
im folgenden Beispiel. Beide sind aber nur definiertfoo
gesetzt.Auf der anderen Seite werden registrierte Variablen auf das Ergebnis des laufenden Befehls gesetzt und variieren von Modul zu Modul. Es sind meistens JSON-Strukturen. Sie müssen wahrscheinlich das Unterelement überprüfen, an dem Sie interessiert sind. Siehe
xyz
undxyz.msg
im folgenden Beispiel:quelle