ansible - 带有嵌套列表的 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 等的每种组合,但没有运气
解决方案
从部分数据
],
"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]