Estrictamente establecido, debe marcar todo lo siguiente: definido, no vacío Y no Ninguno.
Para las variables "normales", hay una diferencia si se definen y configuran o no. Vea foo
y bar
en el ejemplo siguiente. Ambos están definidos pero solo foo
están configurados.
Por otro lado, las variables registradas se establecen en el resultado del comando en ejecución y varían de un módulo a otro. En su mayoría son estructuras json. Probablemente deba marcar el subelemento que le interesa. Consulte xyz
y xyz.msg
en el siguiente ejemplo:
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 == ''