Hat man in einem Task JSON als Ausgabe (etwa bei einer REST-API Abfrage) könnte man auf die Werte gleich in ansible Zugreifen, welches ebenfalls JSON für die Variablen verwendet.
Zuvor muss die Ausgabe aber in JSON umgewandelt werden. Ansible stellt dazu den Filter to_json
zur Verfügung.
Nachfolgend ein simpler ansible task, welche einen heath-check per REST-API call aufruft:
- hosts: localhost tasks: - name: Run healthcheck URL uri: method: GET url: "http://server.example.com:8080/rest/health-check" return_content: yes headers: Accept: application/json register: healthcheck_uri |
Bei Erfolg ist die Ausgabe des Healthecks eine Antwort in JSON:
{"status":"PASS"} |
Nun kann man aber nicht einfach wie eine Variable darauf zugreifen; das folgende wirft einen Fehler:
- hosts: localhost tasks: - name: Run healthcheck URL uri: method: GET url: "http://server.example.com:8080/rest/health-check" return_content: yes headers: Accept: application/json register: healthcheck_uri - debug: msg: "Der health check Status ist: {{ healthcheck.status }}" |
Denn momentan sieht ansible das noch als einen String an.
Lässt man es hingegen durch den filter to_json
laufen, kann man dann normal darauf zugreifen:
- hosts: localhost tasks: - name: Run healthcheck URL uri: method: GET url: "http://server.example.com:8080/rest/health-check" return_content: yes headers: Accept: application/json register: healthcheck_uri - set_fact: healthcheck: "{{ healthcheck_uri.content | from_json }}" - debug: msg: "Der health check Status ist: {{ healthcheck.status }}" |