Allow custom message for each deprecated parameter

This commit is contained in:
Darko Poljak 2019-06-19 18:19:32 +02:00
parent 55ba49efac
commit 3cb4e76175
8 changed files with 44 additions and 35 deletions

View file

@ -769,9 +769,14 @@ class Config(object):
self.log.warning("Type %s is deprecated.", cdist_type.name)
for param in cdist_object.parameters:
if param in cdist_type.deprecated_parameters:
self.log.warning(("%s parameter of type %s is deprecated, "
"see man page for details"),
param, cdist_type.name)
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"""

View file

@ -279,20 +279,20 @@ class CdistType(object):
@property
def deprecated_parameters(self):
"""Return a list of deprecated parameters"""
if not self.__deprecated_parameters:
parameters = []
deprecated = {}
try:
with open(os.path.join(self.absolute_path,
deprecated_dir = os.path.join(self.absolute_path,
"parameter",
"deprecated")) as fd:
for line in fd:
line = line.strip()
if line:
parameters.append(line)
"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:
# error ignored
pass
pass # Swallow errors raised by open() or read()
except EnvironmentError:
pass # Swallow error raised by os.listdir()
finally:
self.__deprecated_parameters = parameters
self.__deprecated_parameters = deprecated
return self.__deprecated_parameters

View file

@ -205,10 +205,13 @@ class TypeTestCase(test.CdistTestCase):
base_path = fixtures
cdist_type = core.CdistType(base_path,
'__without_deprecated_parameters')
self.assertEqual(cdist_type.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.assertEqual(cdist_type.deprecated_parameters,
['eggs', 'spam'])
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'], '')

View file

@ -1,4 +1,3 @@
spam
eggs
sausage
spam

View file

@ -188,24 +188,27 @@ Example: (e.g. in cdist/conf/type/__nginx_vhost/manifest)
Deprecated parameters
---------------------
To deprecate type parameters one can declare a newline separated file
**parameter/deprecated** where each line contains deprecated parameter.
When it is used cdist writes warning line, e.g.:
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
$ cat parameter/optional_multiple
foo
spam
eggs
$ cat parameter/deprecated
spam
eggs
$ echo '__foo foo --foo foo --spam spam' | ./bin/cdist config -i - 185.203.112.26
WARNING: 185.203.112.26: spam parameter of type __foo is deprecated, see man page for details
$ 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, see man page for details
WARNING: 185.203.112.26: eggs parameter of type __foo is deprecated, see man page for details
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