Skip to content

Commit

Permalink
Merge pull request #799 from tbielawa/yamlvalidation
Browse files Browse the repository at this point in the history
Add 'polite' YAML syntax validation and hinting
  • Loading branch information
mpdehaan committed Aug 7, 2012
2 parents 454de79 + 3937707 commit fc330ca
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 1 deletion.
2 changes: 2 additions & 0 deletions lib/ansible/errors.py
Expand Up @@ -30,3 +30,5 @@ class AnsibleFileNotFound(AnsibleError):
class AnsibleConnectionFailed(AnsibleError):
pass

class AnsibleYAMLValidationFailed(AnsibleError):
pass
22 changes: 21 additions & 1 deletion lib/ansible/utils.py
Expand Up @@ -229,9 +229,29 @@ def parse_yaml_from_file(path):

try:
data = file(path).read()
return parse_yaml(data)
except IOError:
raise errors.AnsibleError("file not found: %s" % path)
return parse_yaml(data)
except yaml.YAMLError, exc:
if hasattr(exc, 'problem_mark'):
mark = exc.problem_mark
if mark.line -1 >= 0:
before_probline = data.split("\n")[mark.line-1]
else:
before_probline = ''
probline = data.split("\n")[mark.line]
arrow = " " * mark.column + "^"
msg = """Syntax Error while loading YAML script, %s
Note: The error may actually appear before this position: line %s, column %s
%s
%s
%s""" % (path, mark.line + 1, mark.column + 1, before_probline, probline, arrow)
else:
# No problem markers means we have to throw a generic
# "stuff messed up" type message. Sry bud.
msg = "Could not parse YAML. Check over %s again." % path
raise errors.AnsibleYAMLValidationFailed(msg)

def parse_kv(args):
''' convert a string of key/value items to a dict '''
Expand Down

0 comments on commit fc330ca

Please sign in to comment.