Szukam sposobu na wykonanie zadania gdy zmienna ansibla nie jest rejestrami / niezdefiniowana np
-- name: some task
command: sed -n '5p' "{{app.dirs.includes}}/BUILD.info" | awk '{print $2}'
when: (! deployed_revision) AND ( !deployed_revision.stdout )
register: deployed_revision
ansible
ansible-playbook
sakhunzai
źródło
źródło
when: deployed_revision is not defined or deployed_revision.stdout is not defined or deployed_revision.stdout == ''
when: item.sudo is defined and item.sudo == true
when: foo is defined
(np. To nie działa:when: {{ foo }} is defined
when: ({{ foo }} in undefined)
{{ foo }}
.). Nie dzieje się tak z powodu Ansible, ale Yaml zinterpretowałby to jako przedmiot. Jeśli chcesz zacząć od rozwinięcia zmiennej, po prostu"{{ foo }}"
otocz całość podwójnymi cudzysłowami (jak ), aby zmusić Yamla do postrzegania go jako ciągu i przekazania go w takim stanie, w jakim jest do Ansible.Zgodnie z najnowszą wersją Ansible 2.5, aby sprawdzić, czy zmienna jest zdefiniowana iw zależności od tego, czy chcesz uruchomić jakieś zadanie, użyj
undefined
słowa kluczowego.Dokumentacja Ansible
źródło
Ściśle mówiąc, musisz zaznaczyć wszystkie następujące elementy: zdefiniowane, nie puste ORAZ nie Brak.
W przypadku „normalnych” zmiennych ma znaczenie, czy są zdefiniowane i ustawione, czy nie. Zobacz
foo
iwbar
poniższym przykładzie. Obie są zdefiniowane, ale tylkofoo
ustawione.Z drugiej strony zarejestrowane zmienne są ustawiane na wynik uruchomionego polecenia i różnią się w zależności od modułu. W większości są to struktury json. Prawdopodobnie musisz sprawdzić podelement, który Cię interesuje. Zobacz
xyz
iwxyz.msg
poniższym przykładzie:źródło