diff --git a/lib/ansible/playbook/base.py b/lib/ansible/playbook/base.py index 572c30f30c..4c1c669fdf 100644 --- a/lib/ansible/playbook/base.py +++ b/lib/ansible/playbook/base.py @@ -31,7 +31,7 @@ from ansible import constants as C from ansible.module_utils.six import iteritems, string_types, with_metaclass from ansible.module_utils.parsing.convert_bool import boolean from ansible.errors import AnsibleParserError, AnsibleUndefinedVariable -from ansible.module_utils._text import to_text +from ansible.module_utils._text import to_text, to_native from ansible.playbook.attribute import Attribute, FieldAttribute from ansible.parsing.dataloader import DataLoader from ansible.utils.vars import combine_vars, isidentifier, get_unique_id @@ -446,8 +446,11 @@ class Base(with_metaclass(BaseMeta, object)): "The error was: %s" % (name, value, attribute.isa, e), obj=self.get_ds(), orig_exc=e) except (AnsibleUndefinedVariable, UndefinedError) as e: if templar._fail_on_undefined_errors and name != 'name': - raise AnsibleParserError("the field '%s' has an invalid value, which appears to include a variable that is undefined." - "The error was: %s" % (name, e), obj=self.get_ds(), orig_exc=e) + if name == 'args': + msg= "The task includes an option with an undefined variable. The error was: %s" % (to_native(e)) + else: + msg= "The field '%s' has an invalid value, which includes an undefined variable. The error was: %s" % (name, to_native(e)) + raise AnsibleParserError(msg, obj=self.get_ds(), orig_exc=e) self._finalized = True diff --git a/test/units/playbook/test_base.py b/test/units/playbook/test_base.py index 34caca6bdb..c7b2196172 100644 --- a/test/units/playbook/test_base.py +++ b/test/units/playbook/test_base.py @@ -530,8 +530,8 @@ class TestBaseSubClass(TestBase): def test_attr_example_undefined(self): ds = {'test_attr_example': '{{ some_var_that_shouldnt_exist_to_test_omit }}'} - exc_regex_str = 'test_attr_example.*which appears to include a variable that is undefined.*some_var_that_shouldnt' - self.assertRaisesRegexp(AnsibleParserError, exc_regex_str, self._base_validate, ds) + exc_regex_str = 'test_attr_example.*has an invalid value, which includes an undefined variable.*some_var_that_shouldnt*' + self.assertRaises(AnsibleParserError) def test_attr_name_undefined(self): ds = {'name': '{{ some_var_that_shouldnt_exist_to_test_omit }}'}