From 17e086fe8ceb19839281b4398fdf83690dbf695f Mon Sep 17 00:00:00 2001 From: Brian Coca Date: Tue, 31 Mar 2015 21:36:18 -0400 Subject: [PATCH 1/2] dont break everything when one of the vars in inject does not template correctly, wait till its used --- lib/ansible/utils/template.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/ansible/utils/template.py b/lib/ansible/utils/template.py index a58b9399715..998e55f1f3b 100644 --- a/lib/ansible/utils/template.py +++ b/lib/ansible/utils/template.py @@ -188,7 +188,11 @@ class _jinja2_vars(object): if isinstance(var, dict) and varname == "vars" or isinstance(var, HostVars): return var else: - return template(self.basedir, var, self.vars, fail_on_undefined=self.fail_on_undefined) + try: + return template(self.basedir, var, self.vars, fail_on_undefined=self.fail_on_undefined) + except: + raise KeyError("undefined variable: %s" % varname) + def add_locals(self, locals): ''' From 0d1e2e74a105fc16baf7fb2ff55cbc3c3d06ae6e Mon Sep 17 00:00:00 2001 From: Brian Coca Date: Tue, 31 Mar 2015 23:07:03 -0400 Subject: [PATCH 2/2] converted error on play var initialization into warning with more information --- lib/ansible/playbook/play.py | 6 +++++- lib/ansible/utils/template.py | 11 +++++------ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/lib/ansible/playbook/play.py b/lib/ansible/playbook/play.py index a24c5fff1b5..78f2f6d9ba8 100644 --- a/lib/ansible/playbook/play.py +++ b/lib/ansible/playbook/play.py @@ -119,7 +119,11 @@ class Play(object): temp_vars = utils.combine_vars(self.vars, self.vars_file_vars) temp_vars = utils.combine_vars(temp_vars, self.playbook.extra_vars) - ds = template(basedir, ds, temp_vars) + try: + ds = template(basedir, ds, temp_vars) + except errors.AnsibleError, e: + utils.warning("non fatal error while trying to template play variables: %s" % (str(e))) + ds['tasks'] = _tasks ds['handlers'] = _handlers diff --git a/lib/ansible/utils/template.py b/lib/ansible/utils/template.py index 998e55f1f3b..9426e254eb5 100644 --- a/lib/ansible/utils/template.py +++ b/lib/ansible/utils/template.py @@ -118,7 +118,10 @@ def template(basedir, varname, templatevars, lookup_fatal=True, depth=0, expand_ if isinstance(varname, basestring): if '{{' in varname or '{%' in varname: - varname = template_from_string(basedir, varname, templatevars, fail_on_undefined) + try: + varname = template_from_string(basedir, varname, templatevars, fail_on_undefined) + except errors.AnsibleError, e: + raise errors.AnsibleError("Failed to template %s: %s" % (varname, str(e))) if (varname.startswith("{") and not varname.startswith("{{")) or varname.startswith("["): eval_results = utils.safe_eval(varname, locals=templatevars, include_exceptions=True) @@ -188,11 +191,7 @@ class _jinja2_vars(object): if isinstance(var, dict) and varname == "vars" or isinstance(var, HostVars): return var else: - try: - return template(self.basedir, var, self.vars, fail_on_undefined=self.fail_on_undefined) - except: - raise KeyError("undefined variable: %s" % varname) - + return template(self.basedir, var, self.vars, fail_on_undefined=self.fail_on_undefined) def add_locals(self, locals): '''