53
53
super(ConvertedException, self).__init__()
56
class ProcessExecutionError(IOError):
57
def __init__(self, stdout=None, stderr=None, exit_code=None, cmd=None,
59
self.exit_code = exit_code
63
self.description = description
65
if description is None:
66
description = _('Unexpected error while running command.')
69
message = _('%(description)s\nCommand: %(cmd)s\n'
70
'Exit code: %(exit_code)s\nStdout: %(stdout)r\n'
71
'Stderr: %(stderr)r') % {
72
'description': description,
74
'exit_code': exit_code,
78
IOError.__init__(self, message)
81
Error = com_exception.Error
56
class Error(Exception):
84
60
class CinderException(Exception):
119
95
# at least get the core message out if something happened
120
96
message = self.message
98
# NOTE(luisg): We put the actual message in 'msg' so that we can access
99
# it, because if we try to access the message via 'message' it will be
100
# overshadowed by the class' message attribute
122
102
super(CinderException, self).__init__(message)
104
def __unicode__(self):
105
return unicode(self.msg)
125
108
class GlanceConnectionFailed(CinderException):
126
109
message = _("Connection to glance failed") + ": %(reason)s"
188
176
message = _("Invalid content type %(content_type)s.")
179
class InvalidHost(Invalid):
180
message = _("Invalid host") + ": %(reason)s"
191
183
# Cannot be templated as the error syntax varies.
192
184
# msg needs to be constructed when raised.
193
185
class InvalidParameterValue(Invalid):
294
291
message = _("No target id found for volume %(volume_id)s.")
297
class ISCSITargetCreateFailed(CinderException):
298
message = _("Failed to create iscsi target for volume %(volume_id)s.")
301
class ISCSITargetAttachFailed(CinderException):
302
message = _("Failed to attach iSCSI target for volume %(volume_id)s.")
305
class ISCSITargetRemoveFailed(CinderException):
306
message = _("Failed to remove iscsi target for volume %(volume_id)s.")
309
294
class DiskNotFound(NotFound):
310
295
message = _("No disk at %(location)s")
560
549
" exists for volume id %(volume_id)s")
552
class GlanceMetadataNotFound(NotFound):
553
message = _("Glance metadata for volume/snapshot %(id)s cannot be found.")
556
class ExportFailure(Invalid):
557
message = _("Failed to export for volume: %(reason)s")
560
class MetadataCreateFailure(Invalid):
561
message = _("Failed to create metadata for volume: %(reason)s")
564
class MetadataUpdateFailure(Invalid):
565
message = _("Failed to update metadata for volume: %(reason)s")
568
class MetadataCopyFailure(Invalid):
569
message = _("Failed to copy metadata to volume: %(reason)s")
563
572
class ImageCopyFailure(Invalid):
564
573
message = _("Failed to copy image to volume: %(reason)s")
576
class BackupInvalidCephArgs(Invalid):
577
message = _("Invalid Ceph args provided for backup rbd operation")
580
class BackupOperationError(Invalid):
581
message = _("An error has occurred during backup operation")
584
class BackupRBDOperationFailed(Invalid):
585
message = _("Backup RBD operation failed")
567
588
class BackupVolumeInvalidType(Invalid):
568
589
message = _("Backup volume %(volume_id)s type not recognised.")
583
604
class TransferNotFound(NotFound):
584
605
message = _("Transfer %(transfer_id)s could not be found.")
608
class VolumeMigrationFailed(CinderException):
609
message = _("Volume migration failed") + ": %(reason)s"
612
class ProtocolNotSupported(CinderException):
613
message = _("Connect to volume via protocol %(protocol)s not supported.")
616
class SSHInjectionThreat(CinderException):
617
message = _("SSH command injection detected") + ": %(command)s"
620
class CoraidException(CinderException):
621
message = _('Coraid Cinder Driver exception.')
624
class CoraidJsonEncodeFailure(CoraidException):
625
message = _('Failed to encode json data.')
628
class CoraidESMBadCredentials(CoraidException):
629
message = _('Login on ESM failed.')
632
class CoraidESMReloginFailed(CoraidException):
633
message = _('Relogin on ESM failed.')
636
class CoraidESMBadGroup(CoraidException):
637
message = _('Group with name "%(group_name)s" not found.')
640
class CoraidESMConfigureError(CoraidException):
641
message = _('ESM configure request failed: %(message)s.')
644
class CoraidESMNotAvailable(CoraidException):
645
message = _('Coraid ESM not available with reason: %(reason)s.')
648
class QoSSpecsExists(Duplicate):
649
message = _("QoS Specs %(specs_id)s already exists.")
652
class QoSSpecsCreateFailed(CinderException):
653
message = _("Failed to create qos_specs: "
654
"%(name)s with specs %(qos_specs)s.")
657
class QoSSpecsUpdateFailed(CinderException):
658
message = _("Failed to update qos_specs: "
659
"%(specs_id)s with specs %(qos_specs)s.")
662
class QoSSpecsNotFound(NotFound):
663
message = _("No such QoS spec %(specs_id)s.")
666
class QoSSpecsAssociateFailed(CinderException):
667
message = _("Failed to associate qos_specs: "
668
"%(specs_id)s with type %(type_id)s.")
671
class QoSSpecsDisassociateFailed(CinderException):
672
message = _("Failed to disassociate qos_specs: "
673
"%(specs_id)s with type %(type_id)s.")
676
class QoSSpecsKeyNotFound(NotFound):
677
message = _("QoS spec %(specs_id)s has no spec with "
678
"key %(specs_key)s.")
681
class InvalidQoSSpecs(Invalid):
682
message = _("Invalid qos specs") + ": %(reason)s"
685
class QoSSpecsInUse(CinderException):
686
message = _("QoS Specs %(specs_id)s is still associated with entities.")