restore initial json parsing attempt to loader
fixes issues with extra vars json strings not being parsed correctly by the yaml parser
This commit is contained in:
parent
7160b40ab1
commit
ea5e089056
1 changed files with 21 additions and 16 deletions
|
@ -72,24 +72,29 @@ class DataLoader():
|
||||||
Creates a python datastructure from the given data, which can be either
|
Creates a python datastructure from the given data, which can be either
|
||||||
a JSON or YAML string.
|
a JSON or YAML string.
|
||||||
'''
|
'''
|
||||||
|
new_data = None
|
||||||
# YAML parser will take JSON as it is a subset.
|
|
||||||
if isinstance(data, AnsibleUnicode):
|
|
||||||
# The PyYAML's libyaml bindings use PyUnicode_CheckExact so
|
|
||||||
# they are unable to cope with our subclass.
|
|
||||||
# Unwrap and re-wrap the unicode so we can keep track of line
|
|
||||||
# numbers
|
|
||||||
in_data = text_type(data)
|
|
||||||
else:
|
|
||||||
in_data = data
|
|
||||||
try:
|
try:
|
||||||
new_data = self._safe_load(in_data, file_name=file_name)
|
# we first try to load this data as JSON
|
||||||
except YAMLError as yaml_exc:
|
new_data = json.loads(data)
|
||||||
self._handle_error(yaml_exc, file_name, show_content)
|
except:
|
||||||
|
# must not be JSON, let the rest try
|
||||||
|
if isinstance(data, AnsibleUnicode):
|
||||||
|
# The PyYAML's libyaml bindings use PyUnicode_CheckExact so
|
||||||
|
# they are unable to cope with our subclass.
|
||||||
|
# Unwrap and re-wrap the unicode so we can keep track of line
|
||||||
|
# numbers
|
||||||
|
in_data = text_type(data)
|
||||||
|
else:
|
||||||
|
in_data = data
|
||||||
|
try:
|
||||||
|
new_data = self._safe_load(in_data, file_name=file_name)
|
||||||
|
except YAMLError as yaml_exc:
|
||||||
|
self._handle_error(yaml_exc, file_name, show_content)
|
||||||
|
|
||||||
|
if isinstance(data, AnsibleUnicode):
|
||||||
|
new_data = AnsibleUnicode(new_data)
|
||||||
|
new_data.ansible_pos = data.ansible_pos
|
||||||
|
|
||||||
if isinstance(data, AnsibleUnicode):
|
|
||||||
new_data = AnsibleUnicode(new_data)
|
|
||||||
new_data.ansible_pos = data.ansible_pos
|
|
||||||
return new_data
|
return new_data
|
||||||
|
|
||||||
def load_from_file(self, file_name):
|
def load_from_file(self, file_name):
|
||||||
|
|
Loading…
Reference in a new issue