Ansible / jinja2列表的序列

时间:2017-11-09 14:52:00

标签: list dictionary ansible yaml jinja2

我正在尝试从列表的列表中列出一个列表但是失败了。试图获得所有同行的列表到r1

示例数据yaml:

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

输出应该是[r2,r3],因为r1只有r2和r3作为对等体。如何从安全任务中获取此列表?

1 个答案:

答案 0 :(得分: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[] | [?@!=`r1`]'

选择peers[].name作为p,只选择r1作为p元素的项目,然后展平列表并有效删除所有r1项,只留下r1同意结果。