diff options
author | Brian Coca <bcoca@users.noreply.github.com> | 2016-07-12 10:13:00 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-07-12 10:13:00 -0400 |
commit | ed7623ecdec8585282ce91f1534d02e6a38c22a4 (patch) | |
tree | aa0eb169cd67df07ad9b1323b635392eb5685c22 /lib/ansible/plugins/test | |
parent | 245ce9461d376ac1f9d508308e8525b761d93a2b (diff) | |
download | ansible-ed7623ecdec8585282ce91f1534d02e6a38c22a4.tar.gz |
J2 test docs (#16646)
* moved tests from filters to actual jinja2 tests
also removed some unused declarations and imports
* split tests into their own docs
removed isnan as existing jinja2's 'number' already covers same
added missing docs for several tests
* updated as per feedback
Diffstat (limited to 'lib/ansible/plugins/test')
-rw-r--r-- | lib/ansible/plugins/test/core.py | 33 | ||||
-rw-r--r-- | lib/ansible/plugins/test/mathstuff.py | 9 |
2 files changed, 42 insertions, 0 deletions
diff --git a/lib/ansible/plugins/test/core.py b/lib/ansible/plugins/test/core.py index 93b65b9481..b6acadc80d 100644 --- a/lib/ansible/plugins/test/core.py +++ b/lib/ansible/plugins/test/core.py @@ -20,6 +20,9 @@ from __future__ import (absolute_import, division, print_function) __metaclass__ = type import re +import operator as py_operator +from distutils.version import LooseVersion, StrictVersion + from ansible import errors def failed(*a, **kw): @@ -84,6 +87,33 @@ def search(value, pattern='', ignorecase=False, multiline=False): ''' Perform a `re.search` returning a boolean ''' return regex(value, pattern, ignorecase, multiline, 'search') +def version_compare(value, version, operator='eq', strict=False): + ''' Perform a version comparison on a value ''' + op_map = { + '==': 'eq', '=': 'eq', 'eq': 'eq', + '<': 'lt', 'lt': 'lt', + '<=': 'le', 'le': 'le', + '>': 'gt', 'gt': 'gt', + '>=': 'ge', 'ge': 'ge', + '!=': 'ne', '<>': 'ne', 'ne': 'ne' + } + + if strict: + Version = StrictVersion + else: + Version = LooseVersion + + if operator in op_map: + operator = op_map[operator] + else: + raise errors.AnsibleFilterError('Invalid operator type') + + try: + method = getattr(py_operator, operator) + return method(Version(str(value)), Version(str(version))) + except Exception as e: + raise errors.AnsibleFilterError('Version comparison: %s' % e) + class TestModule(object): ''' Ansible core jinja2 tests ''' @@ -108,4 +138,7 @@ class TestModule(object): 'search': search, 'regex': regex, + # version comparison + 'version_compare': version_compare, + } diff --git a/lib/ansible/plugins/test/mathstuff.py b/lib/ansible/plugins/test/mathstuff.py index 54b33b70b6..c736bbe6b6 100644 --- a/lib/ansible/plugins/test/mathstuff.py +++ b/lib/ansible/plugins/test/mathstuff.py @@ -18,12 +18,20 @@ from __future__ import (absolute_import, division, print_function) __metaclass__ = type +import math + def issubset(a, b): return set(a) <= set(b) def issuperset(a, b): return set(a) >= set(b) +def isnotanumber(x): + try: + return math.isnan(x) + except TypeError: + return False + class TestModule: ''' Ansible math jinja2 tests ''' @@ -32,4 +40,5 @@ class TestModule: # set theory 'issubset': issubset, 'issuperset': issuperset, + 'isnan': isnotanumber, } |