假设如下所示的数据,如何遍历具有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