我正在尝试从列表的列表中列出一个列表但是失败了。试图获得所有同行的列表到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作为对等体。如何从安全任务中获取此列表?
答案 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同意结果。