Merge branch 'feature/support-type-param-deprecation' into 'master'
Add support for deprecated type parameters See merge request ungleich-public/cdist!786
This commit is contained in:
		
				commit
				
					
						175ab90a9e
					
				
			
		
					 7 changed files with 76 additions and 1 deletions
				
			
		| 
						 | 
				
			
			@ -767,6 +767,16 @@ class Config(object):
 | 
			
		|||
                                 deprecated)
 | 
			
		||||
            else:
 | 
			
		||||
                self.log.warning("Type %s is deprecated.", cdist_type.name)
 | 
			
		||||
        for param in cdist_object.parameters:
 | 
			
		||||
            if param in cdist_type.deprecated_parameters:
 | 
			
		||||
                msg = cdist_type.deprecated_parameters[param]
 | 
			
		||||
                if msg:
 | 
			
		||||
                    format = "%s parameter of type %s is deprecated: %s"
 | 
			
		||||
                    args = [param, cdist_type.name, msg]
 | 
			
		||||
                else:
 | 
			
		||||
                    format = "%s parameter of type %s is deprecated."
 | 
			
		||||
                    args = [param, cdist_type.name]
 | 
			
		||||
                self.log.warning(format, *args)
 | 
			
		||||
 | 
			
		||||
    def object_prepare(self, cdist_object, transfer_type_explorers=True):
 | 
			
		||||
        """Prepare object: Run type explorer + manifest"""
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -69,6 +69,7 @@ class CdistType(object):
 | 
			
		|||
        self.__optional_multiple_parameters = None
 | 
			
		||||
        self.__boolean_parameters = None
 | 
			
		||||
        self.__parameter_defaults = None
 | 
			
		||||
        self.__deprecated_parameters = None
 | 
			
		||||
 | 
			
		||||
    def __hash__(self):
 | 
			
		||||
        return hash(self.name)
 | 
			
		||||
| 
						 | 
				
			
			@ -275,3 +276,23 @@ class CdistType(object):
 | 
			
		|||
            finally:
 | 
			
		||||
                self.__parameter_defaults = defaults
 | 
			
		||||
        return self.__parameter_defaults
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def deprecated_parameters(self):
 | 
			
		||||
        if not self.__deprecated_parameters:
 | 
			
		||||
            deprecated = {}
 | 
			
		||||
            try:
 | 
			
		||||
                deprecated_dir = os.path.join(self.absolute_path,
 | 
			
		||||
                                              "parameter",
 | 
			
		||||
                                              "deprecated")
 | 
			
		||||
                for name in cdist.core.listdir(deprecated_dir):
 | 
			
		||||
                    try:
 | 
			
		||||
                        with open(os.path.join(deprecated_dir, name)) as fd:
 | 
			
		||||
                            deprecated[name] = fd.read().strip()
 | 
			
		||||
                    except EnvironmentError:
 | 
			
		||||
                        pass  # Swallow errors raised by open() or read()
 | 
			
		||||
            except EnvironmentError:
 | 
			
		||||
                pass  # Swallow error raised by os.listdir()
 | 
			
		||||
            finally:
 | 
			
		||||
                self.__deprecated_parameters = deprecated
 | 
			
		||||
        return self.__deprecated_parameters
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -200,3 +200,18 @@ class TypeTestCase(test.CdistTestCase):
 | 
			
		|||
        self.assertEqual(
 | 
			
		||||
            list(sorted(cdist_type.parameter_defaults.keys())),
 | 
			
		||||
            ['bar', 'foo'])
 | 
			
		||||
 | 
			
		||||
    def test_without_deprecated_parameters(self):
 | 
			
		||||
        base_path = fixtures
 | 
			
		||||
        cdist_type = core.CdistType(base_path,
 | 
			
		||||
                                    '__without_deprecated_parameters')
 | 
			
		||||
        self.assertEqual(cdist_type.deprecated_parameters, {})
 | 
			
		||||
 | 
			
		||||
    def test_with_deprecated_parameters(self):
 | 
			
		||||
        base_path = fixtures
 | 
			
		||||
        cdist_type = core.CdistType(base_path, '__with_deprecated_parameters')
 | 
			
		||||
        self.assertTrue('eggs' in cdist_type.deprecated_parameters)
 | 
			
		||||
        self.assertTrue('spam' in cdist_type.deprecated_parameters)
 | 
			
		||||
        self.assertEqual(cdist_type.deprecated_parameters['eggs'],
 | 
			
		||||
                         'Deprecated')
 | 
			
		||||
        self.assertEqual(cdist_type.deprecated_parameters['spam'], '')
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
Deprecated
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,3 @@
 | 
			
		|||
spam
 | 
			
		||||
eggs
 | 
			
		||||
sausage
 | 
			
		||||
| 
						 | 
				
			
			@ -74,7 +74,7 @@ prevents to be run in more than one instance.
 | 
			
		|||
Deprecated types
 | 
			
		||||
-----------------
 | 
			
		||||
If a type is flagged with 'deprecated' marker then it is considered deprecated.
 | 
			
		||||
Upon it's usage cdist writes warning line. If 'deprecated' marker has content
 | 
			
		||||
When it is used cdist writes warning line. If 'deprecated' marker has content
 | 
			
		||||
then this content is printed as a deprecation messages, e.g.:
 | 
			
		||||
 | 
			
		||||
.. code-block:: sh
 | 
			
		||||
| 
						 | 
				
			
			@ -186,6 +186,31 @@ Example: (e.g. in cdist/conf/type/__nginx_vhost/manifest)
 | 
			
		|||
    fi
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Deprecated parameters
 | 
			
		||||
---------------------
 | 
			
		||||
To deprecate type parameters one can declare a file for each deprecated
 | 
			
		||||
parameter under **parameter/deprecated** directory.
 | 
			
		||||
 | 
			
		||||
When such parameter is used cdist writes warning line with deprecation message.
 | 
			
		||||
If such file has content then this content is printed as deprecation message.
 | 
			
		||||
If there is no content then generic parameter deprecation message is printed.
 | 
			
		||||
 | 
			
		||||
Example:
 | 
			
		||||
 | 
			
		||||
.. code-block:: sh
 | 
			
		||||
 | 
			
		||||
    $ ls parameter/deprecated/
 | 
			
		||||
    eggs    spam
 | 
			
		||||
    $ cat parameter/deprecated/eggs
 | 
			
		||||
    eggs parameter is deprecated, please use multiple egg parameter.
 | 
			
		||||
    $ cat parameter/deprecated/spam
 | 
			
		||||
    $ echo '__foo foo --foo foo --eggs eggs' | ./bin/cdist config -i - 185.203.112.26
 | 
			
		||||
    WARNING: 185.203.112.26: eggs parameter of type __foo is deprecated: eggs parameter is deprecated, please use multiple egg parameter.
 | 
			
		||||
    $ echo '__foo foo --foo foo --eggs eggs --spam spam' | ./bin/cdist config -i - 185.203.112.26
 | 
			
		||||
    WARNING: 185.203.112.26: spam parameter of type __foo is deprecated.
 | 
			
		||||
    WARNING: 185.203.112.26: eggs parameter of type __foo is deprecated: eggs parameter is deprecated, please use multiple egg parameter.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Input from stdin
 | 
			
		||||
----------------
 | 
			
		||||
Every type can access what has been written on stdin when it has been called.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue