07843117f25b41d14b348e0eb994fd2ae3df5de2
4 from os
import access
, R_OK
9 from ruamel
.yaml
import YAML
13 default_types
= pkg_resources
.resource_filename('salty_linter', 'data/salty_linter.yaml')
15 pp
= pprint
.PrettyPrinter(indent
=4)
17 # - option to pick an alternate type database, say for a specific version of salt (defaults to salty-linter.yaml)
18 argparser
= argparse
.ArgumentParser(description
="salty-linter. Let's lint some salt, mateys",
19 epilog
='Now let\'s get some salt states in ship shop shape !')
20 argparser
.add_argument('--verbose', dest
='verbose', action
='store_true', help="Let's be super chatty and generate a lot of output.")
21 argparser
.add_argument('--no-werror', dest
='werror', action
='store_false', help="Don't treat warnings as errors")
22 argparser
.add_argument('sls', nargs
='+', help="list of salt state files")
23 argparser
.set_defaults(verbose
=False, werror
=True)
24 args
= argparser
.parse_args()
27 print("HELLO EVERYONE I'M SALTY-LINTER AND I'M VERBOSE.")
30 for an_sls_filename
in args
.sls
:
31 print('PROCESSING: ' + an_sls_filename
)
33 # Check if the file exists and is readable
34 fullpath_sls_filename
= os
.path
.abspath(an_sls_filename
)
35 if not os
.path
.isfile(fullpath_sls_filename
):
36 print("error: {} is not a file".format(an_sls_filename
))
39 elif not access(fullpath_sls_filename
, R_OK
):
40 print("error: {} is not readable".format(an_sls_filename
))
44 with
open(fullpath_sls_filename
) as fp
:
45 yaml
= YAML(typ
='jinja2')
46 sls_yaml
= yaml
.load(fp
)
47 (lint_errors
, lint_warnings
) = salty_linter
.lint(sls_yaml
)
48 if lint_errors
or (lint_warnings
and args
.werror
):
50 for (line_number
, an_error
) in lint_errors
:
51 print("Error: " + an_sls_filename
+ ": " + str(line_number
) + ": " + an_error
)
52 for (line_number
, a_warning
) in lint_warnings
:
53 print("Warning: " + an_sls_filename
+ ": " + str(line_number
) + ": " + a_warning
)
56 print("NO OBVIOUS FAILURES.")