我试图弄清楚如何组合两个不同大小的字典。目的是将其他收件人添加到第三个字典的收件人列表中。
mail_aliases_list:
- name: mailer-daemon
recipients:
- foo
- name: postmaster
recipients:
- bar
- name: bin
recipients:
- baz
...
和
mail_aliases_defaults:
- name: mailer-daemon
recipients:
- postmaster
- name: postmaster
recipients:
- root
- name: bin
recipients:
- root
...
导致
mail_aliases:
- name: mailer-daemon
recipients:
- postmaster
- foo
- name: postmaster
recipients:
- root
- bar
- name: bin
recipients:
- root
- baz
...
这有点超出了我对过滤器的理解,我什至不得不寻求帮助让我感到沮丧,但希望我能在这个过程中学到一些东西。
没有简单的方法可以完全按照您的意愿行事,而且您的数据结构方式使其变得更加困难。如果您将mail_aliases_list
和mail_aliases_defaults
变成字典,则更容易实现您想要的最终状态。
就像是:
- hosts: localhost
gather_facts: false
become: true
vars:
mail_aliases_overrides:
mailer-daemon:
recipients:
- foo
postmaster:
recipients:
- bar
bin:
recipients:
- baz
not_in_defaults:
recipients:
- bob
mail_aliases_defaults:
mailer-daemon:
recipients:
- postmaster
postmaster:
recipients:
- root
bin:
recipients:
- root
only_in_defaults:
recipients:
- alice
tasks:
- set_fact:
mail_aliases: >-
{{ mail_aliases|default({})|combine({item:
(mail_aliases_overrides[item]|default({'recipients': []})).recipients +
(mail_aliases_defaults[item]|default({'recipients': []})).recipients
})
}}
loop: "{{ (mail_aliases_overrides.keys()|list + mail_aliases_defaults.keys()|list)|unique }}"
- debug:
var: mail_aliases
这将生成为输出:
PLAY [localhost] ******************************************************************************************************************************************************************************
TASK [set_fact] *******************************************************************************************************************************************************************************
ok: [localhost] => (item=mailer-daemon)
ok: [localhost] => (item=postmaster)
ok: [localhost] => (item=bin)
ok: [localhost] => (item=not_in_defaults)
ok: [localhost] => (item=only_in_defaults)
TASK [debug] **********************************************************************************************************************************************************************************
ok: [localhost] => {
"mail_aliases": {
"bin": [
"baz",
"root"
],
"mailer-daemon": [
"foo",
"postmaster"
],
"not_in_defaults": [
"bob"
],
"only_in_defaults": [
"alice"
],
"postmaster": [
"bar",
"root"
]
}
}
PLAY RECAP ************************************************************************************************************************************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0
我确保这适用于仅存在于mail_aliases_defaults
或之一中的键mail_aliases_overrides
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句