diff --git a/cdist/core/__init__.py b/cdist/core/__init__.py index ebe69366..b79cdb21 100644 --- a/cdist/core/__init__.py +++ b/cdist/core/__init__.py @@ -21,7 +21,7 @@ # from cdist.core.cdist_type import CdistType -from cdist.core.cdist_type import NoSuchTypeError, InvalidTypeError +from cdist.core.cdist_type import InvalidTypeError from cdist.core.cdist_object import CdistObject from cdist.core.cdist_object import IllegalObjectIdError from cdist.core.explorer import Explorer diff --git a/cdist/core/cdist_type.py b/cdist/core/cdist_type.py index b2b5e14d..ed386631 100644 --- a/cdist/core/cdist_type.py +++ b/cdist/core/cdist_type.py @@ -23,20 +23,15 @@ import os import cdist import cdist.core +import logging -class NoSuchTypeError(cdist.Error): +class InvalidTypeError(cdist.Error): def __init__(self, name, type_path, type_absolute_path): self.name = name self.type_path = type_path self.type_absolute_path = type_absolute_path - def __str__(self): - return "Type '%s' does not exist at '%s'" % ( - self.type_path, self.type_absolute_path) - - -class InvalidTypeError(NoSuchTypeError): def __str__(self): return "Invalid type '%s' at '%s' defined at '%s'" % ( self.type_path, self.type_absolute_path, @@ -52,12 +47,15 @@ class CdistType(object): """ + log = logging.getLogger("cdist") + def __init__(self, base_path, name): self.base_path = base_path self.name = name self.path = self.name self.absolute_path = os.path.join(self.base_path, self.path) if not os.path.isdir(self.absolute_path): + os.remove(self.absolute_path) raise InvalidTypeError(self.name, self.path, self.absolute_path) self.manifest_path = os.path.join(self.name, "manifest") self.explorer_path = os.path.join(self.name, "explorer") @@ -80,7 +78,11 @@ class CdistType(object): def list_types(cls, base_path): """Return a list of type instances""" for name in cls.list_type_names(base_path): - yield cls(base_path, name) + try: + yield cls(base_path, name) + except InvalidTypeError as e: + # ignore invalid type, log warning and continue + cls.log.warning(e) @classmethod def list_type_names(cls, base_path): diff --git a/docs/changelog b/docs/changelog index a89571e9..291b9dab 100644 --- a/docs/changelog +++ b/docs/changelog @@ -5,6 +5,7 @@ next: * Type __ccollect_source: Add create destination parameter (Dominique Roux) * Type __ssh_authorized_key: Add messaging (Thomas Eckert) * New type: __letsencrypt_cert (Nico Schottelius, Kamila Součková) + * Core: Warn about invalid type in conf dir and continue instead of error (Darko Poljak) 4.7.2: 2017-10-22 * Type __hostname: Add support for CoreOS (Ľubomír Kučera)