Ich habe eine Ansible-Task, die eine URI-Anforderung an eine Website sendet, um eine JSON-Antwort zu erhalten. Ich möchte, dass Ansible etwas unternimmt, wenn die verschachtelte JSON-Variable definiert ist, und etwas anderes, wenn dies nicht der Fall ist.
- 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"
Beachten Sie, dass die Verwendung ignore_errors
nur für den fehlgeschlagenen Taskbefehl funktioniert, nicht für die Überprüfung undefinierter Werte in verschachtelten Datenstrukturen in einer Jinja-Vorlage. Wenn dies json_response.json.nested1.nested2
nicht definiert ist, schlägt diese Aufgabe trotz ignore_errors=yes
der Einstellung weiterhin fehl .
Wie speichere ich in diesem Playbook einen Standardwert, /tmp/foo.txt
wenn die Anforderung fehlschlägt oder wenn für die Anforderung nicht der richtige verschachtelte Wert definiert ist?
$key
die Antwort kein Feld enthält - dh, derdefault
Filter von Jinja könnte nützlich sein.