¿Hay alguna manera de verificar que una clave de diccionario no esté definida en la tarea ansible?

18

Entonces en mi código tengo una tarea

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

y mi vars parece

---
me:
  stumped: yes

Entonces, cuando ejecuto la tarea, vuelve con el siguiente error

{"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 Hernández
fuente

Respuestas:

25

La sintaxis que incluiste:

when: me.cool is not defined

es correcto.

También puedes usar not in:

when: "'cool' not in me"

El problema es que su mensaje de error:

La verificación condicional 'me.cool' falló.

afirma que su condición se define como:

when: me.cool

Entonces, o hay algún error en la versión que usa (pero no compartió cuál es) y hubo problemas conocidos , o no publicó la tarea exacta que causó el error.

techraf
fuente
1
El error aún podría suceder, si no publica el código original y omite una segunda condición cuando se refiere al mismo valor. Esto funciona: when: is_installed.rc is defined and is_installed.rc == 0Esto no:when: is_installed.rc is defined \n when is_installed.rc == 0
Aiyion.Prime