summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Cammarata <jimi@sngx.net>2014-08-05 14:58:01 -0500
committerJames Cammarata <jimi@sngx.net>2014-08-05 14:58:01 -0500
commiteeec459f8abc3fa1aefbd7dd2d6ff9ddd4b6b1f2 (patch)
tree0e6af4fd7c2547304ec825e9ca62bdf7cf6e66c0
parentb8783c7555b7f9837e827cca875f350a9bc3f47d (diff)
parentce8c8ab146a6e3f84ab55eaf63d1ba77630733f6 (diff)
downloadansible-eeec459f8abc3fa1aefbd7dd2d6ff9ddd4b6b1f2.tar.gz
Merge branch 'sets_v2' of https://github.com/bcoca/ansible into bcoca-sets_v2
-rw-r--r--lib/ansible/runner/filter_plugins/core.py34
1 files changed, 29 insertions, 5 deletions
diff --git a/lib/ansible/runner/filter_plugins/core.py b/lib/ansible/runner/filter_plugins/core.py
index 6d2e9f3017..b8eecb0376 100644
--- a/lib/ansible/runner/filter_plugins/core.py
+++ b/lib/ansible/runner/filter_plugins/core.py
@@ -23,6 +23,7 @@ import types
import pipes
import glob
import re
+import collections
import operator as py_operator
from ansible import errors
from ansible.utils import md5s
@@ -145,19 +146,42 @@ def regex_replace(value='', pattern='', replacement='', ignorecase=False):
return _re.sub(replacement, value)
def unique(a):
- return set(a)
+ if isinstance(a,collections.Hashable):
+ c = set(a)
+ else:
+ c = []
+ for x in a:
+ if x not in c:
+ c.append(x)
+ return c
def intersect(a, b):
- return set(a).intersection(b)
+ if isinstance(a,collections.Hashable) and isinstance(b,collections.Hashable):
+ c = set(a) & set(b)
+ else:
+ c = unique(filter(lambda x: x in b, a))
+ return c
def difference(a, b):
- return set(a).difference(b)
+ if isinstance(a,collections.Hashable) and isinstance(b,collections.Hashable):
+ c = set(a) - set(b)
+ else:
+ c = unique(filter(lambda x: x not in b, a))
+ return c
def symmetric_difference(a, b):
- return set(a).symmetric_difference(b)
+ if isinstance(a,collections.Hashable) and isinstance(b,collections.Hashable):
+ c = set(a) ^ set(b)
+ else:
+ c = unique(filter(lambda x: x not in intersect(a,b), union(a,b)))
+ return c
def union(a, b):
- return set(a).union(b)
+ if isinstance(a,collections.Hashable) and isinstance(b,collections.Hashable):
+ c = set(a) | set(b)
+ else:
+ c = unique(a + b)
+ return c
def version_compare(value, version, operator='eq', strict=False):
''' Perform a version comparison on a value '''