mirror of
https://github.com/thegeeklab/ansible-later.git
synced 2024-11-22 12:50:42 +00:00
81 lines
3.1 KiB
Python
Executable File
81 lines
3.1 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
import logging
|
|
import optparse
|
|
import os
|
|
import sys
|
|
from appdirs import AppDirs
|
|
from pkg_resources import resource_filename
|
|
from ansiblelater import classify
|
|
from ansiblelater.utils import info, warn, read_config, get_property
|
|
|
|
|
|
def main():
|
|
config_dir = AppDirs("ansible-later").user_config_dir
|
|
default_config_file = os.path.join(config_dir, "config.ini")
|
|
|
|
parser = optparse.OptionParser("%prog playbook_file|role_file|inventory_file",
|
|
version="%prog " + get_property("__version__"))
|
|
parser.add_option('-c', dest='configfile', default=default_config_file,
|
|
help="Location of configuration file: [%s]" % default_config_file)
|
|
parser.add_option('-d', dest='rulesdir',
|
|
help="Location of standards rules")
|
|
parser.add_option('-q', dest='log_level', action="store_const", default=logging.WARN,
|
|
const=logging.ERROR, help="Only output errors")
|
|
parser.add_option('-s', dest='standards_filter', action='append',
|
|
help="limit standards to specific names")
|
|
parser.add_option('-v', dest='log_level', action="store_const", default=logging.WARN,
|
|
const=logging.INFO, help="Show more verbose output")
|
|
|
|
options, args = parser.parse_args(sys.argv[1:])
|
|
settings = read_config(options.configfile)
|
|
|
|
# Merge CLI options with config options. CLI options override config options.
|
|
for key, value in options.__dict__.items():
|
|
if value:
|
|
setattr(settings, key, value)
|
|
|
|
if os.path.exists(settings.configfile):
|
|
info("Using configuration file: %s" % settings.configfile, settings)
|
|
else:
|
|
warn("No configuration file found at %s" % settings.configfile, settings, file=sys.stderr)
|
|
if not settings.rulesdir:
|
|
rules_dir = os.path.join(resource_filename('ansiblelater', 'examples'))
|
|
warn("Using example standards found at %s" % rules_dir, settings, file=sys.stderr)
|
|
settings.rulesdir = rules_dir
|
|
|
|
if len(args) == 0:
|
|
candidates = []
|
|
for root, dirs, files in os.walk("."):
|
|
for filename in files:
|
|
candidates.append(os.path.join(root, filename))
|
|
else:
|
|
candidates = args
|
|
|
|
errors = 0
|
|
for filename in candidates:
|
|
if ':' in filename:
|
|
(filename, lines) = filename.split(":")
|
|
else:
|
|
lines = None
|
|
candidate = classify(filename)
|
|
if candidate:
|
|
if candidate.binary:
|
|
info("Not reviewing binary file %s" % filename, settings)
|
|
continue
|
|
if candidate.vault:
|
|
info("Not reviewing vault file %s" % filename, settings)
|
|
continue
|
|
if lines:
|
|
info("Reviewing %s lines %s" % (candidate, lines), settings)
|
|
else:
|
|
info("Reviewing all of %s" % candidate, settings)
|
|
errors = errors + candidate.review(settings, lines)
|
|
else:
|
|
info("Couldn't classify file %s" % filename, settings)
|
|
return errors
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|