簡體   English   中英

如何從 ansible 中的兩個列表中比較或查找特定值並打印

[英]How to compare or lookup specific values from two lists in ansible and print

如何比較 ansible 中的兩個列表並在下面打印所需的 output,我在 stackoverflow 中查看了有關比較/查找列表的其他帖子,但我想要的方式是我想要的 Z78E6221F6393D1356681DB398F14CE6D 的工作方式有所不同,無法弄清楚邏輯不同。 請指出任何可以幫助我的帖子。謝謝

清單 1:

[
    {
        "DES": "server1",
        "PORT": "E46",
    },
    {
        "DESCRIP": "server2",
        "PORT": "E47",
    },
    {
        "DESCRIP": "server3",
        "PORT": "E4",
    },
    {
        "DESCRIP": "server4",
        "PORT": "E7",
    }
]

清單 2:

[
        {
            "INTERFACES": [
                "E6",
                "E8",
                "E9",
                "E10",
                "E11",
                "E12",
                "E13",
                "E14",
                "E27",
                "E28",
                "E37",
                "E43",
                "E44",
                "E45",
                "E46",
                "E47"
            ],
            "VLAN_ID": "17"
        },
        {
            "INTERFACES": [
                "E7",
                "E10",
                "E11",
                "E12",
                "E13",
                "E14",
                "E27",
                "E28",
                "E45",
                "E46"
            ],
            "VLAN_ID": "16"
        }
    ]

所需的 output:

如果 list1 PORT值匹配/存在於 list2 INTERFACES中,則打印如下內容: server1 E46 has: VLAN_ID: 17; VLAN_ID: 16 server1 E46 has: VLAN_ID: 17; VLAN_ID: 16server2 E47 has: VLAN_ID: 17; NO VLAN_ID: 16 server2 E47 has: VLAN_ID: 17; NO VLAN_ID: 16

如果 list1 PORT值不匹配/存在於 list2 INTERFACES中,則打印類似server3 E4 has NO VLAN_ID: 17 NO VLAN_ID: 16

下面是完整的所需打印:

server1 E46 has: VLAN_ID: 17 ; VLAN_ID: 16
server2 E47 has: VLAN_ID: 17 ; NO VLAN_ID: 16
server3 E4 has: NO VLAN_ID: 17 ; NO VLAN_ID: 16
server4 E7 has: VLAN_ID: 16 ; NO VLAN_ID: 17

例如

    - set_fact:
        srv_id: "{{ srv_id|d({})|combine({item.DESCRIP: _id}) }}"
      loop: "{{ List1 }}"
      vars:
        _id: "{{ List2|
                 selectattr('INTERFACES', 'contains', item.PORT)|
                 map(attribute='VLAN_ID')|
                 list }}"

  srv_id:
    server1: ['17', '16']
    server2: ['17']
    server3: []
    server4: ['16']

(格式化應該是微不足道的。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM