Dinyatakan dengan tegas, Anda harus memeriksa semua yang berikut: ditentukan, tidak kosong DAN tidak Tidak ada.
Untuk variabel "normal" itu membuat perbedaan jika ditentukan dan ditetapkan atau tidak ditetapkan. Lihat foo
dan bar
pada contoh di bawah ini. Keduanya ditentukan tetapi hanya foo
ditetapkan.
Di sisi lain, variabel terdaftar diatur ke hasil perintah yang sedang berjalan dan bervariasi dari modul ke modul. Mereka kebanyakan adalah struktur json. Anda mungkin harus memeriksa subelemen yang Anda minati. Lihat xyz
dan xyz.msg
pada contoh di bawah ini:
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 == ''