summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Cammarata <jimi@sngx.net>2016-06-23 09:17:06 -0500
committerJames Cammarata <jimi@sngx.net>2016-06-23 09:19:32 -0500
commitc24c0f5f6b6000e91eaf2f763b75d6f71aaf24e0 (patch)
tree06c5f663c399b7d057f7006b9f43109013ea3fee
parentdae0b833f5bdde749dc1775b54d19473c0871648 (diff)
downloadansible-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.py4
-rw-r--r--lib/ansible/plugins/filter/core.py2
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'''