diff --git a/lib/ansible/template/vars.py b/lib/ansible/template/vars.py index 97e48ca27ed..e2c95b047cb 100644 --- a/lib/ansible/template/vars.py +++ b/lib/ansible/template/vars.py @@ -107,7 +107,7 @@ class AnsibleJ2Vars(Mapping): except AnsibleUndefinedVariable: raise except Exception as e: - msg = getattr(e, 'message') or to_native(e) + msg = getattr(e, 'message', None) or to_native(e) raise AnsibleError("An unhandled exception occurred while templating '%s'. " "Error was a %s, original message: %s" % (to_native(variable), type(e), msg)) diff --git a/test/units/template/test_templar.py b/test/units/template/test_templar.py index 41783a04a43..a57a0a655f0 100644 --- a/test/units/template/test_templar.py +++ b/test/units/template/test_templar.py @@ -50,6 +50,7 @@ class BaseTemplar(object): some_unsafe_var=wrap_var("unsafe_blip"), some_static_unsafe_var=wrap_var("static_unsafe_blip"), some_unsafe_keyword=wrap_var("{{ foo }}"), + str_with_error="{{ 'str' | from_json }}", ) self.fake_loader = DictDataLoader({ "/path/to/my_file.txt": "foo\n", @@ -183,6 +184,10 @@ class TestTemplarTemplate(BaseTemplar, unittest.TestCase): self.templar.template, data) + def test_template_with_error(self): + """Check that AnsibleError is raised, fail if an unhandled exception is raised""" + self.assertRaises(AnsibleError, self.templar.template, "{{ str_with_error }}") + class TestTemplarMisc(BaseTemplar, unittest.TestCase): def test_templar_simple(self):