Строго говоря, вы должны проверить все следующее: определено, не пусто И не нет.
Для "обычных" переменных имеет значение, определены ли они и установлены или нет. См. foo
И bar
в примере ниже. Оба определены, но толькоfoo
установлено.
С другой стороны, зарегистрированные переменные устанавливаются в результате выполнения команды и варьируются от модуля к модулю. В основном это json-структуры. Вероятно, вы должны проверить интересующий вас подэлемент. См. xyz
И xyz.msg
в примере ниже:
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
when: deployed_revision is not defined or deployed_revision.stdout is not defined or deployed_revision.stdout == ''