errors: Document arguments to QueryFilterParseError
[ganeti-local] / lib / errors.py
index ee660c2..035df49 100644 (file)
@@ -1,7 +1,7 @@
 #
 #
 
-# Copyright (C) 2006, 2007, 2008, 2009, 2010 Google Inc.
+# Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Google Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -43,30 +43,38 @@ ECODE_FAULT = "internal_error"
 # environment error (e.g. node disk error)
 ECODE_ENVIRON = "environment_error"
 
+#: List of all failure types
+ECODE_ALL = frozenset([
+  ECODE_RESOLVER,
+  ECODE_NORES,
+  ECODE_INVAL,
+  ECODE_STATE,
+  ECODE_NOENT,
+  ECODE_EXISTS,
+  ECODE_NOTUNIQUE,
+  ECODE_FAULT,
+  ECODE_ENVIRON,
+  ])
+
 
 class GenericError(Exception):
   """Base exception for Ganeti.
 
   """
-  pass
 
 
-class LVMError(GenericError):
-  """LVM-related exception.
+class LockError(GenericError):
+  """Lock error exception.
 
-  This exception codifies problems with LVM setup.
+  This signifies problems in the locking subsystem.
 
   """
-  pass
 
 
-class LockError(GenericError):
-  """Lock error exception.
-
-  This signifies problems in the locking subsystem.
+class PidFileLockError(LockError):
+  """PID file is already locked by another process.
 
   """
-  pass
 
 
 class HypervisorError(GenericError):
@@ -76,7 +84,6 @@ class HypervisorError(GenericError):
   properly.
 
   """
-  pass
 
 
 class ProgrammerError(GenericError):
@@ -87,7 +94,6 @@ class ProgrammerError(GenericError):
   parts of our code. It signifies a real programming bug.
 
   """
-  pass
 
 
 class BlockDeviceError(GenericError):
@@ -97,7 +103,6 @@ class BlockDeviceError(GenericError):
   properly.
 
   """
-  pass
 
 
 class ConfigurationError(GenericError):
@@ -107,7 +112,6 @@ class ConfigurationError(GenericError):
   exist in the config or such raise this exception.
 
   """
-  pass
 
 
 class ConfigVersionMismatch(ConfigurationError):
@@ -117,7 +121,6 @@ class ConfigVersionMismatch(ConfigurationError):
   version.
 
   """
-  pass
 
 
 class ReservationError(GenericError):
@@ -133,7 +136,6 @@ class RemoteError(GenericError):
   remote node.  It usually signifies a real programming bug.
 
   """
-  pass
 
 
 class SignatureError(GenericError):
@@ -144,7 +146,6 @@ class SignatureError(GenericError):
   because of spurious traffic.
 
   """
-  pass
 
 
 class ParameterError(GenericError):
@@ -157,7 +158,12 @@ class ParameterError(GenericError):
   The argument to this exception should be the parameter name.
 
   """
-  pass
+
+
+class ResultValidationError(GenericError):
+  """The iallocation results fails validation.
+
+  """
 
 
 class OpPrereqError(GenericError):
@@ -176,6 +182,12 @@ class OpExecError(GenericError):
   """
 
 
+class OpResultError(GenericError):
+  """Issue with OpCode result.
+
+  """
+
+
 class OpCodeUnknown(GenericError):
   """Unknown opcode submitted.
 
@@ -252,8 +264,10 @@ class TypeEnforcementError(GenericError):
   """
 
 
-class SshKeyError(GenericError):
-  """Invalid SSH key.
+class X509CertError(GenericError):
+  """Invalid X509 certificate.
+
+  This error has two arguments: the certificate filename and the error cause.
 
   """
 
@@ -285,11 +299,11 @@ class InotifyError(GenericError):
 
 
 class QuitGanetiException(Exception):
-  """Signal that Ganeti that it must quit.
+  """Signal 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
+  treated. This exception should be instantiated with two values. The
   first one will specify the return code to the caller, and the second
   one will be the returned result (either as an error or as a normal
   result). Usually only the leave cluster rpc call should return
@@ -329,15 +343,6 @@ class JobQueueFull(JobQueueError):
   """
 
 
-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.
 
@@ -372,6 +377,47 @@ class IPAddressError(GenericError):
   """
 
 
+class LuxiError(GenericError):
+  """LUXI error.
+
+  """
+
+
+class QueryFilterParseError(ParseError):
+  """Error while parsing query filter.
+
+  This exception must be instantiated with two values. The first one is a
+  string with an error description, the second one is an instance of a subclass
+  of C{pyparsing.ParseBaseException} (used to display the exact error
+  location).
+
+  """
+  def GetDetails(self):
+    """Returns a list of strings with details about the error.
+
+    """
+    try:
+      (_, inner) = self.args
+    except IndexError:
+      return None
+
+    return [str(inner.line),
+            (" " * (inner.column - 1)) + "^",
+            str(inner)]
+
+
+class RapiTestResult(GenericError):
+  """Exception containing results from RAPI test utilities.
+
+  """
+
+
+class FileStoragePathError(GenericError):
+  """Error from file storage path validation.
+
+  """
+
+
 # errors should be added above
 
 
@@ -439,4 +485,5 @@ def MaybeRaise(result):
   error = GetEncodedError(result)
   if error:
     (errcls, args) = error
-    raise errcls, args
+    # pylint: disable=W0142
+    raise errcls(*args)