ระบุไว้อย่างเคร่งครัดคุณต้องตรวจสอบสิ่งต่อไปนี้ทั้งหมดกำหนดไว้ไม่ว่างเปล่าและไม่ใช่ไม่มี
สำหรับตัวแปร "ปกติ" จะสร้างความแตกต่างหากกำหนดและตั้งค่าหรือไม่ได้ตั้งค่า ดู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 == ''