Combine dictionaries based on a dictionary key value.

Hi,

a new lookup plugin was proposed for community.general which would help
with this:
https://github.com/ansible-collections/community.general/pull/263

We're currently trying to evaluate whether this plugin would be useful
to the community. Feel free to comment there (or try it out!).

Cheers,
Felix

a new lookup plugin was proposed for community.general which would help
with this:
https://github.com/ansible-collections/community.general/pull/263

I have proposed this filter plugin instead
https://github.com/ansible-collections/community.general/pull/604

cat filter_plugins/list.py

from collections import defaultdict
from operator import itemgetter

def lists_mergeby(l1, l2, index):
    '''Merge lists by attribute index. Example:
    - debug: msg="{{ l1|lists_mergeby(l2, 'index')|list }}"
    '''
    d = defaultdict(dict)
    for l in (l1, l2):
        for elem in l:
            d[elem[index]].update(elem)
    return sorted(d.values(), key=itemgetter(index))

class FilterModule(object):
    ''' Ansible list filters '''

    def filters(self):
        return {
            'lists_mergeby': lists_mergeby
        }

Works fine also with Adam's data

    - set_fact:
        aggregate_info2: "{{ net_interface|
                             lists_mergeby(aggregate_info, 'node_name')|
                             list }}"
    - debug:
        var: aggregate_info2

give

  aggregate_info2:
  - address: XX.XXX.X.XXX
    address4oct: '224'
    data_protcol: none
    failover_group: Management
    name: agg_Data1_Cluster01"
    node_name: TEST_NA_CLUSTER_01-01
    percent_used_capacity: '46'
    role: node_mgmt
    size_available: 8141263818752
    size_avaliable_80%: 5122753242726
    size_total: 15092552880128
    size_total_80%: 12074042304102
    size_used: 6951289061376
    vserver: TEST_NA_CLUSTER_01
  - address: XX.XXX.X.XXX
    address4oct: '226'
    data_protcol: none
    failover_group: Management
    name: agg_Data1_Cluster02
    node_name: TEST_NA_CLUSTER_01-02
    percent_used_capacity: '34'
    role: node_mgmt
    size_available: 5116275568640
    size_avaliable_80%: 3561215869747
    size_total: 7775298494464
    size_total_80%: 6220238795571
    size_used: 2659022925824
    vserver: TEST_NA_CLUSTER_01