De forma estrita, você deve verificar todos os itens a seguir: definido, não vazio E não nenhum.
Para variáveis "normais", faz diferença se definido e definido ou não definido. Veja foo
e bar
no exemplo abaixo. Ambos são definidos, mas apenas foo
está definido.
Por outro lado, as variáveis registradas são definidas como o resultado do comando em execução e variam de módulo para módulo. Eles são principalmente estruturas json. Você provavelmente deve verificar o subelemento no qual está interessado. Veja xyz
e xyz.msg
no exemplo abaixo:
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 == ''