On Tue, 30 Jun 2020 10:00:14 +0200
"'Felix Fontein' via Ansible Project" <ansible-project@googlegroups.com>
wrote:

> 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

shell> 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

-- 
Vladimir Botka

-- 
You received this message because you are subscribed to the Google Groups 
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to ansible-project+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/20200701081420.1bd04551%40gmail.com.

Attachment: pgpmryG64fVDZ.pgp
Description: OpenPGP digital signature

Reply via email to