Ansible - 合并两个字典列表

标记

我试图弄清楚如何组合两个不同大小的字典。目的是将其他收件人添加到第三个字典的收件人列表中。

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_listmail_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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何合并两个字典的字典列表

来自分类Dev

合并两个字典列表并更新键

来自分类Dev

优化在python中合并两个字典列表

来自分类Dev

合并两个字典

来自分类Dev

如何合并两个字典

来自分类Dev

比较两个字典列表

来自分类Dev

合并两个字典,同时保留原始字典

来自分类Dev

通过将两个字典的值合并到排序列表中来合并两个字典

来自分类Dev

在Python中合并具有相同键的列表的两个字典

来自分类Dev

合并两个字典列表,将值加在一起

来自分类Dev

PYTHON:如何以最pythonic的方式合并列表中的两个字典

来自分类Dev

在python中合并两个字典,并将列表作为值

来自分类Dev

Python - 合并两个字典列表,添加重复键的值

来自分类Dev

合并两个字典列表以在 python 中创建第三个

来自分类Dev

合并两个字典的泛型函数

来自分类Dev

如何在JavaScript中合并两个字典

来自分类Dev

像这样在python中合并两个字典

来自分类Dev

如何合并两个字典而不会造成混乱

来自分类Dev

通过键合并两个字典

来自分类Dev

如何以特定方式合并两个字典?

来自分类Dev

获取两个字典列表之间的差异(增量)

来自分类Dev

键/值对的两个字典列表的交集

来自分类Dev

比较python中的两个字典列表

来自分类Dev

在python中找到两个字典列表的差异

来自分类Dev

根据给定条件映射两个字典列表

来自分类Dev

如何比较两个字典与内部列表?

来自分类Dev

Python:两个字典列表的比较

来自分类Dev

比较Python中的两个字典列表

来自分类Dev

我如何比较两个字典列表