Czy istnieje sposób sprawdzenia, czy klucz słownika nie jest zdefiniowany w zadaniu ansible?

18

Więc w moim kodzie mam zadanie

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

i moje vars wygląda

---
me:
  stumped: yes

Kiedy uruchamiam zadanie, wraca ono z następującym błędem

{"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
źródło

Odpowiedzi:

25

Podana składnia:

when: me.cool is not defined

jest poprawne.

Możesz także użyć not in:

when: "'cool' not in me"

Problem polega na tym, że komunikat o błędzie:

Kontrola warunkowa „me.cool” nie powiodła się.

twierdzi, że twój stan jest zdefiniowany jako:

when: me.cool

Tak więc albo występuje błąd w używanej wersji (ale nie podzieliłeś się tym, który to jest) i wystąpiły znane problemy , lub nie opublikowałeś dokładnego zadania, które spowodowało błąd.

techraf
źródło
1
Błąd może się nadal zdarzyć, jeśli nie opublikuje oryginalnego kodu i zwolni drugi warunek „kiedy”, który odnosi się do tej samej wartości. To działa: when: is_installed.rc is defined and is_installed.rc == 0To nie:when: is_installed.rc is defined \n when is_installed.rc == 0
Aiyion.Prime