将两个散列合并

时间:2018-09-24 15:50:38

标签: ansible

我想使用ansible结合以下两个哈希。

secret:
  env1:
    password: p1

public:
  env1:
    username: u1

结果应该是

combined_hash:
  env1:
    username: u1
    password: p1

我不知道如何在同一任务中结合使用with_dict或with_together过滤器(如果那是正确的方法)。

看来这可能有效(按照http://toroid.org/ansible-combine

{'a':{'x':1}}|combine({'a':{'y':2}}, recursive=True)
    → {'a':{'x':1, 'y':2}}

但是我对如何将这个硬编码的示例转换为使用{item.0:item.1}样式感到困惑。

1 个答案:

答案 0 :(得分:3)

您只需要使用combine过滤器即可。

$ cat test.yml 
---
- hosts: localhost
  gather_facts: no
  vars:
    secret:
      env1:
        password: p1
    public:
      env1:
        username: u1
  tasks:
    - name: test combine hashs
      set_fact:
        combined_hash: "{{ secret | combine(public, recursive=True) }}"

    - debug: msg="{{ combined_hash }}"
TASK [debug] **************************************************************************************
ok: [localhost] => {
    "msg": {
        "env1": {
            "password": "p1", 
            "username": "u1"
        }
    }
}

您可以在此处获取更多信息:Combine filter on Ansible docs