summaryrefslogtreecommitdiffstats
path: root/filter_plugins/oo_filters.py
diff options
context:
space:
mode:
Diffstat (limited to 'filter_plugins/oo_filters.py')
-rw-r--r--filter_plugins/oo_filters.py69
1 files changed, 69 insertions, 0 deletions
diff --git a/filter_plugins/oo_filters.py b/filter_plugins/oo_filters.py
new file mode 100644
index 000000000..0c34cfc3e
--- /dev/null
+++ b/filter_plugins/oo_filters.py
@@ -0,0 +1,69 @@
+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.
+ Ex: "{{ hostvars | oo_pdb }}"
+ '''
+ pdb.set_trace()
+ return arg
+
+def get_attr(data, attribute=None):
+ ''' 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")
+
+ ptr = data
+ for attr in attribute.split('.'):
+ ptr = ptr[attr]
+
+ return ptr
+
+def oo_collect(data, attribute=None):
+ ''' This takes a list of dict and collects all attributes specified into a list
+ Ex: data = [ {'a':1,'b':5}, {'a':2}, {'a':3} ]
+ attribute = 'a'
+ returns [1, 2, 3]
+ '''
+
+ 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")
+
+ retval = [get_attr(d, attribute) for d in data]
+
+ return retval
+
+def oo_select_keys(data, 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(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]
+
+ return retval
+
+class FilterModule (object):
+ def filters(self):
+ return {
+ "oo_select_keys": oo_select_keys,
+ "oo_collect": oo_collect,
+ "oo_pdb": oo_pdb
+ }