diff options
-rw-r--r-- | filter_plugins/oo_filters.py | 106 |
1 files changed, 62 insertions, 44 deletions
diff --git a/filter_plugins/oo_filters.py b/filter_plugins/oo_filters.py index b57056375..caf1fd1f0 100644 --- a/filter_plugins/oo_filters.py +++ b/filter_plugins/oo_filters.py @@ -1,39 +1,42 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# vim: expandtab:tabstop=4:shiftwidth=4 + from ansible import errors, runner import json import pdb def oo_pdb(arg): - ''' This pops you into a pdb instance where arg is the data passed in from the filter. + ''' This pops you into a pdb instance where arg is the data passed in from the filter. Ex: "{{ hostvars | oo_pdb }}" - ''' - pdb.set_trace() - return arg + ''' + pdb.set_trace() + return arg def oo_len(arg): - ''' This returns the length of the argument + ''' This returns the length of the argument Ex: "{{ hostvars | oo_len }}" - ''' - return len(arg) + ''' + return len(arg) def get_attr(data, attribute=None): - ''' This looks up dictionary attributes of the form a.b.c and returns the value. + ''' This looks up dictionary attributes of the form a.b.c and returns the value. Ex: data = {'a': {'b': {'c': 5}}} attribute = "a.b.c" returns 5 - ''' - - if not attribute: - raise errors.AnsibleFilterError("|failed expects attribute to be set") + ''' + if not attribute: + raise errors.AnsibleFilterError("|failed expects attribute to be set") - ptr = data - for attr in attribute.split('.'): - ptr = ptr[attr] + ptr = data + for attr in attribute.split('.'): + ptr = ptr[attr] - return ptr + return ptr def oo_collect(data, attribute=None, filters={}): - ''' This takes a list of dict and collects all attributes specified into a list - If filter is specified then we will include all items that match _ALL_ of filters. + ''' This takes a list of dict and collects all attributes specified into a list + If filter is specified then we will include all items that match _ALL_ of filters. Ex: data = [ {'a':1, 'b':5, 'z': 'z'}, # True, return {'a':2, 'z': 'z'}, # True, return {'a':3, 'z': 'z'}, # True, return @@ -42,44 +45,59 @@ def oo_collect(data, attribute=None, filters={}): attribute = 'a' filters = {'z': 'z'} returns [1, 2, 3] - ''' + ''' - if not issubclass(type(data), list): - raise errors.AnsibleFilterError("|failed expects to filter on a List") + if not issubclass(type(data), list): + raise errors.AnsibleFilterError("|failed expects to filter on a List") - if not attribute: - raise errors.AnsibleFilterError("|failed expects attribute to be set") + if not attribute: + raise errors.AnsibleFilterError("|failed expects attribute to be set") - if filters: - retval = [get_attr(d, attribute) for d in data if all([ d[key] == filters[key] for key in filters ]) ] - else: - retval = [get_attr(d, attribute) for d in data] + if filters: + retval = [get_attr(d, attribute) for d in data if all([ d[key] == filters[key] for key in filters ]) ] + else: + retval = [get_attr(d, attribute) for d in data] - return retval + return retval def oo_select_keys(data, keys): - ''' This returns a list, which contains the value portions for the keys + ''' This returns a list, which contains the value portions for the keys Ex: data = { 'a':1, 'b':2, 'c':3 } keys = ['a', 'c'] returns [1, 3] - ''' + ''' + + if not issubclass(type(data), dict): + raise errors.AnsibleFilterError("|failed expects to filter on a Dictionary") - if not issubclass(type(data), dict): - raise errors.AnsibleFilterError("|failed expects to filter on a Dictionary") + if not issubclass(type(keys), list): + raise errors.AnsibleFilterError("|failed expects first param is a list") - if not issubclass(type(keys), list): - raise errors.AnsibleFilterError("|failed expects first param is a list") + # Gather up the values for the list of keys passed in + retval = [data[key] for key in keys] - # Gather up the values for the list of keys passed in - retval = [data[key] for key in keys] + return retval - return retval +def oo_prepend_strings_in_list(data, prepend): + ''' This takes a list of strings and prepends a string to each item in the + list + Ex: data = ['cart', 'tree'] + prepend = 'apple-' + returns ['apple-cart', 'apple-tree'] + ''' + if not issubclass(type(data), list): + raise errors.AnsibleFilterError("|failed expects first param is a list") + if not all(isinstance(x, basestring) for x in data): + raise errors.AnsibleFilterError("|failed expects first param is a list of strings") + retval = [prepend + s for s in data] + return retval class FilterModule (object): - def filters(self): - return { - "oo_select_keys": oo_select_keys, - "oo_collect": oo_collect, - "oo_len": oo_len, - "oo_pdb": oo_pdb - } + def filters(self): + return { + "oo_select_keys": oo_select_keys, + "oo_collect": oo_collect, + "oo_len": oo_len, + "oo_pdb": oo_pdb, + "oo_prepend_strings_in_list": oo_prepend_strings_in_list + } |