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'.

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.


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.