"""
+
class TypeEnforcementError(GenericError):
"""Unable to enforce data type.
"""
+
class SshKeyError(GenericError):
"""Invalid SSH key.
"""
+class StorageError(GenericError):
+ """Storage-related exception.
+
+ """
+
+
+class InotifyError(GenericError):
+ """Error raised when there is a failure setting up an inotify watcher.
+
+ """
+
+
class QuitGanetiException(Exception):
"""Signal that Ganeti that it must quit.
"""
+class ConfdFatalError(GenericError):
+ """A fatal failure in Ganeti confd.
+
+ Events that compromise the ability of confd to proceed further.
+ (for example: inability to load the config file)
+
+ """
+
+
+class ConfdRequestError(GenericError):
+ """A request error in Ganeti confd.
+
+ Events that should make confd abort the current request and proceed serving
+ different ones.
+
+ """
+
+
+class ConfdMagicError(GenericError):
+ """A magic fourcc error in Ganeti confd.
+
+ Errors processing the fourcc in ganeti confd datagrams.
+
+ """
+
+
+class ConfdClientError(GenericError):
+ """A magic fourcc error in Ganeti confd.
+
+ Errors in the confd client library.
+
+ """
+
+
+class UdpDataSizeError(GenericError):
+ """UDP payload too big.
+
+ """
+
+
# errors should be added above
issubclass(item, GenericError)):
item = None
return item
+
+
+def EncodeException(err):
+ """Encodes an exception into a format that L{MaybeRaise} will recognise.
+
+ The passed L{err} argument will be formatted as a tuple (exception
+ name, arguments) that the MaybeRaise function will recognise.
+
+ @type err: GenericError child
+ @param err: usually a child of GenericError (but any exception
+ will be accepted)
+ @rtype: tuple
+ @return: tuple of (exception name, exception arguments)
+
+ """
+ return (err.__class__.__name__, err.args)
+
+
+def MaybeRaise(result):
+ """Is this looks like an encoded Ganeti exception, raise it.
+
+ This function tries to parse the passed argument and if it looks
+ like an encoding done by EncodeException, it will re-raise it.
+
+ """
+ tlt = (tuple, list)
+ if (isinstance(result, tlt) and len(result) == 2 and
+ isinstance(result[1], tlt)):
+ # custom ganeti errors
+ err_class = GetErrorClass(result[0])
+ if err_class is not None:
+ raise err_class, tuple(result[1])