Skip to main content

The filter module for Hetzner

Project description

Travis (.com) branch Codecov Code Climate maintainability PyPI PyPI - Downloads

Ansible Filter

Contains Ansible related filter set for collection/object operations. Aims to extend the official Ansible Filters.

Available filters are listed below.

Install

PyPI

pip install -U ansible-filter

Source

git clone git@github.com:nl2go/ansible-filter.git
cd ansible-filter/
pip install .

Filters

Change Set

Computes the change set between a list of objects using a key attribute non-recursively.

The filter arguments local and origin are non-associative. Objects present at the origin but missing within local are considered non managed.

The result is a change set with a map of lists to:

  • create - objects to create at origin
  • update - objects to update at origin
  • delete - objects to delete at origin
  • noop - objects with no operation required

Useful 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 Encode

Encodes 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&

Pick

Filters 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' }]

Omit

Filters 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 By

Groups 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 Dict

Converts 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 Connections

Resolves 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'
    }
  }
]

Links

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ansible-filter-1.1.1.tar.gz (5.8 kB view details)

Uploaded Source

File details

Details for the file ansible-filter-1.1.1.tar.gz.

File metadata

  • Download URL: ansible-filter-1.1.1.tar.gz
  • Upload date:
  • Size: 5.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.23.0 setuptools/44.1.0 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/2.7.15

File hashes

Hashes for ansible-filter-1.1.1.tar.gz
Algorithm Hash digest
SHA256 0d44bca291f239a4f546b21dc509cbe49a8bad936b1103ba1f2ca69707425556
MD5 5974d76807e606d1f44f2cc3062ce31b
BLAKE2b-256 795ca34b1b0586a3b1d3cbd485941f458103296a0e14ee56b3e438a06db9080d

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page