Commit 4949af89 authored by Darko Poljak's avatar Darko Poljak

Add type deprecation support.

parent ea291efb
......@@ -758,8 +758,19 @@ class Config(object):
("The requirements of the following objects could not be "
"resolved:\n%s") % ("\n".join(info_string)))
def _handle_deprecation(self, cdist_object):
cdist_type = cdist_object.cdist_type
deprecated = cdist_type.deprecated
if deprecated is not None:
if deprecated:
self.log.warning("Type %s is deprecated: %s",,
self.log.warning("Type %s is deprecated.",
def object_prepare(self, cdist_object, transfer_type_explorers=True):
"""Prepare object: Run type explorer + manifest"""
self.log.verbose("Preparing object {}".format(
"Running manifest and explorers for " +
......@@ -133,6 +133,17 @@ class CdistType(object):
cannot run in parallel."""
return os.path.isfile(os.path.join(self.absolute_path, "nonparallel"))
def deprecated(self):
"""Get type deprecation message. If message is None then type
is not deprecated."""
deprecated_path = os.path.join(self.absolute_path, "deprecated")
with open(deprecated_path, 'r') as f:
except FileNotFoundError:
return None
def explorers(self):
"""Return a list of available explorers"""
......@@ -123,6 +123,16 @@ class TypeTestCase(test.CdistTestCase):
cdist_type = core.CdistType(base_path, '__not_nonparallel')
def test_deprecated(self):
base_path = fixtures
cdist_type = core.CdistType(base_path, '__deprecated')
def test_not_deprecated(self):
base_path = fixtures
cdist_type = core.CdistType(base_path, '__not_deprecated')
def test_install_is_install(self):
base_path = fixtures
cdist_type = core.CdistType(base_path, '__install')
......@@ -6,6 +6,7 @@ next:
* Type __consul: Add version 1.5.0 (Nico Schottelius)
* Type __consul_agent: Add alpine support (Nico Schottelius)
* New helper script: cdist-new-type (Steven Armstrong, Darko Poljak)
* Core: Add support for deprecated type marker (Darko Poljak)
5.0.2: 2019-05-17
* Type __package_apk: Fix @repo handling in explorer (Nico Schottelius)
......@@ -71,6 +71,31 @@ when using -j option. Example of such a type is __package_dpkg type where dpkg i
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
then this content is printed as a deprecation messages, e.g.:
.. code-block:: sh
$ ls -l deprecated
-rw-r--r-- 1 darko darko 71 May 20 18:30 deprecated
$ cat deprecated
This type is deprecated. It will be removed in the next minor release.
$ echo '__foo foo' | ./bin/cdist config -i -
WARNING: Type __foo is deprecated: This type is deprecated. It will be removed in the next minor release.
If 'deprecated' marker has no content then general message is printed, e.g.:
.. code-block:: sh
$ ls -l deprecated
-rw-r--r-- 1 darko darko 0 May 20 18:36 deprecated
$ echo '__bar foo' | ./bin/cdist config -i -
WARNING: Type __bar is deprecated.
How to write a new type
A type consists of
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment