-#!/usr/bin/python
+#
#
# Copyright (C) 2006, 2007 Google Inc.
This is raised when an OS exists on the master (or is otherwise
requested to the code) but not on the target node.
- This exception has two arguments:
+ This exception has three arguments:
- the name of the os
+ - the source directory, if any
- the reason why we consider this an invalid OS (text of error message)
"""
"""
+
class OpExecError(GenericError):
"""Error during OpCode execution.
"""
+
+class OpRetryError(OpExecError):
+ """Error during OpCode execution, action can be retried.
+
+ """
+
+
class OpCodeUnknown(GenericError):
"""Unknown opcode submitted.
"""
+
+class JobLost(GenericError):
+ """Submitted job lost.
+
+ The job was submitted but it cannot be found in the current job
+ list.
+
+ """
+
+
+class ResolverError(GenericError):
+ """Host name cannot be resolved.
+
+ This is not a normal situation for Ganeti, as we rely on having a
+ working resolver.
+
+ The non-resolvable hostname is available as the first element of the
+ args tuple; the other two elements of the tuple are the first two
+ args of the socket.gaierror exception (error code and description).
+
+ """
+
+
class HooksFailure(GenericError):
"""A generic hook failure.
"""
+
class HooksAbort(HooksFailure):
"""A required hook has failed.
"""
+
class UnitParseError(GenericError):
"""Unable to parse size unit.
"""
+class TypeEnforcementError(GenericError):
+ """Unable to enforce data type.
+
+ """
class SshKeyError(GenericError):
"""Invalid SSH key.
+
+ """
+
+
+class TagError(GenericError):
+ """Generic tag error.
+
+ The argument to this exception will show the exact error.
+
+ """
+
+
+class CommandError(GenericError):
+ """External command error.
+
+ """
+
+
+class QuitGanetiException(Exception):
+ """Signal that Ganeti that it must quit.
+
+ This is not necessarily an error (and thus not a subclass of GenericError),
+ but it's an exceptional circumstance and it is thus treated. This instance
+ should be instantiated with two values. The first one will specify whether an
+ error should returned to the caller, and the second one will be the returned
+ result (either as an error or as a normal result).
+
+ Examples::
+
+ # Return a result of "True" to the caller, but quit ganeti afterwards
+ raise QuitGanetiException(False, True)
+ # Send an error to the caller, and quit ganeti
+ raise QuitGanetiException(True, "Fatal safety violation, shutting down")
+
+ """
+
+
+class JobQueueError(GenericError):
+ """Job queue error.
+
+ """
+
+
+class JobQueueDrainError(JobQueueError):
+ """Job queue is marked for drain error.
+
+ This is raised when a job submission attempt is made but the queue
+ is marked for drain.
+
+ """
+
+
+class JobQueueFull(JobQueueError):
+ """Job queue full error.
+
+ Raised when job queue size reached its hard limit.
+
+ """
+
+
+# errors should be added above
+
+
+def GetErrorClass(name):
+ """Return the class of an exception.
+
+ Given the class name, return the class itself.
+
+ @type name: str
+ @param name: the exception name
+ @rtype: class
+ @return: the actual class, or None if not found
+
"""
+ item = globals().get(name, None)
+ if item is not None:
+ if not (isinstance(item, type(Exception)) and
+ issubclass(item, GenericError)):
+ item = None
+ return item