Warn about invalid type and continue instead of error.

This commit is contained in:
Darko Poljak 2017-11-02 17:44:47 +01:00
parent e6c5563a16
commit c14f3b68f4
3 changed files with 12 additions and 9 deletions

View file

@ -21,7 +21,7 @@
# #
from cdist.core.cdist_type import CdistType 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 CdistObject
from cdist.core.cdist_object import IllegalObjectIdError from cdist.core.cdist_object import IllegalObjectIdError
from cdist.core.explorer import Explorer from cdist.core.explorer import Explorer

View file

@ -23,20 +23,15 @@
import os import os
import cdist import cdist
import cdist.core import cdist.core
import logging
class NoSuchTypeError(cdist.Error): class InvalidTypeError(cdist.Error):
def __init__(self, name, type_path, type_absolute_path): def __init__(self, name, type_path, type_absolute_path):
self.name = name self.name = name
self.type_path = type_path self.type_path = type_path
self.type_absolute_path = type_absolute_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): def __str__(self):
return "Invalid type '%s' at '%s' defined at '%s'" % ( return "Invalid type '%s' at '%s' defined at '%s'" % (
self.type_path, self.type_absolute_path, self.type_path, self.type_absolute_path,
@ -52,12 +47,15 @@ class CdistType(object):
""" """
log = logging.getLogger("cdist")
def __init__(self, base_path, name): def __init__(self, base_path, name):
self.base_path = base_path self.base_path = base_path
self.name = name self.name = name
self.path = self.name self.path = self.name
self.absolute_path = os.path.join(self.base_path, self.path) self.absolute_path = os.path.join(self.base_path, self.path)
if not os.path.isdir(self.absolute_path): if not os.path.isdir(self.absolute_path):
os.remove(self.absolute_path)
raise InvalidTypeError(self.name, self.path, self.absolute_path) raise InvalidTypeError(self.name, self.path, self.absolute_path)
self.manifest_path = os.path.join(self.name, "manifest") self.manifest_path = os.path.join(self.name, "manifest")
self.explorer_path = os.path.join(self.name, "explorer") self.explorer_path = os.path.join(self.name, "explorer")
@ -80,7 +78,11 @@ class CdistType(object):
def list_types(cls, base_path): def list_types(cls, base_path):
"""Return a list of type instances""" """Return a list of type instances"""
for name in cls.list_type_names(base_path): for name in cls.list_type_names(base_path):
try:
yield cls(base_path, name) yield cls(base_path, name)
except InvalidTypeError as e:
# ignore invalid type, log warning and continue
cls.log.warning(e)
@classmethod @classmethod
def list_type_names(cls, base_path): def list_type_names(cls, base_path):

View file

@ -5,6 +5,7 @@ next:
* Type __ccollect_source: Add create destination parameter (Dominique Roux) * Type __ccollect_source: Add create destination parameter (Dominique Roux)
* Type __ssh_authorized_key: Add messaging (Thomas Eckert) * Type __ssh_authorized_key: Add messaging (Thomas Eckert)
* New type: __letsencrypt_cert (Nico Schottelius, Kamila Součková) * 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 4.7.2: 2017-10-22
* Type __hostname: Add support for CoreOS (Ľubomír Kučera) * Type __hostname: Add support for CoreOS (Ľubomír Kučera)