JSON output in ansible verwenden

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 }}"

Referenzen

Published by

Steven Varco

Steven ist ein Redhat RHCE-Zertifizierter Linux-Crack und ist seit über 20 Jahren sowohl beruflich wie auch privat auf Linux spezialisiert. In seinem Keller steht ein Server Rack mit diversen ESX und Linux Servern.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.