python - Ansible combine 仅结合最后一项
问题描述
我需要完成类似于Ansible 的事情,如何在循环期间修改变量?和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"
主机变量:
access_control_id:
- access_id: "a01"
- access_id: "a06"
期望的结果是将每个 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"
},
]
我以为我可以使用这样的东西:
- 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 }}"
但我只得到一个带有 access_ids 的字典:
"combined_access_control": [
{
"access_id": "a01"
},
{
"access_id": "a06"
},
{
"access_id": "a01"
},
{
"access_id": "a06"
},
{
"access_id": "a01"
},
{
"access_id": "a06"
}
],
解决方案
您需要组合列表中的 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 }}"
推荐阅读
- javascript - 如何在 mysql 查询中的 javascript 值中使用 php 变量?
- java - 通过注释类创建带有限定符的@MockBean?
- javascript - TypeScript 中是否有任何已定义的 HashTable 类,如 C#
- r - stats4::mle 的正确使用
- django - 哪些查询集可以帮助我根据两个选择字段生成结果?
- ionic3 - 无法在函数中设置未定义离子的属性
- angular - 类的公共方法在 TypeScript/Angular 中不可见
- azure-devops - 如何在 VSTS / Azure Devops 仪表板中显示 PowerApp?
- c++ - 类型扣除时间
- node.js - NodeJS 流不等待异步