附加到 Ansible 列表中的 dict

Eri*_*ber 2 jinja2 ansible ansible-2.x

我有以下结构,我需要将其合并到一个 dicts 列表中。

我可以更改secrets列表的语法/结构(如果更容易,可以更改为其他内容)。

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

  secrets:
    - name: foo
      password: foopass
    - name: bar
      password: barpass
Run Code Online (Sandbox Code Playgroud)

预期结果:

users:
  - name: foo
    database: foodb
    password: foopass
  - name: bar
    database: bardb
    password: barpass
Run Code Online (Sandbox Code Playgroud)

我尝试了几个过滤器都无济于事,我最接近的是这个:

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

结果:

fatal: [localhost]: FAILED! => {"failed": true, "msg": "|combine expects dictionaries, got u'foo'"}
Run Code Online (Sandbox Code Playgroud)

Kon*_*rov 7

例如:

---
- 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 }}"
Run Code Online (Sandbox Code Playgroud)