Kesinlikle aşağıdakilerin tümünü kontrol etmeniz gerekir: tanımlı, boş değil VE Hiçbiri.
"Normal" değişkenler için, tanımlanmış ve ayarlanmış olması fark yaratır. Bkz foo
ve bar
aşağıdaki örnekte. Her ikisi de tanımlanmıştır ancak yalnızca foo
ayarlanmıştır.
Diğer tarafta kayıtlı değişkenler, çalıştırma komutunun sonucuna ayarlanır ve modülden modüle değişir. Çoğunlukla json yapılarıdır. . Muhtemelen See ilgilendiğiniz cihazmda kontrol etmeli xyz
ve xyz.msg
örnek aşağıda:
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 == ''