diff --git a/lib/ansible/playbook/play.py b/lib/ansible/playbook/play.py index a24c5fff1b..78f2f6d9ba 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 998e55f1f3..9426e254eb 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): '''