Ich suche nach einer Möglichkeit, eine Aufgabe auszuführen, wenn eine 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
Aus dem anible docs : Wenn keine erforderliche Variable festgelegt wurde, können Sie den von Jinja2 definierten Test überspringen oder fehlschlagen. Zum Beispiel:
tasks:
- Shell: echo "I've got '{{ foo }}' and am not afraid to use it!"
when: foo is defined
- fail: msg="Bailing out. this play requires 'bar'"
when: bar is not defined
Also in deinem Fall when: deployed_revision is not defined
sollte arbeiten
Verwenden Sie gemäß der neuesten Ansible-Version 2.5 das Schlüsselwort undefined
, um zu überprüfen, ob eine Variable definiert ist und abhängig davon, ob Sie eine Aufgabe ausführen möchten.
tasks:
- Shell: echo "I've got '{{ foo }}' and am not afraid to use it!"
when: foo is defined
- fail: msg="Bailing out. this play requires 'bar'"
when: bar is undefined
Streng genommen müssen Sie Folgendes überprüfen: definiert, nicht leer UND nicht keine.
Bei "normalen" Variablen macht es einen Unterschied, ob sie definiert und gesetzt oder nicht gesetzt sind. Siehe foo
und bar
im folgenden Beispiel. Beide sind definiert, aber nur foo
ist gesetzt.
Auf der anderen Seite werden registrierte Variablen auf das Ergebnis des laufenden Befehls gesetzt und variieren von Modul zu Modul. Sie sind meist json Strukturen. Sie müssen wahrscheinlich das Unterelement überprüfen, an dem Sie interessiert sind. Siehe xyz
und xyz.msg
im folgenden Beispiel:
cat > test.yml <<EOF
- hosts: 127.0.0.1
vars:
foo: "" # foo is defined and foo == '' and foo != None
bar: # bar is defined and bar != '' and bar == None
tasks:
- debug:
msg : ""
register: xyz # xyz is defined and xyz != '' and xyz != None
# xyz.msg is defined and xyz.msg == '' and xyz.msg != None
- debug:
msg: "foo is defined and foo == '' and foo != None"
when: foo is defined and foo == '' and foo != None
- debug:
msg: "bar is defined and bar != '' and bar == None"
when: bar is defined and bar != '' and bar == None
- debug:
msg: "xyz is defined and xyz != '' and xyz != None"
when: xyz is defined and xyz != '' and xyz != None
- debug:
msg: "{{ xyz }}"
- debug:
msg: "xyz.msg is defined and xyz.msg == '' and xyz.msg != None"
when: xyz.msg is defined and xyz.msg == '' and xyz.msg != None
- debug:
msg: "{{ xyz.msg }}"
EOF
ansible-playbook -v test.yml