Merge branch 'feature/default_parameters' of https://github.com/asteven/cdist

This commit is contained in:
Nico Schottelius 2013-09-05 13:44:32 +02:00
commit d0dfe8f834
10 changed files with 64 additions and 3 deletions

View file

@ -62,6 +62,7 @@ class CdistType(object):
self.__optional_parameters = None
self.__optional_multiple_parameters = None
self.__boolean_parameters = None
self.__parameter_defaults = None
@classmethod
def list_types(cls, base_path):
@ -190,3 +191,19 @@ class CdistType(object):
finally:
self.__boolean_parameters = 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

View file

@ -96,10 +96,12 @@ class Emulator(object):
parser.add_argument(argument, dest=parameter, action='append', required=True)
for parameter in self.cdist_type.optional_parameters:
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:
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:
argument = "--" + parameter
parser.add_argument(argument, dest=parameter, action='store_const', const='')

View file

@ -146,3 +146,10 @@ class TypeTestCase(test.CdistTestCase):
cdist_type = core.CdistType(base_path, '__without_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')

View file

@ -0,0 +1,2 @@
optional1
optional2

View file

@ -219,6 +219,21 @@ class ArgumentsTestCase(test.CdistTestCase):
self.assertFalse('optional2' in cdist_object.parameters)
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):

View file

@ -0,0 +1,2 @@
optional1
optional2