多个列表的 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"
    ]