向Ansible中的现有键添加值
我的结构如下: server1: { OS: Win_2016, Role: CT }, server2: { OS: RHEL7, Role: POM } 服务器1:{ OS:Win_2016, 角色:CT }, 服务器2:{ OS:RHEL7, 角色:POM } 我想将其与以下内容合并: server1: { MAC: 00:01:02:03:04:05 }, server2: { MAC: 00:01:02:03:04:06 } 服务器1:{ MAC:00:01:02:03:04:05 }, 服务器2:{ MAC:00:01:02:03:04:06 } 我所有的尝试都以一个覆盖另一个而告终 顺便说一句:目前服务器已经在oVirt和Foreman中创建,但从未运行过,因此我无法使用正常的事实收集。我需要知道MAC,这样我就可以将它传递给WDS,以便第一次启动VM 我实际上如何合并它们向Ansible中的现有键添加值,ansible,Ansible,我的结构如下: server1: { OS: Win_2016, Role: CT }, server2: { OS: RHEL7, Role: POM } 服务器1:{ OS:Win_2016, 角色:CT }, 服务器2:{ OS:RHEL7, 角色:POM } 我想将其与以下内容合并: server1: { MAC: 00:01:02:03:04:05 }, server2: { MAC: 00:01:02:03:04:06 } 服务器1:{ MAC:00:01:0
谢谢我认为这很简单,我认为你只需要在字典中添加一个新的字典 看看这个,现在让我看看你的问题是否已经解决
server1 = {"OS": "Win_2016", "Role": "CT"}
server2 = {"OS": "RHEL7", "Role": "POM"}
print(server1)
print(server2)
server1["MAC"] = "00:01:02:03:04:05" # Here I´m just adding the new key "MAC"
server2["MAC"] = "00:01:02:03:04:06" # Here is happening the same, with its respective value
print(server1)
print(server2)
请注意,您的示例数据结构既不是json,也不是yaml 同时,它非常明确,所以在下面的示例中,我将其更正为纯yaml。根据确切的数据源相应地修复此问题 在ansible中,您可以将词汇表和。由于您有嵌套元素,因此必须使用
recursive=true
选项
以下剧本:
---
-名称:combine dict demo
主机:本地主机
收集事实:错误
变量:
格言1:
服务器1:
OS:Win_2016
角色:CT
服务器2:
OS:RHEL7
角色:POM
格言2:
服务器1:
麦克:“00:01:02:03:04:05”
服务器2:
麦克:“00:01:02:03:04:06”
任务:
-名称:合并目录
调试:
msg:{{dict1 | combine(dict2,recursive=true)}”
给出以下结果:
$ ansible-playbook test.yml
PLAY [combine dict demo] ********************************************************************************************************************************************************************************************************************
TASK [combine the dicts] ********************************************************************************************************************************************************************************************************************
ok: [localhost] => {
"msg": {
"server1": {
"MAC": "00:01:02:03:04:05",
"OS": "Win_2016",
"Role": "CT"
},
"server2": {
"MAC": "00:01:02:03:04:06",
"OS": "RHEL7",
"Role": "POM"
}
}
}
PLAY RECAP **********************************************************************************************************************************************************************************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
我说得不够具体。我在寻找一个可行的解决方案。谢谢,这很有效。我确信我已经试过了,但显然没有。