it-swarm.com.de

Wie führe ich eine Aufgabe aus, wenn eine Variable in ansible undefiniert ist?

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
94
sakhunzai

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

177
Kyle

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

Ansible Documentation

10
Abhijeet Kamble

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
4
wolfrevo