附加到 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 }}"
我有以下结构需要合并到一个字典列表中。
我可以将 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 }}"