mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-07-23 05:10:22 -07:00
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
This commit is contained in:
parent
dae0b833f5
commit
c24c0f5f6b
2 changed files with 3 additions and 3 deletions
|
@ -31,7 +31,7 @@ from ansible.compat.six import iteritems, string_types
|
||||||
|
|
||||||
from jinja2.exceptions import UndefinedError
|
from jinja2.exceptions import UndefinedError
|
||||||
|
|
||||||
from ansible.errors import AnsibleParserError
|
from ansible.errors import AnsibleParserError, AnsibleUndefinedVariable
|
||||||
from ansible.parsing.dataloader import DataLoader
|
from ansible.parsing.dataloader import DataLoader
|
||||||
from ansible.playbook.attribute import Attribute, FieldAttribute
|
from ansible.playbook.attribute import Attribute, FieldAttribute
|
||||||
from ansible.utils.boolean import boolean
|
from ansible.utils.boolean import boolean
|
||||||
|
@ -406,7 +406,7 @@ class Base:
|
||||||
except (TypeError, ValueError) as e:
|
except (TypeError, ValueError) as e:
|
||||||
raise AnsibleParserError("the field '%s' has an invalid value (%s), and could not be converted to an %s."
|
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())
|
" 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':
|
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."
|
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())
|
" The error was: %s" % (name,e), obj=self.get_ds())
|
||||||
|
|
|
@ -68,7 +68,7 @@ class AnsibleJSONEncoder(json.JSONEncoder):
|
||||||
if isinstance(o, HostVars):
|
if isinstance(o, HostVars):
|
||||||
return dict(o)
|
return dict(o)
|
||||||
else:
|
else:
|
||||||
return o
|
return json.JSONEncoder.default(o)
|
||||||
|
|
||||||
def to_yaml(a, *args, **kw):
|
def to_yaml(a, *args, **kw):
|
||||||
'''Make verbose, human readable yaml'''
|
'''Make verbose, human readable yaml'''
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue