2017-03-08 3 views
1

私は以下の構造を持っていますが、私は1つのdictsのリストにマージする必要があります。Ansible内のリストの中に補完する

secretsリストの構文/構造を変更することができます。

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

    secrets: 
    - name: foo 
     password: foopass 
    - name: bar 
     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'"} 

答えて

2

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

私が来た最も近いがこれで、無駄にいくつかのフィルタを試してみました

例:

--- 
- 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 }}" 
+0

優秀!それが必要な作業:-) –