ansible-later/ansiblelater/__main__.py

70 lines
2.3 KiB
Python
Raw Normal View History

2018-12-19 11:19:07 +01:00
#!/usr/bin/env python
2019-04-04 16:06:18 +02:00
"""Main program."""
2018-12-19 11:19:07 +01:00
import argparse
2019-04-16 10:09:14 +02:00
import sys
2019-03-28 01:20:43 +01:00
from ansiblelater import LOG
from ansiblelater import __version__
from ansiblelater import logger
from ansiblelater.command import base
from ansiblelater.command import candidates
2018-12-19 11:19:07 +01:00
def main():
2019-04-04 16:06:18 +02:00
"""Run main program."""
parser = argparse.ArgumentParser(
description="Validate ansible files against best pratice guideline")
2019-04-02 16:34:03 +02:00
parser.add_argument("-c", "--config", dest="config_file",
2019-04-11 10:21:00 +02:00
help="location of configuration file")
2019-04-02 16:34:03 +02:00
parser.add_argument("-r", "--rules", dest="rules.standards",
2019-04-11 10:21:00 +02:00
help="location of standards rules")
2019-04-02 16:34:03 +02:00
parser.add_argument("-s", "--standards", dest="rules.filter", action="append",
2019-04-11 10:21:00 +02:00
help="limit standards to specific ID's")
2019-04-05 14:02:14 +02:00
parser.add_argument("-v", dest="logging.level", action="append_const", const=-1,
2019-04-11 10:21:00 +02:00
help="increase log level")
parser.add_argument("-q", dest="logging.level", action="append_const",
const=1, help="decrease log level")
2019-04-02 16:34:03 +02:00
parser.add_argument("rules.files", nargs="*")
parser.add_argument("--version", action="version", version="%(prog)s {}".format(__version__))
args = parser.parse_args().__dict__
2018-12-19 11:19:07 +01:00
settings = base.get_settings(args)
2019-04-03 17:42:46 +02:00
config = settings.config
2019-04-02 16:34:03 +02:00
2019-04-03 17:42:46 +02:00
logger.update_logger(LOG, config["logging"]["level"], config["logging"]["json"])
files = config["rules"]["files"]
standards = base.get_standards(config["rules"]["standards"])
2019-04-16 09:58:57 +02:00
errors = 0
2019-04-02 16:34:03 +02:00
for filename in files:
lines = None
candidate = candidates.classify(filename, settings, standards)
if candidate:
if candidate.binary:
LOG.info("Not reviewing binary file %s" % filename)
continue
if candidate.vault:
LOG.info("Not reviewing vault file %s" % filename)
continue
if lines:
LOG.info("Reviewing %s lines %s" % (candidate, lines))
else:
LOG.info("Reviewing all of %s" % candidate)
2019-04-16 09:58:57 +02:00
errors = errors + candidate.review(settings, lines)
2019-04-02 16:34:03 +02:00
else:
LOG.info("Couldn't classify file %s" % filename)
2019-04-16 10:09:14 +02:00
if not errors == 0:
return_code = 1
else:
return_code = 0
sys.exit(return_code)
2019-04-15 17:26:02 +02:00
2018-12-19 11:19:07 +01:00
2019-01-08 16:22:19 +01:00
if __name__ == "__main__":
main()