c06aa1fa11b26527c75194e42f91ac57038466ec
4 from os
import access
, R_OK
10 from ruamel
.yaml
import YAML
14 default_types
= pkg_resources
.resource_filename('salty_linter', 'data/salty_linter.yaml')
16 pp
= pprint
.PrettyPrinter(indent
=4)
18 # - option to pick an alternate type database, say for a specific version of salt (defaults to salty-linter.yaml)
19 argparser
= argparse
.ArgumentParser(description
="salty-linter. Let's lint some salt, mateys",
20 epilog
='Now let\'s get some salt states in ship shop shape !')
21 argparser
.add_argument('--verbose', dest
='verbose', action
='store_true', help="Let's be super chatty and generate a lot of output.")
22 argparser
.add_argument('--no-werror', dest
='werror', action
='store_false', help="Don't treat warnings as errors")
23 argparser
.add_argument('--typedb', nargs
='?', default
=default_types
, type=argparse
.FileType('r'), help="alternative type database.")
24 argparser
.add_argument('sls', nargs
='+', help="list of salt state files")
25 argparser
.set_defaults(verbose
=False, werror
=True)
26 args
= argparser
.parse_args()
31 print("HI I'M SALTY_LINTER. LETS GET CHATTY.")
33 # Open the type database file and read in the type database
34 # Error out of that file doesn't parse / doesn't exist / is unreadab
35 typedb
= yaml
.load(args
.typedb
)
38 print("HERE'S YOUR TYPE DATABSE. WALLOW IN IT.")
40 print("WRAP UP YOUR TYPE DATABASE WALLOWING.")
43 for an_sls_filename
in args
.sls
:
44 print('PROCESSING: ' + an_sls_filename
)
46 # Check if the file exists and is readable
47 fullpath_sls_filename
= os
.path
.abspath(an_sls_filename
)
48 if not os
.path
.isfile(fullpath_sls_filename
):
49 print("error: {} is not a file".format(an_sls_filename
))
52 elif not access(fullpath_sls_filename
, R_OK
):
53 print("error: {} is not readable".format(an_sls_filename
))
57 with
open(fullpath_sls_filename
) as fp
:
59 sls_yaml
= yaml
.load(fp
)
60 (lint_errors
, lint_warnings
) = salty_linter
.lint(sls_yaml
, typedb
)
61 if lint_errors
or (lint_warnings
and args
.werror
):
63 for (line_number
, an_error
) in lint_errors
:
64 print("Error: " + an_sls_filename
+ ": " + str(line_number
) + ": " + an_error
)
65 for (line_number
, a_warning
) in lint_warnings
:
66 print("Warning: " + an_sls_filename
+ ": " + str(line_number
) + ": " + a_warning
)
69 print("NO OBVIOUS FAILURES.")
71 print("MORE SHIP-SHOPPING FOR YOU !")