2019-03-28 01:20:43 +01:00
|
|
|
import json
|
|
|
|
import logging
|
|
|
|
import os
|
|
|
|
|
|
|
|
import anyconfig
|
|
|
|
from pkg_resources import resource_filename
|
|
|
|
|
|
|
|
from ansiblelater import utils
|
|
|
|
|
2019-03-27 17:00:38 +01:00
|
|
|
try:
|
|
|
|
import ConfigParser as configparser
|
|
|
|
except ImportError:
|
|
|
|
import configparser
|
|
|
|
|
|
|
|
|
|
|
|
class Settings(object):
|
2019-03-28 01:20:43 +01:00
|
|
|
def __init__(self, args={}):
|
|
|
|
self.args = self._get_args(args)
|
|
|
|
self.config = self._get_config()
|
|
|
|
|
|
|
|
def _get_args(self, args):
|
|
|
|
# Override correct log level from argparse
|
|
|
|
levels = [logging.WARNING, logging.INFO, logging.DEBUG]
|
|
|
|
if args.log_level:
|
|
|
|
args.log_level = levels[min(len(levels) - 1, args.log_level - 1)]
|
|
|
|
|
|
|
|
args_dict = dict(filter(lambda item: item[1] is not None, args.__dict__.items()))
|
|
|
|
return args_dict
|
|
|
|
|
|
|
|
def _get_config(self):
|
|
|
|
defaults = self._get_defaults()
|
|
|
|
config_file = self.args.get('config_file')
|
|
|
|
|
|
|
|
if config_file and os.path.exists(config_file):
|
|
|
|
with utils.open_file(config_file) as stream:
|
|
|
|
s = stream.read()
|
|
|
|
anyconfig.merge(defaults, utils.safe_load(s), ac_merge=anyconfig.MS_DICTS)
|
|
|
|
|
|
|
|
print(json.dumps(defaults, indent=4, sort_keys=True))
|
|
|
|
return defaults
|
|
|
|
|
|
|
|
def _get_defaults(self):
|
|
|
|
rules_dir = os.path.join(resource_filename('ansiblelater', 'examples'))
|
|
|
|
|
|
|
|
return {
|
|
|
|
'rules': {
|
|
|
|
'standards': self.args.get('rules_dir', rules_dir),
|
|
|
|
'standards_filter': [],
|
|
|
|
},
|
|
|
|
'logging': {
|
|
|
|
'level': self.args.get('log_level', logging.WARN),
|
|
|
|
},
|
|
|
|
'ansible': {
|
|
|
|
'custom_modules': [],
|
|
|
|
}
|
|
|
|
}
|