Merge branch 'feature/default_parameters' of https://github.com/asteven/cdist
This commit is contained in:
commit
d0dfe8f834
10 changed files with 64 additions and 3 deletions
|
@ -62,6 +62,7 @@ class CdistType(object):
|
||||||
self.__optional_parameters = None
|
self.__optional_parameters = None
|
||||||
self.__optional_multiple_parameters = None
|
self.__optional_multiple_parameters = None
|
||||||
self.__boolean_parameters = None
|
self.__boolean_parameters = None
|
||||||
|
self.__parameter_defaults = None
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def list_types(cls, base_path):
|
def list_types(cls, base_path):
|
||||||
|
@ -190,3 +191,19 @@ class CdistType(object):
|
||||||
finally:
|
finally:
|
||||||
self.__boolean_parameters = parameters
|
self.__boolean_parameters = parameters
|
||||||
return self.__boolean_parameters
|
return self.__boolean_parameters
|
||||||
|
|
||||||
|
@property
|
||||||
|
def parameter_defaults(self):
|
||||||
|
if not self.__parameter_defaults:
|
||||||
|
defaults = {}
|
||||||
|
try:
|
||||||
|
defaults_dir = os.path.join(self.absolute_path, "parameter", "default")
|
||||||
|
for name in os.listdir(defaults_dir):
|
||||||
|
with open(os.path.join(defaults_dir, name)) as fd:
|
||||||
|
defaults[name] = fd.read().strip()
|
||||||
|
except EnvironmentError:
|
||||||
|
# error ignored
|
||||||
|
pass
|
||||||
|
finally:
|
||||||
|
self.__parameter_defaults = defaults
|
||||||
|
return self.__parameter_defaults
|
||||||
|
|
|
@ -96,10 +96,12 @@ class Emulator(object):
|
||||||
parser.add_argument(argument, dest=parameter, action='append', required=True)
|
parser.add_argument(argument, dest=parameter, action='append', required=True)
|
||||||
for parameter in self.cdist_type.optional_parameters:
|
for parameter in self.cdist_type.optional_parameters:
|
||||||
argument = "--" + parameter
|
argument = "--" + parameter
|
||||||
parser.add_argument(argument, dest=parameter, action='store', required=False)
|
parser.add_argument(argument, dest=parameter, action='store', required=False,
|
||||||
|
default=self.cdist_type.parameter_defaults.get(parameter, None))
|
||||||
for parameter in self.cdist_type.optional_multiple_parameters:
|
for parameter in self.cdist_type.optional_multiple_parameters:
|
||||||
argument = "--" + parameter
|
argument = "--" + parameter
|
||||||
parser.add_argument(argument, dest=parameter, action='append', required=False)
|
parser.add_argument(argument, dest=parameter, action='append', required=False,
|
||||||
|
default=self.cdist_type.parameter_defaults.get(parameter, None))
|
||||||
for parameter in self.cdist_type.boolean_parameters:
|
for parameter in self.cdist_type.boolean_parameters:
|
||||||
argument = "--" + parameter
|
argument = "--" + parameter
|
||||||
parser.add_argument(argument, dest=parameter, action='store_const', const='')
|
parser.add_argument(argument, dest=parameter, action='store_const', const='')
|
||||||
|
|
|
@ -146,3 +146,10 @@ class TypeTestCase(test.CdistTestCase):
|
||||||
cdist_type = core.CdistType(base_path, '__without_boolean_parameters')
|
cdist_type = core.CdistType(base_path, '__without_boolean_parameters')
|
||||||
self.assertEqual(cdist_type.boolean_parameters, [])
|
self.assertEqual(cdist_type.boolean_parameters, [])
|
||||||
|
|
||||||
|
def test_with_parameter_defaults(self):
|
||||||
|
base_path = fixtures
|
||||||
|
cdist_type = core.CdistType(base_path, '__with_parameter_defaults')
|
||||||
|
self.assertTrue('optional1' in cdist_type.parameter_defaults)
|
||||||
|
self.assertFalse('optional2' in cdist_type.parameter_defaults)
|
||||||
|
self.assertEqual(cdist_type.parameter_defaults['optional1'], 'value1')
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
value1
|
|
@ -0,0 +1,2 @@
|
||||||
|
optional1
|
||||||
|
optional2
|
|
@ -219,6 +219,21 @@ class ArgumentsTestCase(test.CdistTestCase):
|
||||||
self.assertFalse('optional2' in cdist_object.parameters)
|
self.assertFalse('optional2' in cdist_object.parameters)
|
||||||
self.assertEqual(cdist_object.parameters['optional1'], value)
|
self.assertEqual(cdist_object.parameters['optional1'], value)
|
||||||
|
|
||||||
|
def test_argument_defaults(self):
|
||||||
|
type_name = '__argument_defaults'
|
||||||
|
object_id = 'some-id'
|
||||||
|
value = 'value1'
|
||||||
|
argv = [type_name, object_id]
|
||||||
|
os.environ.update(self.env)
|
||||||
|
emu = emulator.Emulator(argv)
|
||||||
|
emu.run()
|
||||||
|
|
||||||
|
cdist_type = core.CdistType(self.local.type_path, type_name)
|
||||||
|
cdist_object = core.CdistObject(cdist_type, self.local.object_path, object_id)
|
||||||
|
self.assertTrue('optional1' in cdist_object.parameters)
|
||||||
|
self.assertFalse('optional2' in cdist_object.parameters)
|
||||||
|
self.assertEqual(cdist_object.parameters['optional1'], value)
|
||||||
|
|
||||||
|
|
||||||
class StdinTestCase(test.CdistTestCase):
|
class StdinTestCase(test.CdistTestCase):
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
value1
|
|
@ -0,0 +1,2 @@
|
||||||
|
optional1
|
||||||
|
optional2
|
|
@ -116,6 +116,11 @@ confdir/type/<name>/parameter/required::
|
||||||
confdir/type/<name>/parameter/optional::
|
confdir/type/<name>/parameter/optional::
|
||||||
Parameters optionally accepted by type, \n seperated list.
|
Parameters optionally accepted by type, \n seperated list.
|
||||||
|
|
||||||
|
confdir/type/<name>/parameter/default/*::
|
||||||
|
Default values for optional parameters.
|
||||||
|
Assuming an optional parameter name of 'foo', it's default value would
|
||||||
|
be read from the file confdir/type/<name>/parameter/default/foo.
|
||||||
|
|
||||||
confdir/type/<name>/parameter/boolean::
|
confdir/type/<name>/parameter/boolean::
|
||||||
Boolean parameters accepted by type, \n seperated list.
|
Boolean parameters accepted by type, \n seperated list.
|
||||||
|
|
||||||
|
|
|
@ -82,10 +82,16 @@ follow the standard unix behaviour "the last given wins".
|
||||||
If either is missing, the type will have no required, no optional, no boolean
|
If either is missing, the type will have no required, no optional, no boolean
|
||||||
or no parameters at all.
|
or no parameters at all.
|
||||||
|
|
||||||
|
Default values for optional parameters can be predefined in
|
||||||
|
***parameter/default/<name>***.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
echo servername >> cdist/conf/type/__nginx_vhost/parameter/required
|
echo servername >> cdist/conf/type/__nginx_vhost/parameter/required
|
||||||
echo logdirectory >> cdist/conf/type/__nginx_vhost/parameter/optional
|
echo logdirectory >> cdist/conf/type/__nginx_vhost/parameter/optional
|
||||||
|
echo loglevel >> cdist/conf/type/__nginx_vhost/parameter/optional
|
||||||
|
mkdir cdist/conf/type/__nginx_vhost/parameter/default
|
||||||
|
echo warning > cdist/conf/type/__nginx_vhost/parameter/default/loglevel
|
||||||
echo server_alias >> cdist/conf/type/__nginx_vhost/parameter/optional_multiple
|
echo server_alias >> cdist/conf/type/__nginx_vhost/parameter/optional_multiple
|
||||||
echo use_ssl >> cdist/conf/type/__nginx_vhost/parameter/boolean
|
echo use_ssl >> cdist/conf/type/__nginx_vhost/parameter/boolean
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
@ -108,6 +114,9 @@ if [ -f "$__object/parameter/logdirectory" ]; then
|
||||||
logdirectory="$(cat "$__object/parameter/logdirectory")"
|
logdirectory="$(cat "$__object/parameter/logdirectory")"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# optional parameter with predefined default
|
||||||
|
loglevel="$(cat "$__object/parameter/loglevel")"
|
||||||
|
|
||||||
# boolean parameter
|
# boolean parameter
|
||||||
if [ -f "$__object/parameter/use_ssl" ]; then
|
if [ -f "$__object/parameter/use_ssl" ]; then
|
||||||
# file exists -> True
|
# file exists -> True
|
||||||
|
|
Loading…
Reference in a new issue