Mam zadanie Ansible, które wysyła żądanie URI do strony internetowej w celu uzyskania odpowiedzi JSON. Chcę, aby Ansible zrobił coś, jeśli zdefiniowano zagnieżdżoną zmienną JSON, i coś innego, jeśli tak nie jest.
- name: Get JSON from the Interwebs
uri: url="http://whatever.com/jsonresponse" return_content=yes
register: json_response
- name: Write nested JSON variable to disk
copy: content={{json_response.json.nested1.nested2}} dest="/tmp/foo.txt"
Zauważ, że użycie ignore_errors
działa tylko w przypadku niepowodzenia polecenia zadania, a nie do sprawdzania niezdefiniowanych wartości w zagnieżdżonych strukturach danych w szablonie Jinja. Jeśli więc json_response.json.nested1.nested2
nie zostanie zdefiniowane, to zadanie nadal nie powiedzie się, mimo że ignore_errors=yes
zostało ustawione.
Jak sprawić, aby ten podręcznik zawierał pewną wartość domyślną, /tmp/foo.txt
jeśli żądanie zakończy się niepowodzeniem lub jeśli w żądaniu nie zdefiniowano właściwej wartości zagnieżdżonej?
$key
pola w odpowiedzi - tj. Coś, codefault
może być przydatny w filtrze jinja .