diff --git a/lib/ansible/playbook/base.py b/lib/ansible/playbook/base.py index 3e877ede91..be8b578a32 100644 --- a/lib/ansible/playbook/base.py +++ b/lib/ansible/playbook/base.py @@ -31,7 +31,7 @@ from ansible.compat.six import iteritems, string_types from jinja2.exceptions import UndefinedError -from ansible.errors import AnsibleParserError +from ansible.errors import AnsibleParserError, AnsibleUndefinedVariable from ansible.parsing.dataloader import DataLoader from ansible.playbook.attribute import Attribute, FieldAttribute from ansible.utils.boolean import boolean @@ -406,7 +406,7 @@ class Base: except (TypeError, ValueError) as e: raise AnsibleParserError("the field '%s' has an invalid value (%s), and could not be converted to an %s." " Error was: %s" % (name, value, attribute.isa, e), obj=self.get_ds()) - except UndefinedError as 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()) diff --git a/lib/ansible/plugins/filter/core.py b/lib/ansible/plugins/filter/core.py index ea5bb67be8..9dc01042f2 100644 --- a/lib/ansible/plugins/filter/core.py +++ b/lib/ansible/plugins/filter/core.py @@ -68,7 +68,7 @@ class AnsibleJSONEncoder(json.JSONEncoder): if isinstance(o, HostVars): return dict(o) else: - return o + return json.JSONEncoder.default(o) def to_yaml(a, *args, **kw): '''Make verbose, human readable yaml'''