Ansible:将值从一个字典替换为另一个字典,而无需添加整个字典

时间:2020-03-17 23:18:50

标签: python ansible

正如标题所暗示的那样,如果一个字典的关键在另一个字典中找到,我希望将这两个字典合并起来;使用第二个字典的值。

例如

第1部分:

{
  "test": "replace me",
  "test2": "some value"
}

第2部分:

{
  "test": "replaced",
  "test3": "Don't add"
}

综合结果:

{
  "test": "replaced",
  "test2": "some value"
}

1 个答案:

答案 0 :(得分:1)

下面的剧本

shell> cat playbook.yml
- hosts: localhost
  vars:
    dict1:
      test: "replace me"
      test2: "some value"
    dict2:
      test: "replaced"
      test3: "Don't add"
  tasks:
    - set_fact:
        dict1: "{{ dict1|combine({item: dict2[item]}) }}"
      loop: "{{ dict1.keys()|list|intersect(dict2.keys()|list) }}"
    - debug:
        var: dict1

给予

shell> ansible-playbook playbook.yml

...

ok: [localhost] => {
    "dict1": {
        "test": "replaced", 
        "test2": "some value"
    }
}