Строго зазначено, що ви повинні перевірити всі наступні: визначені, не порожні І ні.
Для "нормальних" змінних це має значення, якщо вони визначені та встановлені чи не встановлені. Дивіться 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 == ''