2017-11-09 3 views
0

Ich versuche, eine Liste aus einer Liste von Listen zu erstellen, aber ich scheitere. zu erhalten versucht, eine Liste aller Peers r1Ansible/jinja2 Liste der Listen von Listen

Beispieldaten yaml: sollte

--- 
conn: 
- id: asd 
    peers: 
    - name: r1 
    - name: r2 
- id: dsa 
    peers: 
    - name: r1 
    - name: r3 
- id: sad 
    peers: 
    - name: r2 
    - name: r4 

Der Ausgang [r2,r3] sein als r1 r2 und r3 nur als Peers hat. Wie kann ich diese Liste von einer anstehenden Aufgabe erhalten?

Antwort

1

Sie möchten JMESPath erkunden:

--- 
- hosts: localhost 
    gather_facts: no 
    vars: 
    conn: 
     - id: asd 
     peers: 
     - name: r1 
     - name: r2 
     - id: dsa 
     peers: 
     - name: r1 
     - name: r3 
     - id: sad 
     peers: 
     - name: r2 
     - name: r4 
    tasks: 
    - debug: 
     msg: "{{ conn | json_query(qry) }}" 
     vars: 
     qry: '[*].{p:peers[].name} | [?contains(p,`r1`)].p[] | [[email protected]!=`r1`]' 

Select peers[].name als p, nur Elemente auswählen, die r1 als Element der p haben, dann Liste abflachen und fallen alle r1 Elemente effektiv nur r1 Peers als Ergebnis verlassen .

+0

Beeindruckend, beeindruckend. Es erfordert jmespath mit nicht in ansible. Es ist eine saubere Arbeitslösung dennoch. Vielen Dank. Ich werde damit laufen, bis jemand mit einem anderen kommt, der nur Core-Ansible-Module benötigt. – Ossar