ansible - Ansible:如何修改字典列表
问题描述
我想使用从 IPAM 获得的 IP 地址的新条目来修改 hostvars 列表中的字典。
{
"vm_guest_networks": [
{
"device_type": "vmxnet3",
"state": "present",
"subnet": "10.91.1.0/24"
},
{
"device_type": "vmxnet3",
"state": "present",
"subnet": "10.91.0.0/24"
}
]
}
在一个循环中,我有子网来识别正确的字典和我想用 ipv4_address 键添加的 IP 地址,因此结果应该如下所示:
{
"vm_guest_networks": [
{
"device_type": "vmxnet3",
"state": "present",
"subnet": "10.91.1.0/24",
"ipv4_address": "10.91.1.216"
},
{
"device_type": "vmxnet3",
"state": "present",
"subnet": "10.91.0.0/24",
"ipv4_address": "10.91.0.21"
}
]
}
当前 WIP ansible 代码位于https://pastebin.com/bFc1Ww2K
解决方案
假设 IP 列表可用。例如
ip4: [10.91.1.216, 10.91.0.21]
让我们使用组合过滤器和扩展循环变量来创建一个新列表,其中每个字典都将被更新。例如
- set_fact:
mydata: "{{ mydata|default([]) +
[item|combine({'ipv4_address': ip4[ansible_loop.index0]})] }}"
loop: "{{ vm_guest_networks }}"
loop_control:
extended: yes
- set_fact:
vm_guest_networks: "{{ mydata }}"
- debug:
var: vm_guest_networks
给
"vm_guest_networks": [
{
"device_type": "vmxnet3",
"ipv4_address": "10.91.1.216",
"state": "present",
"subnet": "10.91.1.0/24"
},
{
"device_type": "vmxnet3",
"ipv4_address": "10.91.0.21",
"state": "present",
"subnet": "10.91.0.0/24"
}
]
推荐阅读
- java - RESTAPI 读取图像并转换为 BLOB
- r - 将列表中的主要标题添加到 for 循环中的图形
- jquery - ODOO - 菜单下拉菜单_点击外部折叠
- arrays - Google Sheets Query - 动态构建引用的数组源
- sql - 插入日期给出错误 ORA-01861:文字与格式字符串不匹配
- php - Wordpress 类别 URL 名称而不是 slug
- ios - iOS 设备不使用 PWA-Icon
- powershell - 码头工人和提升的私人
- authentication - Openshift 配置“请求标头”身份验证
- python - Python Folium 图标列表