mirror of
https://github.com/thegeeklab/ansible-later.git
synced 2024-11-22 12:50:42 +00:00
basic setup for new settings object
This commit is contained in:
parent
4b011891bf
commit
f92c77f5b8
@ -14,11 +14,13 @@ import re
|
|||||||
from distutils.version import LooseVersion
|
from distutils.version import LooseVersion
|
||||||
|
|
||||||
import ansible
|
import ansible
|
||||||
|
from appdirs import AppDirs
|
||||||
|
|
||||||
from ansiblelater.utils import (abort, error, get_property, info,
|
from ansiblelater.utils import (abort, error, get_property, info,
|
||||||
is_line_in_ranges, lines_ranges,
|
is_line_in_ranges, lines_ranges,
|
||||||
read_standards, standards_latest, warn)
|
read_standards, standards_latest, warn)
|
||||||
from .settings import Settings
|
|
||||||
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# Ansible 2.4 import of module loader
|
# Ansible 2.4 import of module loader
|
||||||
@ -29,8 +31,13 @@ except ImportError:
|
|||||||
except ImportError:
|
except ImportError:
|
||||||
from ansible.utils import module_finder as module_loader
|
from ansible.utils import module_finder as module_loader
|
||||||
|
|
||||||
|
try:
|
||||||
|
import ConfigParser as configparser
|
||||||
|
except ImportError:
|
||||||
|
import configparser
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
config = Settings()
|
|
||||||
|
|
||||||
|
|
||||||
class Standard(object):
|
class Standard(object):
|
||||||
@ -333,4 +340,3 @@ def find_version(filename, version_regex=r"^# Standards:\s*([\d.]+)"):
|
|||||||
if match:
|
if match:
|
||||||
return match.group(1)
|
return match.group(1)
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -4,33 +4,38 @@ import logging
|
|||||||
import optparse
|
import optparse
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from appdirs import AppDirs
|
from appdirs import AppDirs
|
||||||
from pkg_resources import resource_filename
|
from pkg_resources import resource_filename
|
||||||
from ansiblelater import classify
|
|
||||||
from ansiblelater import config
|
from ansiblelater import classify, settings
|
||||||
from ansiblelater.utils import info, warn, get_property
|
from ansiblelater.utils import get_property, info, warn
|
||||||
|
|
||||||
|
from .settings import Settings
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
config_dir = AppDirs("ansible-later").user_config_dir
|
config_dir = AppDirs("ansible-later").user_config_dir
|
||||||
default_config_file = os.path.join(config_dir, "config.ini")
|
default_config_file = os.path.join(config_dir, "config.yml")
|
||||||
|
|
||||||
parser = optparse.OptionParser("%prog playbook_file|role_file|inventory_file",
|
parser = optparse.OptionParser("%prog playbook_file|role_file|inventory_file",
|
||||||
version="%prog " + get_property("__version__"))
|
version="%prog " + get_property("__version__"))
|
||||||
parser.add_option('-c', dest='configfile', default=default_config_file,
|
parser.add_option('-c', dest='config_file', default=default_config_file,
|
||||||
help="Location of configuration file: [%s]" % default_config_file)
|
help="Location of configuration file: [%s]" % default_config_file)
|
||||||
parser.add_option('-d', dest='rulesdir',
|
parser.add_option('-d', dest='rules_dir',
|
||||||
help="Location of standards rules")
|
help="Location of standards rules")
|
||||||
parser.add_option('-q', dest='log_level', action="store_const", default=logging.WARN,
|
parser.add_option('-q', dest='log_level', action="store_const",
|
||||||
const=logging.ERROR, help="Only output errors")
|
const=logging.ERROR, help="Only output errors")
|
||||||
parser.add_option('-s', dest='standards_filter', action='append',
|
parser.add_option('-s', dest='standards_filter', action='append',
|
||||||
help="limit standards to specific names")
|
help="limit standards to specific names")
|
||||||
parser.add_option('-v', dest='log_level', action="store_const", default=logging.WARN,
|
parser.add_option('-v', '--verbose', dest='log_level', action="count",
|
||||||
const=logging.INFO, help="Show more verbose output")
|
help="Show more verbose output")
|
||||||
|
|
||||||
options, args = parser.parse_args(sys.argv[1:])
|
options, args = parser.parse_args(sys.argv[1:])
|
||||||
|
|
||||||
print(config.rulesdir)
|
settings = Settings(options)
|
||||||
|
|
||||||
|
# print(settings.rulesdir)
|
||||||
# settings = read_config(options.configfile)
|
# settings = read_config(options.configfile)
|
||||||
|
|
||||||
# # Merge CLI options with config options. CLI options override config options.
|
# # Merge CLI options with config options. CLI options override config options.
|
||||||
|
@ -1,3 +1,12 @@
|
|||||||
|
import json
|
||||||
|
import logging
|
||||||
|
import os
|
||||||
|
|
||||||
|
import anyconfig
|
||||||
|
from pkg_resources import resource_filename
|
||||||
|
|
||||||
|
from ansiblelater import utils
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import ConfigParser as configparser
|
import ConfigParser as configparser
|
||||||
except ImportError:
|
except ImportError:
|
||||||
@ -5,16 +14,43 @@ except ImportError:
|
|||||||
|
|
||||||
|
|
||||||
class Settings(object):
|
class Settings(object):
|
||||||
def __init__(self, config=configparser.ConfigParser(), config_file="asas"):
|
def __init__(self, args={}):
|
||||||
self.rulesdir = "ahjhsjahsjas"
|
self.args = self._get_args(args)
|
||||||
self.custom_modules = []
|
self.config = self._get_config()
|
||||||
self.log_level = None
|
|
||||||
self.standards_filter = None
|
|
||||||
|
|
||||||
if config.has_section('rules'):
|
def _get_args(self, args):
|
||||||
self.rulesdir = config.get('rules', 'standards')
|
# Override correct log level from argparse
|
||||||
if config.has_section('ansible'):
|
levels = [logging.WARNING, logging.INFO, logging.DEBUG]
|
||||||
modules = config.get('ansible', 'custom_modules')
|
if args.log_level:
|
||||||
self.custom_modules = [x.strip() for x in modules.split(',')]
|
args.log_level = levels[min(len(levels) - 1, args.log_level - 1)]
|
||||||
|
|
||||||
self.configfile = config_file
|
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': [],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
from __future__ import print_function
|
from __future__ import print_function
|
||||||
|
|
||||||
|
import contextlib
|
||||||
import importlib
|
import importlib
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
@ -7,6 +8,7 @@ import sys
|
|||||||
import re
|
import re
|
||||||
import colorama
|
import colorama
|
||||||
|
|
||||||
|
import yaml
|
||||||
from distutils.version import LooseVersion
|
from distutils.version import LooseVersion
|
||||||
from ansible.module_utils.parsing.convert_bool import boolean as to_bool
|
from ansible.module_utils.parsing.convert_bool import boolean as to_bool
|
||||||
|
|
||||||
@ -112,3 +114,26 @@ def read_config(config_file):
|
|||||||
|
|
||||||
return Settings(config, config_file)
|
return Settings(config, config_file)
|
||||||
|
|
||||||
|
|
||||||
|
def safe_load(string):
|
||||||
|
"""
|
||||||
|
Parse the provided string returns a dict.
|
||||||
|
:param string: A string to be parsed.
|
||||||
|
:return: dict
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
return yaml.safe_load(string) or {}
|
||||||
|
except yaml.scanner.ScannerError as e:
|
||||||
|
print(str(e))
|
||||||
|
|
||||||
|
|
||||||
|
@contextlib.contextmanager
|
||||||
|
def open_file(filename, mode='r'):
|
||||||
|
"""
|
||||||
|
Open the provide file safely and returns a file type.
|
||||||
|
:param filename: A string containing an absolute path to the file to open.
|
||||||
|
:param mode: A string describing the way in which the file will be used.
|
||||||
|
:return: file type
|
||||||
|
"""
|
||||||
|
with open(filename, mode) as stream:
|
||||||
|
yield stream
|
||||||
|
Loading…
Reference in New Issue
Block a user