我需要完成类似于Ansible, How to modify a variable during a loop? 和Ansible Loop 和 Update Dict,但是,我需要能够将包含列表的两个字典合并到一个字典中。一个字典存储在 group_vars 文件中,另一个存储在 host_vars 中:
组变量:
access_control:
- source_address: "10.0.0.1/24"
description: "Test 1"
- source_address: "11.0.0.1/24"
description: "Test 2"
- source_address: "12.0.0.1/24"
description: "Test 3"
Run Code Online (Sandbox Code Playgroud)
主机变量:
access_control_id:
- access_id: "a01"
- access_id: "a06"
Run Code Online (Sandbox Code Playgroud)
期望的结果是每个 access_control_id 都应用于每个 access_control 项:
"combined_access_control": [
{
"source_address": "10.0.0.1/24"
"description": "Test 1"
"access_id": "a01"
},
{
"source_address": "10.0.0.1/24"
"description": "Test 1"
"access_id": "a06"
},
{
"source_address": "11.0.0.1/24"
"description": "Test 2"
"access_id": "a01"
},
{
"source_address": "11.0.0.1/24"
"description": "Test 2"
"access_id": "a06"
},
{
"source_address": "12.0.0.1/24"
"description": "Test 3"
"access_id": "a01"
},
{
"source_address": "12.0.0.1/24"
"description": "Test 3"
"access_id": "a06"
},
]
Run Code Online (Sandbox Code Playgroud)
我以为我可以使用这样的东西:
- name: Combine variables into one dict
set_fact:
combined_access_control: "{{ combined_access_control| default ([item.1]) + [ { 'access_id': item.1.access_id } ] }}"
loop: "{{ access_control | product (access_control_id)| list }}"
Run Code Online (Sandbox Code Playgroud)
但我只得到一个带有 access_ids 的字典:
"combined_access_control": [
{
"access_id": "a01"
},
{
"access_id": "a06"
},
{
"access_id": "a01"
},
{
"access_id": "a06"
},
{
"access_id": "a01"
},
{
"access_id": "a06"
}
],
Run Code Online (Sandbox Code Playgroud)
您需要组合列表中的 dict,并将其附加到列表中,如下所示:
- name: Combine variables into one dict
set_fact:
combined_access_control: "{{ combined_access_control | default([]) + [ [] | combine (item.0) | combine ({ 'access_id': item.1.access_id }) ]}}"
loop: "{{ access_control | product (access_control_id) | list }}"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
103 次 |
| 最近记录: |