Existe uma maneira de verificar se uma chave de dicionário não está definida na tarefa ansible?

17

Então, no meu código, eu tenho uma tarefa

- name: cool task
  shell: 'touch iamnotcool.txt'
  when: me.cool is not defined

e meus vars parecem

---
me:
  stumped: yes

Então, quando eu executo a tarefa, ela volta com o seguinte erro

{"failed": true, "msg": "The conditional check 'me.cool' failed. The error was: error while evaluating conditional (me.cool): 'dict object' has no attribute 'cool'.
Luis F Hernandez
fonte

Respostas:

24

A sintaxe que você incluiu:

when: me.cool is not defined

está correto.

Você também pode usar not in:

when: "'cool' not in me"

O problema é que sua mensagem de erro:

A verificação condicional 'me.cool' falhou.

afirma que sua condição é definida como:

when: me.cool

Portanto, existe algum bug na versão usada (mas você não compartilhou qual é) e houve problemas conhecidos ou você não publicou a tarefa exata que causou o erro.

techraf
fonte
1
O erro ainda poderia ocorrer, se ele não publicasse o código original e omitisse uma segunda condição quando, que se refere ao mesmo valor. Isso funciona: when: is_installed.rc is defined and is_installed.rc == 0Isso não funciona:when: is_installed.rc is defined \n when is_installed.rc == 0
Aiyion.Prime