在Ansible中如何在循环中过滤列表和非列表数据



假设如下所示的数据,如何遍历具有family-name=ipv4的interface.name ?
是否可以仅使用内置过滤器?

请注意地址族是一个映射或映射列表(这似乎是我的问题)。我尝试了一些想法,但都没有找到解决方案。

"interface": [
{
"address-family": {
"family-name": "ipv4"
},
"name": "eth0.1033500",
},
{
"address-family": {
"family-name": "ipv6"
},
"name": "eth0.1033900",
},
{
"address-family": [
{
"family-name": "ipv4",
},
{
"family-name": "ipv6"
}
],
"name": "eth0.1034000",
}
]

您的数据不一致。前两项中的address-family是一个字典,但第三项中的是一个列表。(在YAML中可读性更好)

interface:
- address-family:
family-name: ipv4
name: eth0.1033500
- address-family:
family-name: ipv6
name: eth0.1033900
- address-family:
- family-name: ipv4
- family-name: ipv6
name: eth0.1034000

如果您正在寻找包含family-name=ipv4">

下面的任务
- debug:
var: item
loop: "{{ interface|json_query(query) }}"
vars:
query: "[?"address-family"."family-name"=='ipv4'].name"

item: eth0.1033500

如果您正在查找列表&;中包含family-name=ipv4&;

下面的任务
- debug:
var: item
loop: "{{ interface|json_query(query) }}"
vars:
query: "[?"address-family"[?"family-name"=='ipv4']].name"

item: eth0.1034000

连接查询的结果,在循环"中迭代列表和非列表数据。例如

- debug:
var: item
loop: "{{ interface|json_query(query1) +
interface|json_query(query2) }}"
vars:
query1: "[?"address-family"."family-name"=='ipv4'].name"
query2: "[?"address-family"[?"family-name"=='ipv4']].name"

item: eth0.1033500
item: eth0.1034000

最新更新