附加到 Ansible 列表中的字典

Append to dict inside a list in Ansible

我有以下结构需要合并到一个字典列表中。

我可以将 secrets 列表的 syntax/structure 更改为其他内容(如果更容易的话)。

vars:
  users:
    - name: foo
      database: foodb
    - name: bar
      database: bardb

  secrets:
    - name: foo
      password: foopass
    - name: bar
      password: barpass

预期结果:

users:
  - name: foo
    database: foodb
    password: foopass
  - name: bar
    database: bardb
    password: barpass

我试过几个过滤器都没有用,我最接近的是这个:

tasks: 
  - set_fact: foo: "{{ foo|default([]) + [item | combine(secrets, recursive=True)] }}"
    with_items: "{{ users }}"

结果:

fatal: [localhost]: FAILED! => {"failed": true, "msg": "|combine expects dictionaries, got u'foo'"}

例如:

---
- hosts: localhost
  gather_facts: no
  vars:
    users:
      - name: foo
        database: foodb
      - name: bar
        database: bardb
    secrets:
      - name: foo
        password: foopass
      - name: bar
        password: barpass
  tasks:
    - set_fact:
        tmp_user: "{{ item | combine(secrets | selectattr('name','equalto',item.name) | first) }}"
      with_items: "{{ users }}"
      register: tmp_users
    - set_fact:
        users: "{{ tmp_users.results | map(attribute='ansible_facts.tmp_user') | list }}"
    - debug:
        msg: "{{ users }}"