ansible - 需要帮助将两个字典合并在一起
问题描述
我有这些变量:
vars:
server:
results:
name: instance_titi
type: lin
name: instance_toto
type: win
password:
stdout: Titi
rc: 0
stdout: Toto
rc: 0
我想要一个变量包含:
[
{
"name": "instance_titi",
"type": "lin",
"stdout": "Titi",
"rc": 0
}
],
[
{
"name": "instance_toto",
"type": "win",
"stdout": "Toto",
"rc": 0
}
]
我确信我的索引会正确地相互对齐,我只需要将一个塞进另一个里面。
我使用 zip 有点接近:
- name: Add password for instances in server list
set_fact:
looped: "{{ server.results | zip(password) }}"
调试给了我:
"msg": [
[
{
"name": "instance_titi",
"type": "lin"
},
{
"rc": 0,
"stdout": "Titi"
}
],
[
{
"name": "instance_toto",
"type": "win"
},
{
"rc": 0,
"stdout": "Toto"
}
]
]
我在这里卡住了。
解决方案
如果您想避免循环并在一行中需要它,您可以看看我写的内容:
- hosts: localhost
vars:
server:
results:
- name: instance_titi
type: lin
- name: instance_toto
type: win
password:
- stdout: Titi
rc: 0
- stdout: Toto
rc: 0
tasks:
- debug:
msg: |
{{ server.results
| zip(password)
| map('map','dict2items')
| map('flatten')
| map('list')
| map('items2dict') | list
}}
这正是您想要的:
ok: [localhost] =>
msg:
- name: instance_titi
rc: 0
stdout: Titi
type: lin
- name: instance_toto
rc: 0
stdout: Toto
type: win
让我知道您是否需要解释我的所作所为。干杯!
推荐阅读
- python - 在 Windows 中从 cmd 执行 jupyter notebook 脚本的问题
- istio - Istio 如何实现 SPIFFE 的这个规范点?
- jmeter - Jmeter:测试 5 个用户并在 1 小时内触发 10000 个请求的场景
- python - for循环多值
- javascript - 为什么 chrome 控制台 jquery 甚至在我分配值之前就为选择选项添加了值
- css - 如何在标签中添加内联样式?
- ios - 如何获取 INTask 的 SiriKit 选择事件?
- javascript - React 在启动时从 api 获取所有数据
- activiti - 不使用 activiti 表时如何将任务分配给候选组?
- server - 如何修复 NoMachine 中的 CAPS LOCK 同步?