Package: ansible-filter
Ansible FilterContainsAnsiblerelated filter set for collection/object operations. Aims to extend the officialAnsible Filters.Available filters are listedbelow.InstallPyPIpip install -U ansible-filterSourcegit clone git@github.com:nl2go/ansible-filter.git
cd ansible-filter/
pip install .FiltersChange SetComputes the change set between a list of objects using a key attribute non-recursively.The filter argumentslocalandoriginare non-associative. Objects present at theoriginbut missing
withinlocalare considered non managed.The result is a change set with a map of lists to:create- objects to create atoriginupdate- objects to update atorigindelete- objects to delete atoriginnoop- objects with no operation requiredUseful to interact with any kind of a stateful API.from ansible_filter import change_set

local = [{ 'id': 1, 'foo': 'bar' }, { 'id': 2, 'foo': 'foo' }, { 'id': 3, 'foz':'baz' }, { 'id': 4, 'state': 'absent' }]
origin = [{ 'id': 2, 'foo': 'bar' }, { 'id': 3, 'foz':'baz' }, { 'id': 4, 'x': 'y' }, { 'id': 5, 'foo': 'bar' }]

result = change_set.change_set(local, origin, 'id')
print(result)  

[
    'create': [{ 'id': 1, 'foo': 'bar' }],
    'update': [{ 'id': 2, 'foo': 'foo' }],
    'delete': [{ 'id': 4, 'x': 'y' }],
    'noop': [{ 'id': 3, 'foz': 'baz' }],
]Form URL EncodeEncodes arbitrary objects to form URL format.from ansible_filter import form_urlencode

obj = { 'foo': 'bar', 'foz': ['baz'] }

result = form_urlencode.form_urlencode(obj)
print(result)

foo=bar&foz[0]=baz&PickFilters a list of objects retaining attributes only matching the names passed as argument, non-recursively.from ansible_filter import pick

elements = [{ 'foo': 'bar', 'foz': 'baz' }]

result = pick.pick(elements, ['foo'])
print(result)

[{ 'foo': 'bar' }]OmitFilters a list objects omitting attributes matching the names passed as argument, non-recursively.from ansible_filter import omit

elements = [{ 'foo': 'bar', 'foz': 'baz' }]

result = omit.omit(elements, ['foo'])
print(result)

[{ 'foz': 'baz' }]Group ByGroups elements by key attribute.from ansible_filter import group_by

left = [{ 'id': '1', 'foo': 'a' }, { 'id': '2', 'foz': 'x' }]
right = [{ 'id': '1', 'foo': 'b' }, { 'id': '2', 'foz': 'y' }]

result = group_by.group_by(left, right, 'id')
print(result)

[
    { 'id': '1', 'group': [{ 'id': '1', 'foo': 'a' }, { 'id': '1', 'foo': 'b' }] }, 
    { 'id': '2', 'group': [{ 'id': '2', 'foz': 'x' }, { 'id': '2', 'foz': 'y' }] }
]List 2 DictConverts a list to dict by key attribute.from ansible_filter import list_to_dict

elements = [{ 'id': '1', 'foo': 'bar' }, { 'id': '2', 'foz': 'baz' }]

result = list_to_dict.list_to_dict(elements, 'id')
print(result)

{'1': {'foo': 'bar', 'id': '1'}, '2': {'id': '2', 'foz': 'baz'}}Point to Point ConnectionsResolves point to point connections between the local and remote hosts.from ansible_filter import network

remote_hostnames = ['two', 'three']
hostname = 'one'
hostvars = {
    'one': {
        'ansible_default_ipv4': {
            'interface': 'eth0'
        },
        'ansible_eth0': {
            'ipv4': {
                'address': '127.0.0.1',
            }
        }
    },
    'two': {
        'ansible_default_ipv4': {
            'interface': 'eth0'
        },
        'ansible_eth0': {
            'ipv4': {
                'address': '127.0.0.2',
            }
        }
    },
    'three': {
        'ansible_default_ipv4': {
            'interface': 'eth0'
        },
        'ansible_eth0': {
            'ipv4': {
                'address': '127.0.0.3',
            }
        }        
    }
}

result = network.get_point_to_point_connections(remote_hostnames, hostname, hostvars)

[
  {
    'remote': {
      'interface': 'eth0',
      'hostname': 'two',
      'address': '127.0.0.2'
    },
    'local': {
      'interface': 'eth0',
      'hostname': 'one',
      'address': '127.0.0.1'
    }
  },
  {
    'remote': {
      'interface': 'eth0',
      'hostname': 'three',
      'address': '127.0.0.3'
    },
    'local': {
      'interface': 'eth0',
      'hostname': 'one',
      'address': '127.0.0.1'
    }
  }
]LinksWebsite:https://newsletter2go.com/License:MITReleases:https://pypi.org/project/ansible-filter/Code:https://github.com/nl2go/ansible-filterIssue tracker:https://github.com/nl2go/ansible-filter/issues