Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature Request: allow users to build their own set of rules #52

Merged
merged 4 commits into from
Oct 13, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 26 additions & 18 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -40,24 +40,32 @@ The following is the output from ``salt-lint --help``, providing an overview of

.. code-block:: bash

Usage: salt-lint [options] init.sls [state ...]

Options:
--version show program's version number and exit
-h, --help show this help message and exit
-L list all the rules
-t TAGS only check rules whose id/tags match these values
-T list all the tags
-v Increase verbosity level
-x SKIP_LIST only check rules whose id/tags do not match these
values
--nocolor disable colored output
--force-color Try force colored output (relying on salt's code)
--exclude=EXCLUDE_PATHS
path to directories or files to skip. This option is
repeatable.
-c C Specify configuration file to use. Defaults to
".salt-lint"
Usage: salt-lint [options] init.sls [state ...]

Options:
--version show program's version number and exit
-h, --help show this help message and exit
-L list all the rules
-r RULESDIR specify one or more rules directories using one or
more -r arguments. Any -r flags override the default
rules in /tmp/saltlint/lib/saltlint/rules, unless -R
is also used.
-R Use default rules in /tmp/saltlint/lib/saltlint/rules
in addition to any extra rules directories specified
with -r. There is no need to specify this if no -r
flags are used.
-t TAGS only check rules whose id/tags match these values
-T list all the tags
-v Increase verbosity level
-x SKIP_LIST only check rules whose id/tags do not match these
values
--nocolor disable colored output
--force-color Try force colored output (relying on salt's code)
--exclude=EXCLUDE_PATHS
path to directories or files to skip. This option is
repeatable.
-c C Specify configuration file to use. Defaults to
".salt-lint"

Linting Salt state files
------------------------
Expand Down
26 changes: 23 additions & 3 deletions lib/saltlint/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,19 @@ def main():

parser.add_option('-L', dest='listrules', default=False,
action='store_true', help="list all the rules")

parser.add_option('-r', action='append', dest='rulesdir',
default=[], type='str',
help="specify one or more rules directories using "
"one or more -r arguments. Any -r flags override "
"the default rules in %s, unless -R is also used."
% saltlint.default_rulesdir)
parser.add_option('-R', action='store_true',
default=False,
dest='use_default_rules',
help="Use default rules in %s in addition to any extra "
"rules directories specified with -r. There is "
"no need to specify this if no -r flags are used."
% saltlint.default_rulesdir)
parser.add_option('-t', dest='tags',
action='append',
default=[],
Expand Down Expand Up @@ -86,12 +98,20 @@ def main():
if 'tags' in config:
options.tags = options.tags + config['tags']

if 'use_default_rules' in config:
options.use_default_rules = options.use_default_rules or config['use_default_rules']

if 'rulesdir' in config:
options.rulesdir = options.rulesdir + config['rulesdir']

if len(args) == 0 and not (options.listrules or options.listtags):
parser.print_help(file=sys.stderr)
return 1

# TODO add custom rule dirs
rulesdirs = [saltlint.default_rulesdir]
if options.use_default_rules:
rulesdirs = options.rulesdir + [saltlint.default_rulesdir]
else:
rulesdirs = options.rulesdir or [saltlint.default_rulesdir]

rules = RulesCollection()
for rulesdir in rulesdirs:
Expand Down