首页 > 解决方案 > 带有嵌套列表的 Ansible set_fact 字典

问题描述

我需要能够转换这个:

{“529eacea00000003”:[

    [

        {

            "limitBwInMbps": 0,

            "limitIops": 0,

            "sdcId": "2e18899800000000",

            "sdcIp": "172.21.41.71"

        },

        {

            "limitBwInMbps": 0,

            "limitIops": 0,

            "sdcId": "2e18899900000001",

            "sdcIp": "172.21.41.70"

        },

    ]

],
"529eacea00000002": [

    [

        {

            "limitBwInMbps": 0,

            "limitIops": 0,

            "sdcId": "2e18899800000002",

            "sdcIp": "172.21.41.72"

        },

        {

            "limitBwInMbps": 0,

            "limitIops": 0,

            "sdcId": "2e18899900000003",

            "sdcIp": "172.21.41.73"

        },

    ]

]

}

对此:

529eacea00000003, 2e18899900000000 529eacea00000003, 2e18899900000001 529eacea00000002, 2e18899900000002 529eacea00000003, 2e188999000

我已经尝试了 with_items 等的每种组合,但没有运气

标签: ansible

解决方案


从部分数据

],
"529eacea00000002": [

我假设“ this ”是列表的 2 个元素。我们将列表命名为data1。然后下面的任务

- set_fact:
    data2: "{{ data1|
               map('dict2items')|
               list|
               json_query('[].[key,
                               value[0][0].sdcId,
                               key,
                               value[0][1].sdcId]') }}"
- debug:
    msg: "{{ data2|to_yaml }}"

  msg: |-
    - [529eacea00000003, 2e18899800000000, 529eacea00000003, 2e18899900000001]
    - [529eacea00000002, 2e18899800000002, 529eacea00000002, 2e18899900000003]

推荐阅读