diff options
author | James Cammarata <jimi@sngx.net> | 2016-06-23 09:17:06 -0500 |
---|---|---|
committer | James Cammarata <jimi@sngx.net> | 2016-06-23 09:19:32 -0500 |
commit | c24c0f5f6b6000e91eaf2f763b75d6f71aaf24e0 (patch) | |
tree | 06c5f663c399b7d057f7006b9f43109013ea3fee | |
parent | dae0b833f5bdde749dc1775b54d19473c0871648 (diff) | |
download | ansible-c24c0f5f6b6000e91eaf2f763b75d6f71aaf24e0.tar.gz |
Properly wrap objects using json default encoder
Our custom encoder for the to_json filter was simply returning the
object if it was not a HostVars object, leading in some cases to a
TypeError when the data contained an undefined variable. This lead
to an odd error message being propagated up, so we now properly catch
this as an undefined variable error.
Fixes #15610
-rw-r--r-- | lib/ansible/playbook/base.py | 4 | ||||
-rw-r--r-- | lib/ansible/plugins/filter/core.py | 2 |
2 files changed, 3 insertions, 3 deletions
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''' |