# 02110-1301, USA.
-"""Ganeti exception handling"""
+"""Ganeti exception handling.
+
+"""
+
+from ganeti import compat
# OpPrereqError failure types
-# resolver errors
+#: Resolver errors
ECODE_RESOLVER = "resolver_error"
-# not enough resources (iallocator failure, disk space, memory, etc.)
+
+#: Not enough resources (iallocator failure, disk space, memory, etc.)
ECODE_NORES = "insufficient_resources"
-# wrong arguments (at syntax level)
+
+#: Temporarily out of resources; operation can be tried again
+ECODE_TEMP_NORES = "temp_insufficient_resources"
+
+#: Wrong arguments (at syntax level)
ECODE_INVAL = "wrong_input"
-# wrong entity state
+
+#: Wrong entity state
ECODE_STATE = "wrong_state"
-# entity not found
+
+#: Entity not found
ECODE_NOENT = "unknown_entity"
-# entity already exists
+
+#: Entity already exists
ECODE_EXISTS = "already_exists"
-# resource not unique (e.g. MAC or IP duplication)
+
+#: Resource not unique (e.g. MAC or IP duplication)
ECODE_NOTUNIQUE = "resource_not_unique"
-# internal cluster error
+
+#: Internal cluster error
ECODE_FAULT = "internal_error"
-# environment error (e.g. node disk error)
+
+#: Environment error (e.g. node disk error)
ECODE_ENVIRON = "environment_error"
#: List of all failure types
-ECODE_ALL = frozenset([
+ECODE_ALL = compat.UniqueFrozenset([
ECODE_RESOLVER,
ECODE_NORES,
+ ECODE_TEMP_NORES,
ECODE_INVAL,
ECODE_STATE,
ECODE_NOENT,
"""
+class AddressPoolError(GenericError):
+ """Errors related to IP address pools.
+
+ """
+
+
class ReservationError(GenericError):
"""Errors reserving a resource.
"""
+class DeviceCreationError(GenericError):
+ """Error during the creation of a device.
+
+ This exception should contain the list of the devices actually created
+ up to now, in the form of pairs (node, device)
+
+ """
+ def __init__(self, message, created_devices):
+ GenericError.__init__(self)
+ self.message = message
+ self.created_devices = created_devices
+
+ def __str__(self):
+ return self.message
+
+
class OpCodeUnknown(GenericError):
"""Unknown opcode submitted.