From cdb5a222c50eb9c67f21d22d7c4da1e67fb9c01f Mon Sep 17 00:00:00 2001 From: Brian Coca Date: Tue, 11 Oct 2016 07:53:25 -0700 Subject: [PATCH] restored 'results' filters tests do not work the same, restoring old filters to keep backwards compat tests now only implment the new normalized 'tense' --- lib/ansible/plugins/filter/core.py | 54 ++++++++++++++++++++++++++++++ lib/ansible/plugins/test/core.py | 4 --- 2 files changed, 54 insertions(+), 4 deletions(-) diff --git a/lib/ansible/plugins/filter/core.py b/lib/ansible/plugins/filter/core.py index 3df69fd8286..276a95dd160 100644 --- a/lib/ansible/plugins/filter/core.py +++ b/lib/ansible/plugins/filter/core.py @@ -387,6 +387,46 @@ def extract(item, container, morekeys=None): return value +def failed(*a, **kw): + ''' Test if task result yields failed ''' + item = a[0] + if type(item) != dict: + raise errors.AnsibleFilterError("|failed expects a dictionary") + rc = item.get('rc',0) + failed = item.get('failed',False) + if rc != 0 or failed: + return True + else: + return False + +def success(*a, **kw): + ''' Test if task result yields success ''' + return not failed(*a, **kw) + +def changed(*a, **kw): + ''' Test if task result yields changed ''' + item = a[0] + if type(item) != dict: + raise errors.AnsibleFilterError("|changed expects a dictionary") + if not 'changed' in item: + changed = False + if ('results' in item # some modules return a 'results' key + and type(item['results']) == list + and type(item['results'][0]) == dict): + for result in item['results']: + changed = changed or result.get('changed', False) + else: + changed = item.get('changed', False) + return changed + +def skipped(*a, **kw): + ''' Test if task result yields skipped ''' + item = a[0] + if type(item) != dict: + raise errors.AnsibleFilterError("|skipped expects a dictionary") + skipped = item.get('skipped', False) + return skipped + class FilterModule(object): ''' Ansible core jinja2 filters ''' @@ -467,4 +507,18 @@ class FilterModule(object): # array and dict lookups 'extract': extract, + + # failure testing + 'failed' : failed, + 'failure' : failed, + 'success' : success, + 'succeeded' : success, + + # changed testing + 'changed' : changed, + 'change' : changed, + + # skip testing + 'skipped' : skipped, + 'skip' : skipped, } diff --git a/lib/ansible/plugins/test/core.py b/lib/ansible/plugins/test/core.py index b6acadc80d2..19f6964f159 100644 --- a/lib/ansible/plugins/test/core.py +++ b/lib/ansible/plugins/test/core.py @@ -121,17 +121,13 @@ class TestModule(object): return { # failure testing 'failed' : failed, - 'failure' : failed, - 'success' : success, 'succeeded' : success, # changed testing 'changed' : changed, - 'change' : changed, # skip testing 'skipped' : skipped, - 'skip' : skipped, # regex 'match': match,