forked from ungleich-public/cdist
Configuration fixes.
This commit is contained in:
parent
28d3466e9d
commit
97f6517715
3 changed files with 41 additions and 6 deletions
|
@ -106,7 +106,7 @@ def get_parsers():
|
||||||
'The levels, in order from the lowest to the highest, are: '
|
'The levels, in order from the lowest to the highest, are: '
|
||||||
'ERROR (-1), WARNING (0), INFO (1), VERBOSE (2), DEBUG (3) '
|
'ERROR (-1), WARNING (0), INFO (1), VERBOSE (2), DEBUG (3) '
|
||||||
'TRACE (4 or higher).'),
|
'TRACE (4 or higher).'),
|
||||||
action='count', default=0)
|
action='count', default=None)
|
||||||
|
|
||||||
parser['beta'] = argparse.ArgumentParser(add_help=False)
|
parser['beta'] = argparse.ArgumentParser(add_help=False)
|
||||||
parser['beta'].add_argument(
|
parser['beta'].add_argument(
|
||||||
|
@ -417,8 +417,11 @@ def handle_loglevel(args):
|
||||||
def parse_and_configure(argv, singleton=True):
|
def parse_and_configure(argv, singleton=True):
|
||||||
parser = get_parsers()
|
parser = get_parsers()
|
||||||
parser_args = parser['main'].parse_args(argv)
|
parser_args = parser['main'].parse_args(argv)
|
||||||
|
try:
|
||||||
cfg = cdist.configuration.Configuration(parser_args, singleton=singleton)
|
cfg = cdist.configuration.Configuration(parser_args, singleton=singleton)
|
||||||
args = cfg.get_args()
|
args = cfg.get_args()
|
||||||
|
except ValueError as e:
|
||||||
|
raise cdist.Error(str(e))
|
||||||
# Loglevels are handled globally in here
|
# Loglevels are handled globally in here
|
||||||
handle_loglevel(args)
|
handle_loglevel(args)
|
||||||
|
|
||||||
|
|
|
@ -285,6 +285,11 @@ class Configuration(metaclass=Singleton):
|
||||||
ADJUST_ARG_OPTION_MAPPING = {
|
ADJUST_ARG_OPTION_MAPPING = {
|
||||||
_ARG_OPTION_MAPPING[key]: key for key in _ARG_OPTION_MAPPING
|
_ARG_OPTION_MAPPING[key]: key for key in _ARG_OPTION_MAPPING
|
||||||
}
|
}
|
||||||
|
REQUIRED_DEFAULT_CONFIG_VALUES = {
|
||||||
|
'GLOBAL': {
|
||||||
|
'verbosity': 0,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
def _convert_args(self, args):
|
def _convert_args(self, args):
|
||||||
if args:
|
if args:
|
||||||
|
@ -372,6 +377,7 @@ class Configuration(metaclass=Singleton):
|
||||||
for option in self.ARG_OPTION_MAPPING:
|
for option in self.ARG_OPTION_MAPPING:
|
||||||
if option in args:
|
if option in args:
|
||||||
dst_opt = self.ARG_OPTION_MAPPING[option]
|
dst_opt = self.ARG_OPTION_MAPPING[option]
|
||||||
|
if args[option]:
|
||||||
d[dst_opt] = args[option]
|
d[dst_opt] = args[option]
|
||||||
return d
|
return d
|
||||||
|
|
||||||
|
@ -394,6 +400,15 @@ class Configuration(metaclass=Singleton):
|
||||||
config[section][option] = option_object.update_value(
|
config[section][option] = option_object.update_value(
|
||||||
currval, newval, update_appends)
|
currval, newval, update_appends)
|
||||||
|
|
||||||
|
def _update_defaults_for_unset(self, config):
|
||||||
|
defaults = self.REQUIRED_DEFAULT_CONFIG_VALUES
|
||||||
|
|
||||||
|
for section in defaults:
|
||||||
|
section_values = defaults[section]
|
||||||
|
for option in section_values:
|
||||||
|
if option not in config[section]:
|
||||||
|
config[section][option] = section_values[option]
|
||||||
|
|
||||||
def _get_config(self):
|
def _get_config(self):
|
||||||
# global config file
|
# global config file
|
||||||
# local config file
|
# local config file
|
||||||
|
@ -421,4 +436,5 @@ class Configuration(metaclass=Singleton):
|
||||||
for section in config:
|
for section in config:
|
||||||
self._update_config_dict_section(section, config, newconfig,
|
self._update_config_dict_section(section, config, newconfig,
|
||||||
update_appends=True)
|
update_appends=True)
|
||||||
|
self._update_defaults_for_unset(config)
|
||||||
return config
|
return config
|
||||||
|
|
|
@ -286,7 +286,6 @@ class ConfigurationTestCase(test.CdistTestCase):
|
||||||
args.tag = 'test'
|
args.tag = 'test'
|
||||||
|
|
||||||
expected = {
|
expected = {
|
||||||
'beta': False,
|
|
||||||
'conf_dir': ['/usr/local/cdist1', ],
|
'conf_dir': ['/usr/local/cdist1', ],
|
||||||
'verbosity': 3,
|
'verbosity': 3,
|
||||||
}
|
}
|
||||||
|
@ -373,12 +372,13 @@ class ConfigurationTestCase(test.CdistTestCase):
|
||||||
args = argparse.Namespace()
|
args = argparse.Namespace()
|
||||||
expected_config_dict = {
|
expected_config_dict = {
|
||||||
'GLOBAL': {
|
'GLOBAL': {
|
||||||
|
'verbosity': 0,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
# bypass singleton so we can test further
|
# bypass singleton so we can test further
|
||||||
cc.Configuration.instance = None
|
cc.Configuration.instance = None
|
||||||
configuration = cc.Configuration(args, env=env)
|
configuration = cc.Configuration(args, env=env, config_files=('cdist.cfg'))
|
||||||
self.assertIsNotNone(configuration.args)
|
self.assertIsNotNone(configuration.args)
|
||||||
self.assertIsNotNone(configuration.env)
|
self.assertIsNotNone(configuration.env)
|
||||||
self.assertIsNotNone(configuration.config_files)
|
self.assertIsNotNone(configuration.config_files)
|
||||||
|
@ -668,6 +668,20 @@ class ConfigurationTestCase(test.CdistTestCase):
|
||||||
config_files=config_files)
|
config_files=config_files)
|
||||||
self.assertEqual(configuration.config, expected_config_dict)
|
self.assertEqual(configuration.config, expected_config_dict)
|
||||||
|
|
||||||
|
def test_update_defaults_for_unset(self):
|
||||||
|
config = {
|
||||||
|
'GLOBAL': {
|
||||||
|
},
|
||||||
|
}
|
||||||
|
expected_config = {
|
||||||
|
'GLOBAL': {
|
||||||
|
'verbosity': 0,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
cfg = cc.Configuration(None, env={}, config_files=())
|
||||||
|
cfg._update_defaults_for_unset(config)
|
||||||
|
self.assertEqual(config, expected_config)
|
||||||
|
|
||||||
def test_configuration6(self):
|
def test_configuration6(self):
|
||||||
env = {
|
env = {
|
||||||
'PATH': '/usr/local/bin:/usr/bin:/bin',
|
'PATH': '/usr/local/bin:/usr/bin:/bin',
|
||||||
|
@ -725,6 +739,7 @@ class ConfigurationTestCase(test.CdistTestCase):
|
||||||
args.conf_dir = ['/opt/sysadmin/cdist/conf', ]
|
args.conf_dir = ['/opt/sysadmin/cdist/conf', ]
|
||||||
args.manifest = '/opt/sysadmin/cdist/conf/manifest/init'
|
args.manifest = '/opt/sysadmin/cdist/conf/manifest/init'
|
||||||
args.jobs = 10
|
args.jobs = 10
|
||||||
|
args.verbose = None
|
||||||
|
|
||||||
expected_config_dict = {
|
expected_config_dict = {
|
||||||
'GLOBAL': {
|
'GLOBAL': {
|
||||||
|
@ -1092,6 +1107,7 @@ class ConfigurationTestCase(test.CdistTestCase):
|
||||||
'GLOBAL': {
|
'GLOBAL': {
|
||||||
'inventory_dir': None,
|
'inventory_dir': None,
|
||||||
'conf_dir': None,
|
'conf_dir': None,
|
||||||
|
'verbosity': 0,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue