Ingy döt Net 2 weeks ago committed by GitHub
commit 60738d28fb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -41,10 +41,34 @@ def _handle_error(json_exc, yaml_exc, file_name, show_content):
raise AnsibleParserError(n_err_msg, obj=err_obj, show_content=show_content, orig_exc=yaml_exc)
# Mapping may be jinja scalar: {{ foo... }}
def _construct_scalar(loader, node):
# It would have 1 pair:
if len(node.value) == 1:
map_as_key_key = node.value[0][0]
map_as_key_val = node.value[0][1]
# And have key that is a mapping, and a value that is null:
if map_as_key_key.tag == 'tag:yaml.org,2002:map' and \
map_as_key_val.tag == 'tag:yaml.org,2002:null':
# Get the intended jinja string value:
jinja_string = map_as_key_key.value[0][0]
# If jinja string was not quoted:
if jinja_string.tag == 'tag:yaml.org,2002:str' and \
jinja_string.style == '':
# Add jinja double braces back in:
return "{{%s}}" % jinja_string.value
# Else process mapping as usual:
return loader.construct_mapping(node)
def _safe_load(stream, file_name=None, vault_secrets=None):
''' Implements yaml.safe_load(), except using our custom loader class. '''
loader = AnsibleLoader(stream, file_name, vault_secrets)
loader.add_constructor('tag:yaml.org,2002:map', _construct_scalar)
try:
return loader.get_single_data()
finally:

Loading…
Cancel
Save