向Ansible中的现有键添加值

向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 } 服务器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

我实际上如何合并它们


谢谢

我认为这很简单,我认为你只需要在字典中添加一个新的字典

看看这个,现在让我看看你的问题是否已经解决

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 

我说得不够具体。我在寻找一个可行的解决方案。谢谢,这很有效。我确信我已经试过了,但显然没有。