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

9

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

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

e meu vars parece

---
me:
  stumped: yes

Então, quando eu executo a tarefa, ele 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'.
    
por Luis F Hernandez 26.06.2017 / 21:32

2 respostas

15

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:

The conditional check 'me.cool' failed.

afirma que sua condição é definida como:

when: me.cool

Então, há algum bug na versão que você usa (mas você não compartilhou qual é) e havia problemas conhecidos , ou você não postou a tarefa exata que causou o erro.

    
por 27.06.2017 / 04:00
3

Você pode evitar que o 'dict object' não possua atributo usando a sintaxe jinja2 selectattr () como em:

when: me|selectattr("cool", "defined")|list|length >0

ideia obtida de Michael Hoglan no link

    
por 25.04.2018 / 20:01