Allow any file that can be in YAML to also be in JSON. This is primarily done to support non-visual editors better.

This commit is contained in:
Michael DeHaan 2014-03-06 21:42:01 -05:00
parent a0f939581d
commit 79799f6819
2 changed files with 12 additions and 1 deletions

View file

@ -7,6 +7,7 @@ Major features/changes:
* The deprecated legacy variable templating system has been finally removed. Use {{ foo }} always not $foo or ${foo}. * The deprecated legacy variable templating system has been finally removed. Use {{ foo }} always not $foo or ${foo}.
* Role dependencies are now tracked across multiple plays, making common roles easier to include in dependencies without any special variable tricks. * Role dependencies are now tracked across multiple plays, making common roles easier to include in dependencies without any special variable tricks.
* Any data file can also be JSON. Use sparingly -- with great power comes great responsibility. Starting file with "{" or "[" denotes JSON.
New Modules: New Modules:

View file

@ -42,6 +42,7 @@ import traceback
import getpass import getpass
import sys import sys
import textwrap import textwrap
import json
#import vault #import vault
from vault import VaultLib from vault import VaultLib
@ -351,7 +352,16 @@ def smush_ds(data):
return data return data
def parse_yaml(data): def parse_yaml(data):
''' convert a yaml string to a data structure ''' ''' convert a yaml string to a data structure. Also supports JSON, ssssssh!!!'''
data = data.lstrip()
if data.startswith("{") or data.startswith("["):
# since the line starts with { or [ we can infer this is a JSON document.
loaded = json.loads(data)
else:
# else this is pretty sure to be a YAML document
loaded = yaml.safe_load(data)
return smush_ds(yaml.safe_load(data)) return smush_ds(yaml.safe_load(data))
def process_common_errors(msg, probline, column): def process_common_errors(msg, probline, column):