多个列表的 YAML 交集
YAML Intersect of Multiple lists
"tag_info": {
"changed": false,
"msg": "All items completed",
"results": [
{"vm_list": ["NSY6TFSANSBL01"]},
{"vm_list": ["NSY6TFSANSBL01", "NSY6TFSANSBL02"]},
{"vm_list": ["NSY6TFSANSBL01", "NSY6TFSANSBL02", "NSY6TFSANSBL03"]}
]
}
我需要找到多个列表的交集。
我知道 2 个列表的交集是这样的
- set_fact:
final_list: "{{ tag_info.results[0].vm_list | intersect(tag_info.results[1].vm_list) }}"
我需要同样的 N 个列表。请有人帮忙。
下面的任务完成工作
- set_fact:
final_list: "{{ final_list|default([]) + [
tag_info.results[item].vm_list|
intersect(tag_info.results[item + 1].vm_list)] }}"
loop: "{{ range(0, tag_info.results|length - 1, 1)|list }}"
- debug:
var: final_list
给予
"final_list": [
[
"NSY6TFSANSBL01"
],
[
"NSY6TFSANSBL01",
"NSY6TFSANSBL02"
]
]
固定数据
tag_info:
changed: false
msg: "All items completed"
results:
- {"vm_list": ["NSY6TFSANSBL01"]}
- {"vm_list": ["NSY6TFSANSBL01", "NSY6TFSANSBL02"]}
- {"vm_list": ["NSY6TFSANSBL01", "NSY6TFSANSBL02", "NSY6TFSANSBL03"]}
Q: "Intersection of all the lists under tag_info.results can be N Number of vm_list objects."
A:从第一个 vm_list
个对象开始,而不是添加 相交 下一个 vm_list
个对象。例如
- set_fact:
final_list: "{{ final_list|
default(tag_info.results.0.vm_list)|
intersect(tag_info.results[item].vm_list) }}"
loop: "{{ range(1, tag_info.results|length, 1)|list }}"
- debug:
var: final_list
给予
"final_list": [
"NSY6TFSANSBL01"
]
"tag_info": {
"changed": false,
"msg": "All items completed",
"results": [
{"vm_list": ["NSY6TFSANSBL01"]},
{"vm_list": ["NSY6TFSANSBL01", "NSY6TFSANSBL02"]},
{"vm_list": ["NSY6TFSANSBL01", "NSY6TFSANSBL02", "NSY6TFSANSBL03"]}
]
}
我需要找到多个列表的交集。
我知道 2 个列表的交集是这样的
- set_fact:
final_list: "{{ tag_info.results[0].vm_list | intersect(tag_info.results[1].vm_list) }}"
我需要同样的 N 个列表。请有人帮忙。
下面的任务完成工作
- set_fact:
final_list: "{{ final_list|default([]) + [
tag_info.results[item].vm_list|
intersect(tag_info.results[item + 1].vm_list)] }}"
loop: "{{ range(0, tag_info.results|length - 1, 1)|list }}"
- debug:
var: final_list
给予
"final_list": [
[
"NSY6TFSANSBL01"
],
[
"NSY6TFSANSBL01",
"NSY6TFSANSBL02"
]
]
固定数据
tag_info:
changed: false
msg: "All items completed"
results:
- {"vm_list": ["NSY6TFSANSBL01"]}
- {"vm_list": ["NSY6TFSANSBL01", "NSY6TFSANSBL02"]}
- {"vm_list": ["NSY6TFSANSBL01", "NSY6TFSANSBL02", "NSY6TFSANSBL03"]}
Q: "Intersection of all the lists under tag_info.results can be N Number of vm_list objects."
A:从第一个 vm_list
个对象开始,而不是添加 相交 下一个 vm_list
个对象。例如
- set_fact:
final_list: "{{ final_list|
default(tag_info.results.0.vm_list)|
intersect(tag_info.results[item].vm_list) }}"
loop: "{{ range(1, tag_info.results|length, 1)|list }}"
- debug:
var: final_list
给予
"final_list": [
"NSY6TFSANSBL01"
]