Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Ansible中的列表中追加到dict_Ansible_Jinja2_Ansible 2.x - Fatal编程技术网

在Ansible中的列表中追加到dict

在Ansible中的列表中追加到dict,ansible,jinja2,ansible-2.x,Ansible,Jinja2,Ansible 2.x,我需要将以下结构合并到一个目录列表中 我可以更改secrets列表的语法/结构(如果更容易的话,可以更改为其他内容) 预期结果: users: - name: foo database: foodb password: foopass - name: bar database: bardb password: barpass 我已经尝试了几种过滤器,但都没有用,最近的一种是: tasks: - set_fact: foo: "{{ foo|defa

我需要将以下结构合并到一个目录列表中

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

预期结果:

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

杰出的按部就班地工作:-)
---
- 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 }}"