Đã nêu rõ, bạn phải kiểm tra tất cả những điều sau: được xác định, không trống VÀ không phải Không có.
Đối với các biến "bình thường", nó tạo ra sự khác biệt nếu được xác định và đặt hoặc không đặt. Xem foo
và bar
trong ví dụ bên dưới. Cả hai đều được xác định nhưng chỉ foo
được thiết lập.
Ở phía bên kia, các biến đã đăng ký được đặt thành kết quả của lệnh đang chạy và thay đổi theo từng mô-đun. Chúng hầu hết là cấu trúc json. Bạn có thể phải kiểm tra thành phần phụ mà bạn quan tâm. Hãy xem xyz
và xyz.msg
trong ví dụ bên dưới:
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 == ''