2017-05-23 11 views
0

Meine Aufgabe Parsen istansible 2.0 Json und Speicher in einer anderen Variablen

- name: task name 
    shell: some command --format json 
    register: result 

Die Ausgabe in unter json-Format sein wird

[ 
    { 
    "mac_address": "x.x.x.x.x.x", 
    "fixed_ips": "{\"subnet_id\": \"s-s-s-s\",\"ip_address\": \"172.*.*.*\"}", 
    "id": "1", 
    "name": "" 
    }, 
    { 
    "mac_address": "x.x.x.x", 
    "fixed_ips": "{\"subnet_id\": \"s-s-s-s\", \"ip_address\": \"192.*.*.*\"}", 
    "id": "2", 
    "name": "" 
    } 
] 

Was ich tun möchten, erhalten nur die IP-Adresse, beginnt mit 192 und speichert es in einer Variablen, so dass ich es in einer anderen Aufgabe verwenden kann.

+0

post ur volle json –

+0

eingefügt volle json wie Sie angefordert –

Antwort

1

Wenn es sich um eine Liste von dicts ist, verwenden selectattr:

"{{ (result.stdout | from_json | selectattr('ip_address','match','^192') | list | fist).ip_address }}" 

Ich gehe davon aus, dass Sie nur ein Element benötigen, so dass ich first einzelnes Element aus der Liste zu bekommen.

aktualisiert Ausdruck aufgrund von Änderungen der Eingangsdaten:

- set_fact: 
    ip_address: "{{ (result.stdout | 
         from_json | 
         map(attribute='fixed_ips') | 
         map('from_json') | 
         selectattr('ip_address','match','^192') | 
         list | 
         first 
        ).ip_address }}" 

fixed_ips ist ein String, so dass Sie from_json mit map anwenden müssen jedes Element umwandeln zu können selectattr Filter anzuwenden.

+0

Hallo gepostet vollen JSON. –

+0

Hi ich bin neu dazu, also bitte mehr erklären. Was ist diese .IP_Adresse als letzte? Speichern wir sie in einer Variablen? –

+0

Ich habe meine Antwort noch einmal aktualisiert, um ein komplettes Playbook-Snippet zu sein, wo Sie eine neue Tatsache (Variable) 'ip_address' erhalten. –

Verwandte Themen