implement multiple parameters based on https://github.com/telmich/cdist/pull/71 by Sébastien Gross
Signed-off-by: Steven Armstrong <steven@icarus.ethz.ch>
This commit is contained in:
		
					parent
					
						
							
								f087057c98
							
						
					
				
			
			
				commit
				
					
						36513997d9
					
				
			
		
					 4 changed files with 64 additions and 7 deletions
				
			
		| 
						 | 
				
			
			@ -74,14 +74,19 @@ DEFINING PARAMETERS
 | 
			
		|||
-------------------
 | 
			
		||||
Every type consists of required, optional and boolean parameters, which must
 | 
			
		||||
be created in a newline seperated file in ***parameter/required***,
 | 
			
		||||
***parameter/optional*** and ***parameter/boolean***. If either is missing,
 | 
			
		||||
the type will have no required, no optional, no boolean or no parameters at
 | 
			
		||||
all.
 | 
			
		||||
***parameter/required_multiple***, ***parameter/optional***, 
 | 
			
		||||
***parameter/optional_multiple*** and ***parameter/boolean***.
 | 
			
		||||
Parameters which are allowed multiple times should be listed in
 | 
			
		||||
required_multiple or optional_multiple respectively. For all other parameters
 | 
			
		||||
the standard unix behaviour of the last given wins is applied.
 | 
			
		||||
If either is missing, the type will have no required, no optional, no boolean
 | 
			
		||||
or no parameters at all. 
 | 
			
		||||
 | 
			
		||||
Example:
 | 
			
		||||
--------------------------------------------------------------------------------
 | 
			
		||||
echo servername >> conf/type/__nginx_vhost/parameter/required
 | 
			
		||||
echo logdirectory >> conf/type/__nginx_vhost/parameter/optional
 | 
			
		||||
echo server_alias >> conf/type/__nginx_vhost/parameter/optional_multiple
 | 
			
		||||
echo use_ssl >> conf/type/__nginx_vhost/parameter/boolean
 | 
			
		||||
--------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -108,6 +113,14 @@ if [ -f "$__object/parameter/use_ssl" ]; then
 | 
			
		|||
   # file exists -> True
 | 
			
		||||
   # do some fancy ssl stuff
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# parameter with multiple values
 | 
			
		||||
if [ -f "$__object/parameter/server_alias" ]; then
 | 
			
		||||
   for alias in $(cat "$__object/parameter/server_alias"); do
 | 
			
		||||
      echo $alias > /some/where/usefull
 | 
			
		||||
   done
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
--------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -81,7 +81,9 @@ class CdistType(object):
 | 
			
		|||
 | 
			
		||||
        self.__explorers = None
 | 
			
		||||
        self.__required_parameters = None
 | 
			
		||||
        self.__required_multiple_parameters = None
 | 
			
		||||
        self.__optional_parameters = None
 | 
			
		||||
        self.__optional_multiple_parameters = None
 | 
			
		||||
        self.__boolean_parameters = None
 | 
			
		||||
 | 
			
		||||
    def __repr__(self):
 | 
			
		||||
| 
						 | 
				
			
			@ -130,6 +132,22 @@ class CdistType(object):
 | 
			
		|||
                self.__required_parameters = parameters
 | 
			
		||||
        return self.__required_parameters
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def required_multiple_parameters(self):
 | 
			
		||||
        """Return a list of required multiple parameters"""
 | 
			
		||||
        if not self.__required_multiple_parameters:
 | 
			
		||||
            parameters = []
 | 
			
		||||
            try:
 | 
			
		||||
                with open(os.path.join(self.absolute_path, "parameter", "required_multiple")) as fd:
 | 
			
		||||
                    for line in fd:
 | 
			
		||||
                        parameters.append(line.strip())
 | 
			
		||||
            except EnvironmentError:
 | 
			
		||||
                # error ignored
 | 
			
		||||
                pass
 | 
			
		||||
            finally:
 | 
			
		||||
                self.__required_multiple_parameters = parameters
 | 
			
		||||
        return self.__required_multiple_parameters
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def optional_parameters(self):
 | 
			
		||||
        """Return a list of optional parameters"""
 | 
			
		||||
| 
						 | 
				
			
			@ -146,6 +164,22 @@ class CdistType(object):
 | 
			
		|||
                self.__optional_parameters = parameters
 | 
			
		||||
        return self.__optional_parameters
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def optional_multiple_parameters(self):
 | 
			
		||||
        """Return a list of optional multiple parameters"""
 | 
			
		||||
        if not self.__optional_multiple_parameters:
 | 
			
		||||
            parameters = []
 | 
			
		||||
            try:
 | 
			
		||||
                with open(os.path.join(self.absolute_path, "parameter", "optional_multiple")) as fd:
 | 
			
		||||
                    for line in fd:
 | 
			
		||||
                        parameters.append(line.strip())
 | 
			
		||||
            except EnvironmentError:
 | 
			
		||||
                # error ignored
 | 
			
		||||
                pass
 | 
			
		||||
            finally:
 | 
			
		||||
                self.__optional_multiple_parameters = parameters
 | 
			
		||||
        return self.__optional_multiple_parameters
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def boolean_parameters(self):
 | 
			
		||||
        """Return a list of boolean parameters"""
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -89,12 +89,18 @@ class Emulator(object):
 | 
			
		|||
 | 
			
		||||
        parser = argparse.ArgumentParser(add_help=False, argument_default=argparse.SUPPRESS)
 | 
			
		||||
 | 
			
		||||
        for parameter in self.cdist_type.optional_parameters:
 | 
			
		||||
            argument = "--" + parameter
 | 
			
		||||
            parser.add_argument(argument, dest=parameter, action='store', required=False)
 | 
			
		||||
        for parameter in self.cdist_type.required_parameters:
 | 
			
		||||
            argument = "--" + parameter
 | 
			
		||||
            parser.add_argument(argument, dest=parameter, action='store', required=True)
 | 
			
		||||
        for parameter in self.cdist_type.required_multiple_parameters:
 | 
			
		||||
            argument = "--" + parameter
 | 
			
		||||
            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)
 | 
			
		||||
        for parameter in self.cdist_type.optional_multiple_parameters:
 | 
			
		||||
            argument = "--" + parameter
 | 
			
		||||
            parser.add_argument(argument, dest=parameter, action='append', required=False)
 | 
			
		||||
        for parameter in self.cdist_type.boolean_parameters:
 | 
			
		||||
            argument = "--" + parameter
 | 
			
		||||
            parser.add_argument(argument, dest=parameter, action='store_const', const='')
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -134,6 +134,10 @@ class DirectoryDict(collections.MutableMapping):
 | 
			
		|||
    def __setitem__(self, key, value):
 | 
			
		||||
        try:
 | 
			
		||||
            with open(os.path.join(self.path, key), "w") as fd:
 | 
			
		||||
                if type(value) == type([]):
 | 
			
		||||
                    for v in value:
 | 
			
		||||
                        fd.write(str(v) + '\n')
 | 
			
		||||
                else:
 | 
			
		||||
                    fd.write(str(value))
 | 
			
		||||
        except EnvironmentError as e:
 | 
			
		||||
            raise cdist.Error(str(e))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue