From c4a125e6d9527c7e0149d85b045a2b3836f501fe Mon Sep 17 00:00:00 2001 From: Michael DeHaan Date: Sat, 1 Jun 2013 17:38:12 -0400 Subject: [PATCH] Add ability to use |success and |failed as Jinja2 filters. Example: when: registered_variable|failed --- CHANGELOG.md | 3 ++- lib/ansible/runner/filter_plugins/core.py | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 215e072277..d5f9886e68 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,8 @@ Core Features: * external inventory script added for Spacewalk / Red Hat Satellite servers * It is now possible to feed JSON structures to --extra-vars. Pass in a JSON dictionary/hash to feed in complex data. * group_vars/ and host_vars/ directories can now be kept alongside the playbook as well as inventory (or both!) +* more filters: ability to say {{ foo|success }} and {{ foo|failed }} and when: foo|success and when: foo|failed +* more filters: {{ path|basename }} and {{ path|dirname }} Modules added: @@ -64,7 +66,6 @@ Modules removed * vagrant -- can't be compatible with both versions at once, just run things though the vagrant provisioner in vagrant core - Bugfixes and Misc Changes: * service module happier if only enabled=yes|no specified and no state diff --git a/lib/ansible/runner/filter_plugins/core.py b/lib/ansible/runner/filter_plugins/core.py index f1e26b0917..8895da656d 100644 --- a/lib/ansible/runner/filter_plugins/core.py +++ b/lib/ansible/runner/filter_plugins/core.py @@ -19,6 +19,7 @@ import base64 import json import os.path import yaml +from ansible import errors def to_nice_yaml(*a, **kw): '''Make verbose, human readable yaml''' @@ -28,6 +29,20 @@ def to_nice_json(*a, **kw): '''Make verbose, human readable JSON''' return json.dumps(*a, indent=4, sort_keys=True, **kw) +def failed(*a, **kw): + item = a[0] + if type(item) != dict: + raise errors.AnsibleError("|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): + return not failed(*a, **kw) + class FilterModule(object): ''' Ansible core jinja2 filters ''' @@ -50,5 +65,10 @@ class FilterModule(object): # path 'basename': os.path.basename, 'dirname': os.path.dirname, + + # failure testing + 'failed' : failed, + 'success' : success, + }