Commit 2d88c70c by Stoned Elipot

Introduce exception AnsibleFilterError and use it in Jinja filters. Ignore this…

Introduce exception AnsibleFilterError and use it in Jinja filters.  Ignore this exception when trying to find the name of a task for display (callback) purpose.
parent b2d881a8
......@@ -35,3 +35,6 @@ class AnsibleYAMLValidationFailed(AnsibleError):
class AnsibleUndefinedVariable(AnsibleError):
pass
class AnsibleFilterError(AnsibleError):
pass
......@@ -326,7 +326,7 @@ class PlayBook(object):
ansible.callbacks.set_task(self.callbacks, task)
ansible.callbacks.set_task(self.runner_callbacks, task)
self.callbacks.on_task_start(template(play.basedir, task.name, task.module_vars, lookup_fatal=False), is_handler)
self.callbacks.on_task_start(template(play.basedir, task.name, task.module_vars, lookup_fatal=False, filter_fatal=False), is_handler)
if hasattr(self.callbacks, 'skip_task') and self.callbacks.skip_task:
ansible.callbacks.set_task(self.callbacks, None)
ansible.callbacks.set_task(self.runner_callbacks, None)
......
......@@ -33,7 +33,7 @@ def to_nice_json(*a, **kw):
def failed(*a, **kw):
item = a[0]
if type(item) != dict:
raise errors.AnsibleError("|failed expects a dictionary")
raise errors.AnsibleFilterError("|failed expects a dictionary")
rc = item.get('rc',0)
failed = item.get('failed',False)
if rc != 0 or failed:
......
......@@ -295,9 +295,10 @@ def legacy_varReplace(basedir, raw, vars, lookup_fatal=True, depth=0, expand_lis
# TODO: varname is misnamed here
def template(basedir, varname, vars, lookup_fatal=True, depth=0, expand_lists=True, convert_bare=False, fail_on_undefined=False):
def template(basedir, varname, vars, lookup_fatal=True, depth=0, expand_lists=True, convert_bare=False, fail_on_undefined=False, filter_fatal=True):
''' templates a data structure by traversing it and substituting for other data structures '''
try:
if convert_bare and isinstance(varname, basestring):
first_part = varname.split(".")[0].split("[")[0]
if first_part in vars and '{{' not in varname and '$' not in varname:
......@@ -331,6 +332,11 @@ def template(basedir, varname, vars, lookup_fatal=True, depth=0, expand_lists=Tr
return d
else:
return varname
except errors.AnsibleFilterError:
if filter_fatal:
raise
else:
return varname
class _jinja2_vars(object):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment