2017-11-09 15 views
0

목록의 dicts 목록에서 목록을 작성하려고하지만 실패했습니다. 예 데이터 YAML 목록의 dicts의 안전/jinja2 목록

R1

모든 피어의 목록을 얻으려고하면, R1은 단지 피어로서, R2 및 R3를 갖는 한

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

출력 [r2,r3]이어야한다. 이 목록을 어떻게 할 수 있습니까?

답변

1

당신은 JMESPath을 탐험 할 수 있습니다 :

--- 
- 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`]' 

선택 peers[].namep로, 다음, p의 요소로 r1이 항목 만 선택 목록을 평평하고 효과적으로 결과만을 R1 동료를 떠나 어떤 r1 아이템을 드롭 .

+0

인상적이며 인상적입니다. 그것은 jmespath가 필요합니다. 그다지 적지 않은 작업 솔루션입니다. 감사. 핵심 책임자 모듈 만 필요로하는 다른 모듈이 생길 때까지 나는 이걸 따라갈 것이다. – Ossar