Common and Misc Libraries

Libraries common throughout Cinder or just ones that haven’t been categorized very well yet.

The cinder.context Module

RequestContext: context for requests that persist through all of cinder.

class RequestContext(user_id=None, project_id=None, is_admin=None, read_deleted='no', project_name=None, remote_address=None, timestamp=None, quota_class=None, service_catalog=None, **kwargs)

Bases: oslo_context.context.RequestContext

Security context and request information.

Represents the user taking a given action within the system.

deepcopy()
elevated(read_deleted=None, overwrite=False)

Return a version of this context with admin flag set.

classmethod from_dict(values)
project_id
read_deleted
to_dict()
to_policy_values()
user_id
get_admin_context(read_deleted='no')
get_internal_tenant_context()

Build and return the Cinder internal tenant context object

This request context will only work for internal Cinder operations. It will not be able to make requests to remote services. To do so it will need to use the keystone client to get an auth_token.

The cinder.exception Module

Cinder base exception handling.

Includes decorator for re-raising Cinder-type exceptions.

SHOULD include dedicated exception logging.

exception APIException(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'Error while requesting %(service)s API.'
exception APITimeout(message=None, **kwargs)

Bases: cinder.exception.APIException

message = u'Timeout while requesting %(service)s API.'
exception AdminRequired(message=None, **kwargs)

Bases: cinder.exception.NotAuthorized

message = u'User does not have admin privileges'
exception AttachmentSpecsNotFound(message=None, **kwargs)

Bases: cinder.exception.NotFound

message = u'Attachment %(attachment_id)s has no key %(specs_key)s.'
exception BackupDriverException(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'Backup driver reported an error: %(message)s'
exception BackupFailedToGetVolumeBackend(message=None, **kwargs)

Bases: cinder.exception.NotFound

message = u'Failed to identify volume backend.'
exception BackupInvalidCephArgs(message=None, **kwargs)

Bases: cinder.exception.BackupDriverException

message = u'Invalid Ceph args provided for backup rbd operation'
exception BackupLimitExceeded(message=None, **kwargs)

Bases: cinder.exception.QuotaError

message = u'Maximum number of backups allowed (%(allowed)d) exceeded'
exception BackupMetadataUnsupportedVersion(message=None, **kwargs)

Bases: cinder.exception.BackupDriverException

message = u'Unsupported backup metadata version requested'
exception BackupNotFound(message=None, **kwargs)

Bases: cinder.exception.NotFound

message = u'Backup %(backup_id)s could not be found.'
exception BackupOperationError(message=None, **kwargs)

Bases: cinder.exception.Invalid

message = u'An error has occurred during backup operation'
exception BackupRBDOperationFailed(message=None, **kwargs)

Bases: cinder.exception.BackupDriverException

message = u'Backup RBD operation failed'
exception BackupVerifyUnsupportedDriver(message=None, **kwargs)

Bases: cinder.exception.BackupDriverException

message = u'Unsupported backup verify driver'
exception BadHTTPResponseStatus(message=None, **kwargs)

Bases: cinder.exception.VolumeDriverException

message = u'Bad HTTP response status %(status)s'
exception BrocadeZoningCliException(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'Brocade Fibre Channel Zoning CLI error: %(reason)s'
exception BrocadeZoningHttpException(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'Brocade Fibre Channel Zoning HTTP error: %(reason)s'
exception CappedVersionUnknown(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u"Unrecoverable Error: Versioned Objects in DB are capped to unknown version %(version)s. Most likely your environment contains only new services and you're trying to start an older one. Use `cinder-manage service list` to check that and upgrade this service."
exception CgSnapshotNotFound(message=None, **kwargs)

Bases: cinder.exception.NotFound

message = u'CgSnapshot %(cgsnapshot_id)s could not be found.'
exception CinderException(message=None, **kwargs)

Bases: exceptions.Exception

Base Cinder Exception

To correctly use this class, inherit from it and define a ‘message’ property. That message will get printf’d with the keyword arguments provided to the constructor.

code = 500
headers = {}
message = u'An unknown exception occurred.'
safe = False
exception CiscoZoningCliException(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'Cisco Fibre Channel Zoning CLI error: %(reason)s'
exception CleanableInUse(message=None, **kwargs)

Bases: cinder.exception.Invalid

message = u'%(type)s with id %(id)s is already being cleaned up or another host has taken over it.'
exception ClusterExists(message=None, **kwargs)

Bases: cinder.exception.Duplicate

message = u'Cluster %(name)s already exists.'
exception ClusterHasHosts(message=None, **kwargs)

Bases: cinder.exception.Invalid

message = u'Cluster %(id)s still has hosts.'
exception ClusterNotFound(message=None, **kwargs)

Bases: cinder.exception.NotFound

message = u'Cluster %(id)s could not be found.'
exception CohoException(message=None, **kwargs)

Bases: cinder.exception.VolumeDriverException

message = u'Coho Data Cinder driver failure: %(message)s'
exception ConfigNotFound(message=None, **kwargs)

Bases: cinder.exception.NotFound

message = u'Could not find config at %(path)s'
exception ConsistencyGroupNotFound(message=None, **kwargs)

Bases: cinder.exception.NotFound

message = u'ConsistencyGroup %(consistencygroup_id)s could not be found.'
exception ConvertedException(code=500, title='', explanation='')

Bases: webob.exc.WSGIHTTPException

exception DateraAPIException(message=None, **kwargs)

Bases: cinder.exception.VolumeBackendAPIException

message = u'Bad response from Datera API'
exception DellDriverRetryableException(message=None, **kwargs)

Bases: cinder.exception.VolumeBackendAPIException

message = u'Retryable Dell Exception encountered'
exception DellDriverUnknownSpec(message=None, **kwargs)

Bases: cinder.exception.VolumeDriverException

message = u'Dell driver failure: %(reason)s'
exception DeviceUnavailable(message=None, **kwargs)

Bases: cinder.exception.Invalid

message = u'The device in the path %(path)s is unavailable: %(reason)s'
exception DotHillAuthenticationError(message=None, **kwargs)

Bases: cinder.exception.VolumeDriverException

message = '%(message)s'
exception DotHillConnectionError(message=None, **kwargs)

Bases: cinder.exception.VolumeDriverException

message = '%(message)s'
exception DotHillInvalidBackend(message=None, **kwargs)

Bases: cinder.exception.VolumeDriverException

message = u"Backend doesn't exist (%(backend)s)"
exception DotHillNotEnoughSpace(message=None, **kwargs)

Bases: cinder.exception.VolumeDriverException

message = u'Not enough space on backend (%(backend)s)'
exception DotHillNotTargetPortal(message=None, **kwargs)

Bases: cinder.exception.VolumeDriverException

message = u'No active iSCSI portals with supplied iSCSI IPs'
exception DotHillRequestError(message=None, **kwargs)

Bases: cinder.exception.VolumeDriverException

message = '%(message)s'
exception DriverNotInitialized(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'Volume driver not ready.'
exception Duplicate(message=None, **kwargs)

Bases: cinder.exception.CinderException

exception DuplicateSfVolumeNames(message=None, **kwargs)

Bases: cinder.exception.Duplicate

message = u'Detected more than one volume with name %(vol_name)s'
exception EMCSPUnavailableException(message=None, **kwargs)

Bases: cinder.exception.EMCVnxCLICmdError

message = u'EMC VNX Cinder Driver SPUnavailableException: %(cmd)s (Return Code: %(rc)s) (Output: %(out)s).'
exception EMCVnxCLICmdError(message=None, **kwargs)

Bases: cinder.exception.VolumeBackendAPIException

message = u'EMC VNX Cinder Driver CLI exception: %(cmd)s (Return Code: %(rc)s) (Output: %(out)s).'
exception EncryptedBackupOperationFailed(message=None, **kwargs)

Bases: cinder.exception.BackupDriverException

message = u'Backup operation of an encrypted volume failed.'
exception Error

Bases: exceptions.Exception

exception EvaluatorParseException

Bases: exceptions.Exception

message = u'Error during evaluator parsing: %(reason)s'
exception ExportFailure(message=None, **kwargs)

Bases: cinder.exception.Invalid

message = u'Failed to export for volume: %(reason)s'
exception ExtendVolumeError(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'Error extending volume: %(reason)s'
exception FCSanLookupServiceException(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'Fibre Channel SAN Lookup failure: %(reason)s'
exception FCZoneDriverException(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'Fibre Channel Zone operation failed: %(reason)s'
exception FailedCmdWithDump(message=None, **kwargs)

Bases: cinder.exception.VolumeDriverException

message = u'Operation failed with status=%(status)s. Full dump: %(data)s'
exception FileNotFound(message=None, **kwargs)

Bases: cinder.exception.NotFound

message = u'File %(file_path)s could not be found.'
exception GCSApiFailure(message=None, **kwargs)

Bases: cinder.exception.BackupDriverException

message = u'Google Cloud Storage api failure: %(reason)s'
exception GCSConnectionFailure(message=None, **kwargs)

Bases: cinder.exception.BackupDriverException

message = u'Google Cloud Storage connection failure: %(reason)s'
exception GCSOAuth2Failure(message=None, **kwargs)

Bases: cinder.exception.BackupDriverException

message = u'Google Cloud Storage oauth2 failure: %(reason)s'
exception GlanceConnectionFailed(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'Connection to glance failed: %(reason)s'
exception GlanceMetadataExists(message=None, **kwargs)

Bases: cinder.exception.Invalid

message = u'Glance metadata cannot be updated, key %(key)s exists for volume id %(volume_id)s'
exception GlanceMetadataNotFound(message=None, **kwargs)

Bases: cinder.exception.NotFound

message = u'Glance metadata for volume/snapshot %(id)s cannot be found.'
exception GroupLimitExceeded(message=None, **kwargs)

Bases: cinder.exception.QuotaError

message = u'Maximum number of groups allowed (%(allowed)d) exceeded'
exception GroupNotFound(message=None, **kwargs)

Bases: cinder.exception.NotFound

message = u'Group %(group_id)s could not be found.'
exception GroupSnapshotNotFound(message=None, **kwargs)

Bases: cinder.exception.NotFound

message = u'GroupSnapshot %(group_snapshot_id)s could not be found.'
exception GroupTypeAccessExists(message=None, **kwargs)

Bases: cinder.exception.Duplicate

message = u'Group type access for %(group_type_id)s / %(project_id)s combination already exists.'
exception GroupTypeAccessNotFound(message=None, **kwargs)

Bases: cinder.exception.NotFound

message = u'Group type access not found for %(group_type_id)s / %(project_id)s combination.'
exception GroupTypeCreateFailed(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'Cannot create group_type with name %(name)s and specs %(group_specs)s'
exception GroupTypeEncryptionExists(message=None, **kwargs)

Bases: cinder.exception.Invalid

message = u'Group type encryption for type %(type_id)s already exists.'
exception GroupTypeEncryptionNotFound(message=None, **kwargs)

Bases: cinder.exception.NotFound

message = u'Group type encryption for type %(type_id)s does not exist.'
exception GroupTypeExists(message=None, **kwargs)

Bases: cinder.exception.Duplicate

message = u'Group Type %(id)s already exists.'
exception GroupTypeInUse(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'Group Type %(group_type_id)s deletion is not allowed with groups present with the type.'
exception GroupTypeNotFound(message=None, **kwargs)

Bases: cinder.exception.NotFound

message = u'Group type %(group_type_id)s could not be found.'
exception GroupTypeNotFoundByName(message=None, **kwargs)

Bases: cinder.exception.GroupTypeNotFound

message = u'Group type with name %(group_type_name)s could not be found.'
exception GroupTypeSpecsNotFound(message=None, **kwargs)

Bases: cinder.exception.NotFound

message = u'Group Type %(group_type_id)s has no specs with key %(group_specs_key)s.'
exception GroupTypeUpdateFailed(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'Cannot update group_type %(id)s'
exception GroupVolumeTypeMappingExists(message=None, **kwargs)

Bases: cinder.exception.Duplicate

message = u'Group volume type mapping for %(group_id)s / %(volume_type_id)s combination already exists.'
exception HBSDBusy(message=None, **kwargs)

Bases: cinder.exception.HBSDError

message = 'Device or resource is busy.'
exception HBSDCmdError(message=None, ret=None, err=None)

Bases: cinder.exception.HBSDError

exception HBSDError(message=None, **kwargs)

Bases: cinder.exception.VolumeDriverException

message = u'HBSD error occurs.'
exception HBSDNotFound(message=None, **kwargs)

Bases: cinder.exception.NotFound

message = u'Storage resource could not be found.'
exception HBSDVolumeIsBusy(message=None, **kwargs)

Bases: cinder.exception.VolumeIsBusy

message = u'Volume %(volume_name)s is busy.'
exception HNASConnError(message=None, **kwargs)

Bases: cinder.exception.VolumeDriverException

message = '%(message)s'
exception HostNotFound(message=None, **kwargs)

Bases: cinder.exception.NotFound

message = u'Host %(host)s could not be found.'
exception ISCSITargetAttachFailed(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'Failed to attach iSCSI target for volume %(volume_id)s.'
exception ISCSITargetCreateFailed(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'Failed to create iscsi target for volume %(volume_id)s.'
exception ISCSITargetDetachFailed(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'Failed to detach iSCSI target for volume %(volume_id)s.'
exception ISCSITargetHelperCommandFailed(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = '%(error_message)s'
exception ISCSITargetNotFoundForVolume(message=None, **kwargs)

Bases: cinder.exception.NotFound

message = u'No target id found for volume %(volume_id)s.'
exception ISCSITargetRemoveFailed(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'Failed to remove iscsi target for volume %(volume_id)s.'
exception ImageCopyFailure(message=None, **kwargs)

Bases: cinder.exception.Invalid

message = u'Failed to copy image to volume: %(reason)s'
exception ImageLimitExceeded(message=None, **kwargs)

Bases: cinder.exception.QuotaError

message = u'Image quota exceeded'
exception ImageNotAuthorized(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'Not authorized for image %(image_id)s.'
exception ImageNotFound(message=None, **kwargs)

Bases: cinder.exception.NotFound

message = u'Image %(image_id)s could not be found.'
exception ImageUnacceptable(message=None, **kwargs)

Bases: cinder.exception.Invalid

message = u'Image %(image_id)s is unacceptable: %(reason)s'
exception InfortrendCliException(message=None, **kwargs)

Bases: cinder.exception.VolumeDriverException

message = u'Infortrend CLI exception: %(err)s Param: %(param)s (Return Code: %(rc)s) (Output: %(out)s)'
exception Invalid(message=None, **kwargs)

Bases: cinder.exception.CinderException

code = 400
message = u'Unacceptable parameters.'
exception Invalid3PARDomain(message=None, **kwargs)

Bases: cinder.exception.VolumeDriverException

message = u'Invalid 3PAR Domain: %(err)s'
exception InvalidAPIVersionString(message=None, **kwargs)

Bases: cinder.exception.Invalid

message = u'API Version String %(version)s is of invalid format. Must be of format MajorNum.MinorNum.'
exception InvalidAttachment(message=None, **kwargs)

Bases: cinder.exception.Invalid

message = u'Invalid attachment: %(reason)s'
exception InvalidAuthKey(message=None, **kwargs)

Bases: cinder.exception.Invalid

message = u'Invalid auth key: %(reason)s'
exception InvalidBackup(message=None, **kwargs)

Bases: cinder.exception.Invalid

message = u'Invalid backup: %(reason)s'
exception InvalidCgSnapshot(message=None, **kwargs)

Bases: cinder.exception.Invalid

message = u'Invalid CgSnapshot: %(reason)s'
exception InvalidConfigurationValue(message=None, **kwargs)

Bases: cinder.exception.Invalid

message = u'Value "%(value)s" is not valid for configuration option "%(option)s"'
exception InvalidConnectorException(message=None, **kwargs)

Bases: cinder.exception.VolumeDriverException

message = u"Connector doesn't have required information: %(missing)s"
exception InvalidConsistencyGroup(message=None, **kwargs)

Bases: cinder.exception.Invalid

message = u'Invalid ConsistencyGroup: %(reason)s'
exception InvalidContentType(message=None, **kwargs)

Bases: cinder.exception.Invalid

message = u'Invalid content type %(content_type)s.'
exception InvalidGlobalAPIVersion(message=None, **kwargs)

Bases: cinder.exception.Invalid

message = u'Version %(req_ver)s is not supported by the API. Minimum is %(min_ver)s and maximum is %(max_ver)s.'
exception InvalidGroup(message=None, **kwargs)

Bases: cinder.exception.Invalid

message = u'Invalid Group: %(reason)s'
exception InvalidGroupSnapshot(message=None, **kwargs)

Bases: cinder.exception.Invalid

message = u'Invalid GroupSnapshot: %(reason)s'
exception InvalidGroupSnapshotStatus(message=None, **kwargs)

Bases: cinder.exception.Invalid

message = u'Invalid GroupSnapshot Status: %(reason)s'
exception InvalidGroupStatus(message=None, **kwargs)

Bases: cinder.exception.Invalid

message = u'Invalid Group Status: %(reason)s'
exception InvalidGroupType(message=None, **kwargs)

Bases: cinder.exception.Invalid

message = u'Invalid group type: %(reason)s'
exception InvalidHost(message=None, **kwargs)

Bases: cinder.exception.Invalid

message = u'Invalid host: %(reason)s'
exception InvalidImageRef(message=None, **kwargs)

Bases: cinder.exception.Invalid

message = u'Invalid image href %(image_href)s.'
exception InvalidInput(message=None, **kwargs)

Bases: cinder.exception.Invalid

message = u'Invalid input received: %(reason)s'
exception InvalidMetadataType(message=None, **kwargs)

Bases: cinder.exception.Invalid

message = u'The type of metadata: %(metadata_type)s for volume/snapshot %(id)s is invalid.'
exception InvalidNestedQuotaSetup(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'Project quotas are not properly setup for nested quotas: %(reason)s.'
exception InvalidParameterValue(message=None, **kwargs)

Bases: cinder.exception.Invalid

message = '%(err)s'
exception InvalidQoSSpecs(message=None, **kwargs)

Bases: cinder.exception.Invalid

message = u'Invalid qos specs: %(reason)s'
exception InvalidQuotaValue(message=None, **kwargs)

Bases: cinder.exception.Invalid

message = u'Change would make usage less than 0 for the following resources: %(unders)s'
exception InvalidReplicationTarget(message=None, **kwargs)

Bases: cinder.exception.Invalid

message = u'Invalid Replication Target: %(reason)s'
exception InvalidReservationExpiration(message=None, **kwargs)

Bases: cinder.exception.Invalid

message = u'Invalid reservation expiration %(expire)s.'
exception InvalidResults(message=None, **kwargs)

Bases: cinder.exception.Invalid

message = u'The results are invalid.'
exception InvalidSnapshot(message=None, **kwargs)

Bases: cinder.exception.Invalid

message = u'Invalid snapshot: %(reason)s'
exception InvalidUUID(message=None, **kwargs)

Bases: cinder.exception.Invalid

message = u'Expected a uuid but received %(uuid)s.'
exception InvalidVolume(message=None, **kwargs)

Bases: cinder.exception.Invalid

message = u'Invalid volume: %(reason)s'
exception InvalidVolumeAttachMode(message=None, **kwargs)

Bases: cinder.exception.Invalid

message = u"Invalid attaching mode '%(mode)s' for volume %(volume_id)s."
exception InvalidVolumeMetadata(message=None, **kwargs)

Bases: cinder.exception.Invalid

message = u'Invalid metadata: %(reason)s'
exception InvalidVolumeMetadataSize(message=None, **kwargs)

Bases: cinder.exception.Invalid

message = u'Invalid metadata size: %(reason)s'
exception InvalidVolumeType(message=None, **kwargs)

Bases: cinder.exception.Invalid

message = u'Invalid volume type: %(reason)s'
exception KaminarioCinderDriverException(message=None, **kwargs)

Bases: cinder.exception.VolumeDriverException

message = u'KaminarioCinderDriver failure: %(reason)s'
exception KaminarioRetryableException(message=None, **kwargs)

Bases: cinder.exception.VolumeDriverException

message = u'Kaminario retryable exception: %(reason)s'
exception KeyManagerError(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'key manager error: %(reason)s'
exception LockCreationFailed(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'Unable to create lock. Coordination backend not started.'
exception LockingFailed(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'Lock acquisition failed.'
exception MalformedRequestBody(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'Malformed message body: %(reason)s'
exception MalformedResponse(message=None, **kwargs)

Bases: cinder.exception.VolumeDriverException

message = u'Malformed response to command %(cmd)s: %(reason)s'
exception ManageExistingAlreadyManaged(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'Unable to manage existing volume. Volume %(volume_ref)s already managed.'
exception ManageExistingInvalidReference(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'Manage existing volume failed due to invalid backend reference %(existing_ref)s: %(reason)s'
exception ManageExistingVolumeTypeMismatch(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'Manage existing volume failed due to volume type mismatch: %(reason)s'
exception MessageNotFound(message=None, **kwargs)

Bases: cinder.exception.NotFound

message = u'Message %(message_id)s could not be found.'
exception MetadataAbsent(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'There is no metadata in DB object.'
exception MetadataCopyFailure(message=None, **kwargs)

Bases: cinder.exception.Invalid

message = u'Failed to copy metadata to volume: %(reason)s'
exception MetadataCreateFailure(message=None, **kwargs)

Bases: cinder.exception.Invalid

message = u'Failed to create metadata for volume: %(reason)s'
exception MetadataUpdateFailure(message=None, **kwargs)

Bases: cinder.exception.Invalid

message = u'Failed to update metadata for volume: %(reason)s'
exception MissingRequired(message=None, **kwargs)

Bases: cinder.exception.Invalid

message = u"Missing required element '%(element)s' in request body."
exception NetAppDriverException(message=None, **kwargs)

Bases: cinder.exception.VolumeDriverException

message = u'NetApp Cinder Driver exception.'
exception NexentaException(message=None, **kwargs)

Bases: cinder.exception.VolumeDriverException

message = '%(message)s'
exception NfsException(message=None, **kwargs)

Bases: cinder.exception.RemoteFSException

message = u'Unknown NFS exception'
exception NfsNoSharesMounted(message=None, **kwargs)

Bases: cinder.exception.RemoteFSNoSharesMounted

message = u'No mounted NFS shares found'
exception NfsNoSuitableShareFound(message=None, **kwargs)

Bases: cinder.exception.RemoteFSNoSuitableShareFound

message = u'There is no share which can host %(volume_size)sG'
exception NoMoreTargets(message=None, **kwargs)

Bases: cinder.exception.CinderException

No more available targets.

exception NoValidBackend(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'No valid backend was found. %(reason)s'
exception NotAuthorized(message=None, **kwargs)

Bases: cinder.exception.CinderException

code = 403
message = u'Not authorized.'
exception NotFound(message=None, **kwargs)

Bases: cinder.exception.CinderException

code = 404
message = u'Resource could not be found.'
safe = True
exception NotSupportedOperation(message=None, **kwargs)

Bases: cinder.exception.Invalid

code = 405
message = u'Operation not supported: %(operation)s.'
exception OverQuota(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'Quota exceeded for resources: %(overs)s'
exception ParameterNotFound(message=None, **kwargs)

Bases: cinder.exception.NotFound

message = u'Could not find parameter %(param)s'
exception PolicyNotAuthorized(message=None, **kwargs)

Bases: cinder.exception.NotAuthorized

message = u"Policy doesn't allow %(action)s to be performed."
exception ProgrammingError(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'Programming error in Cinder: %(reason)s'
exception ProjectQuotaNotFound(message=None, **kwargs)

Bases: cinder.exception.QuotaNotFound

message = u'Quota for project %(project_id)s could not be found.'
exception PureDriverException(message=None, **kwargs)

Bases: cinder.exception.VolumeDriverException

message = u'Pure Storage Cinder driver failure: %(reason)s'
exception PureRetryableException(message=None, **kwargs)

Bases: cinder.exception.VolumeBackendAPIException

message = u'Retryable Pure Storage Exception encountered'
exception QoSSpecsAssociateFailed(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'Failed to associate qos_specs: %(specs_id)s with type %(type_id)s.'
exception QoSSpecsCreateFailed(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'Failed to create qos_specs: %(name)s with specs %(qos_specs)s.'
exception QoSSpecsDisassociateFailed(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'Failed to disassociate qos_specs: %(specs_id)s with type %(type_id)s.'
exception QoSSpecsExists(message=None, **kwargs)

Bases: cinder.exception.Duplicate

message = u'QoS Specs %(specs_id)s already exists.'
exception QoSSpecsInUse(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'QoS Specs %(specs_id)s is still associated with entities.'
exception QoSSpecsKeyNotFound(message=None, **kwargs)

Bases: cinder.exception.NotFound

message = u'QoS spec %(specs_id)s has no spec with key %(specs_key)s.'
exception QoSSpecsNotFound(message=None, **kwargs)

Bases: cinder.exception.NotFound

message = u'No such QoS spec %(specs_id)s.'
exception QoSSpecsUpdateFailed(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'Failed to update qos_specs: %(specs_id)s with specs %(qos_specs)s.'
exception QuotaClassNotFound(message=None, **kwargs)

Bases: cinder.exception.QuotaNotFound

message = u'Quota class %(class_name)s could not be found.'
exception QuotaError(message=None, **kwargs)

Bases: cinder.exception.CinderException

code = 413
headers = {'Retry-After': '0'}
message = u'Quota exceeded: code=%(code)s'
safe = True
exception QuotaNotFound(message=None, **kwargs)

Bases: cinder.exception.NotFound

message = u'Quota could not be found'
exception QuotaResourceUnknown(message=None, **kwargs)

Bases: cinder.exception.QuotaNotFound

message = u'Unknown quota resources %(unknown)s.'
exception QuotaUsageNotFound(message=None, **kwargs)

Bases: cinder.exception.QuotaNotFound

message = u'Quota usage for project %(project_id)s could not be found.'
exception RPCTimeout(message=None, **kwargs)

Bases: cinder.exception.CinderException

code = 502
message = u'Timeout while requesting capabilities from backend %(service)s.'
exception RdxAPICommandException(message=None, **kwargs)

Bases: cinder.exception.VolumeDriverException

message = u'Reduxio API Command Exception'
exception RdxAPIConnectionException(message=None, **kwargs)

Bases: cinder.exception.VolumeDriverException

message = u'Reduxio API Connection Exception'
exception RemoteFSConcurrentRequest(message=None, **kwargs)

Bases: cinder.exception.RemoteFSException

message = u'A concurrent, possibly contradictory, request has been made.'
exception RemoteFSException(message=None, **kwargs)

Bases: cinder.exception.VolumeDriverException

message = u'Unknown RemoteFS exception'
exception RemoteFSNoSharesMounted(message=None, **kwargs)

Bases: cinder.exception.RemoteFSException

message = u'No mounted shares found'
exception RemoteFSNoSuitableShareFound(message=None, **kwargs)

Bases: cinder.exception.RemoteFSException

message = u'There is no share which can host %(volume_size)sG'
exception RemoveExportException(message=None, **kwargs)

Bases: cinder.exception.VolumeDriverException

message = u'Failed to remove export for volume %(volume)s: %(reason)s'
exception ReplicationError(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'Volume %(volume_id)s replication error: %(reason)s'
exception ReplicationNotFound(message=None, **kwargs)

Bases: cinder.exception.NotFound

message = u'Volume replication for %(volume_id)s could not be found.'
exception ReservationNotFound(message=None, **kwargs)

Bases: cinder.exception.QuotaNotFound

message = u'Quota reservation %(uuid)s could not be found.'
exception SSHInjectionThreat(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'SSH command injection detected: %(command)s'
exception SchedulerHostFilterNotFound(message=None, **kwargs)

Bases: cinder.exception.NotFound

message = u'Scheduler Host Filter %(filter_name)s could not be found.'
exception SchedulerHostWeigherNotFound(message=None, **kwargs)

Bases: cinder.exception.NotFound

message = u'Scheduler Host Weigher %(weigher_name)s could not be found.'
exception ServerNotFound(message=None, **kwargs)

Bases: cinder.exception.NotFound

message = u'Instance %(uuid)s could not be found.'
exception ServiceNotFound(message=None, **kwargs)

Bases: cinder.exception.NotFound

exception ServiceTooOld(message=None, **kwargs)

Bases: cinder.exception.Invalid

message = u'Service is too old to fulfil this request.'
exception ServiceUnavailable(message=None, **kwargs)

Bases: cinder.exception.Invalid

message = u'Service is unavailable at this time.'
exception SheepdogCmdError(message=None, **kwargs)

Bases: cinder.exception.SheepdogError

message = u'(Command: %(cmd)s) (Return Code: %(exit_code)s) (Stdout: %(stdout)s) (Stderr: %(stderr)s)'
exception SheepdogError(message=None, **kwargs)

Bases: cinder.exception.VolumeBackendAPIException

message = u'An error has occurred in SheepdogDriver. (Reason: %(reason)s)'
exception SmbfsException(message=None, **kwargs)

Bases: cinder.exception.RemoteFSException

message = u'Unknown SMBFS exception.'
exception SmbfsNoSharesMounted(message=None, **kwargs)

Bases: cinder.exception.RemoteFSNoSharesMounted

message = u'No mounted SMBFS shares found.'
exception SmbfsNoSuitableShareFound(message=None, **kwargs)

Bases: cinder.exception.RemoteFSNoSuitableShareFound

message = u'There is no share which can host %(volume_size)sG.'
exception SnapshotIsBusy(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'deleting snapshot %(snapshot_name)s that has dependent volumes'
exception SnapshotLimitExceeded(message=None, **kwargs)

Bases: cinder.exception.QuotaError

message = u'Maximum number of snapshots allowed (%(allowed)d) exceeded'
exception SnapshotMetadataNotFound(message=None, **kwargs)

Bases: cinder.exception.NotFound

message = u'Snapshot %(snapshot_id)s has no metadata with key %(metadata_key)s.'
exception SnapshotNotFound(message=None, **kwargs)

Bases: cinder.exception.NotFound

message = u'Snapshot %(snapshot_id)s could not be found.'
exception SnapshotUnavailable(message=None, **kwargs)

Bases: cinder.exception.VolumeBackendAPIException

message = u'The snapshot is unavailable: %(data)s'
exception SolidFireAPIDataException(message=None, **kwargs)

Bases: cinder.exception.SolidFireAPIException

message = u'Error in SolidFire API response: data=%(data)s'
exception SolidFireAPIException(message=None, **kwargs)

Bases: cinder.exception.VolumeBackendAPIException

message = u'Bad response from SolidFire API'
exception SolidFireAccountNotFound(message=None, **kwargs)

Bases: cinder.exception.SolidFireDriverException

message = u'Unable to locate account %(account_name)s on Solidfire device'
exception SolidFireDriverException(message=None, **kwargs)

Bases: cinder.exception.VolumeDriverException

message = u'SolidFire Cinder Driver exception'
exception SolidFireRetryableException(message=None, **kwargs)

Bases: cinder.exception.VolumeBackendAPIException

message = u'Retryable SolidFire Exception encountered'
exception SwiftConnectionFailed(message=None, **kwargs)

Bases: cinder.exception.BackupDriverException

message = u'Connection to swift failed: %(reason)s'
exception SynoAPIHTTPError(message=None, **kwargs)

Bases: cinder.exception.VolumeDriverException

message = u'HTTP exit code: [%(code)s]'
exception SynoAuthError(message=None, **kwargs)

Bases: cinder.exception.VolumeDriverException

message = u'Synology driver authentication failed: %(reason)s.'
exception SynoLUNNotExist(message=None, **kwargs)

Bases: cinder.exception.VolumeDriverException

message = u'LUN not found by UUID: %(uuid)s.'
exception TegileAPIException(message=None, **kwargs)

Bases: cinder.exception.VolumeBackendAPIException

message = u'Unexpected response from Tegile IntelliFlash API'
exception TransferNotFound(message=None, **kwargs)

Bases: cinder.exception.NotFound

message = u'Transfer %(transfer_id)s could not be found.'
exception UnableToFailOver(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'Unable to failover to replication target: %(reason)s).'
exception UnavailableDuringUpgrade(message=None, **kwargs)

Bases: cinder.exception.Invalid

message = u'Cannot perform %(action)s during system upgrade.'
exception UnexpectedOverQuota(message=None, **kwargs)

Bases: cinder.exception.QuotaError

message = u'Unexpected over quota on %(name)s.'
exception UnknownCmd(message=None, **kwargs)

Bases: cinder.exception.VolumeDriverException

message = u'Unknown or unsupported command %(cmd)s'
exception VSPBusy(message=None, **kwargs)

Bases: cinder.exception.VSPError

message = u'Device or resource is busy.'
exception VSPError(message=None, **kwargs)

Bases: cinder.exception.VolumeDriverException

message = u'VSP error occurred. %(message)s'
exception VSPNotSupported(message=None, **kwargs)

Bases: cinder.exception.VSPError

message = u'The function on the storage is not supported.'
exception VersionNotFoundForAPIMethod(message=None, **kwargs)

Bases: cinder.exception.Invalid

message = u'API version %(version)s is not supported on this method.'
exception ViolinBackendErr(message=None, **kwargs)

Bases: cinder.exception.VolumeBackendAPIException

message = u'Backend reports: %(message)s'
exception ViolinBackendErrExists(message=None, **kwargs)

Bases: cinder.exception.VolumeBackendAPIException

message = u'Backend reports: item already exists'
exception ViolinBackendErrNotFound(message=None, **kwargs)

Bases: cinder.exception.NotFound

message = u'Backend reports: item not found'
exception ViolinInvalidBackendConfig(message=None, **kwargs)

Bases: cinder.exception.VolumeDriverException

message = u'Volume backend config is invalid: %(reason)s'
exception ViolinRequestRetryTimeout(message=None, **kwargs)

Bases: cinder.exception.VolumeDriverException

message = u'Backend service retry timeout hit: %(timeout)s sec'
exception ViolinResourceNotFound(message=None, **kwargs)

Bases: cinder.exception.NotFound

message = u'Backend reports: %(message)s'
exception VolumeAdminMetadataNotFound(message=None, **kwargs)

Bases: cinder.exception.NotFound

message = u'Volume %(volume_id)s has no administration metadata with key %(metadata_key)s.'
exception VolumeAttached(message=None, **kwargs)

Bases: cinder.exception.Invalid

message = u'Volume %(volume_id)s is still attached, detach volume first.'
exception VolumeAttachmentNotFound(message=None, **kwargs)

Bases: cinder.exception.NotFound

message = u'Volume attachment could not be found with filter: %(filter)s .'
exception VolumeBackendAPIException(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'Bad or unexpected response from the storage volume backend API: %(data)s'
exception VolumeBackupSizeExceedsAvailableQuota(message=None, **kwargs)

Bases: cinder.exception.QuotaError

message = u'Requested backup exceeds allowed Backup gigabytes quota. Requested %(requested)sG, quota is %(quota)sG and %(consumed)sG has been consumed.'
exception VolumeDeviceNotFound(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'Volume device not found at %(device)s.'
exception VolumeDriverException(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'Volume driver reported an error: %(message)s'
exception VolumeGroupCreationFailed(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'Failed to create Volume Group: %(vg_name)s'
exception VolumeGroupNotFound(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'Unable to find Volume Group: %(vg_name)s'
exception VolumeIsBusy(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'deleting volume %(volume_name)s that has snapshot'
exception VolumeLimitExceeded(message=None, **kwargs)

Bases: cinder.exception.QuotaError

message = u"Maximum number of volumes allowed (%(allowed)d) exceeded for quota '%(name)s'."
exception VolumeMetadataBackupExists(message=None, **kwargs)

Bases: cinder.exception.BackupDriverException

message = u'Metadata backup already exists for this volume'
exception VolumeMetadataNotFound(message=None, **kwargs)

Bases: cinder.exception.NotFound

message = u'Volume %(volume_id)s has no metadata with key %(metadata_key)s.'
exception VolumeMigrationFailed(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'Volume migration failed: %(reason)s'
exception VolumeNotDeactivated(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'Volume %(name)s was not deactivated in time.'
exception VolumeNotFound(message=None, **kwargs)

Bases: cinder.exception.NotFound

message = u'Volume %(volume_id)s could not be found.'
exception VolumeSizeExceedsAvailableQuota(message=None, **kwargs)

Bases: cinder.exception.QuotaError

message = u'Requested volume or snapshot exceeds allowed %(name)s quota. Requested %(requested)sG, quota is %(quota)sG and %(consumed)sG has been consumed.'
exception VolumeSizeExceedsLimit(message=None, **kwargs)

Bases: cinder.exception.QuotaError

message = u'Requested volume size %(size)dG is larger than maximum allowed limit %(limit)dG.'
exception VolumeTypeAccessExists(message=None, **kwargs)

Bases: cinder.exception.Duplicate

message = u'Volume type access for %(volume_type_id)s / %(project_id)s combination already exists.'
exception VolumeTypeAccessNotFound(message=None, **kwargs)

Bases: cinder.exception.NotFound

message = u'Volume type access not found for %(volume_type_id)s / %(project_id)s combination.'
exception VolumeTypeCreateFailed(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'Cannot create volume_type with name %(name)s and specs %(extra_specs)s'
exception VolumeTypeEncryptionExists(message=None, **kwargs)

Bases: cinder.exception.Invalid

message = u'Volume type encryption for type %(type_id)s already exists.'
exception VolumeTypeEncryptionNotFound(message=None, **kwargs)

Bases: cinder.exception.NotFound

message = u'Volume type encryption for type %(type_id)s does not exist.'
exception VolumeTypeExists(message=None, **kwargs)

Bases: cinder.exception.Duplicate

message = u'Volume Type %(id)s already exists.'
exception VolumeTypeExtraSpecsNotFound(message=None, **kwargs)

Bases: cinder.exception.NotFound

message = u'Volume Type %(volume_type_id)s has no extra specs with key %(extra_specs_key)s.'
exception VolumeTypeInUse(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'Volume Type %(volume_type_id)s deletion is not allowed with volumes present with the type.'
exception VolumeTypeNotFound(message=None, **kwargs)

Bases: cinder.exception.NotFound

message = u'Volume type %(volume_type_id)s could not be found.'
exception VolumeTypeNotFoundByName(message=None, **kwargs)

Bases: cinder.exception.VolumeTypeNotFound

message = u'Volume type with name %(volume_type_name)s could not be found.'
exception VolumeTypeUpdateFailed(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'Cannot update volume_type %(id)s'
exception VzStorageException(message=None, **kwargs)

Bases: cinder.exception.RemoteFSException

message = u'Unknown Virtuozzo Storage exception'
exception VzStorageNoSharesMounted(message=None, **kwargs)

Bases: cinder.exception.RemoteFSNoSharesMounted

message = u'No mounted Virtuozzo Storage shares found'
exception VzStorageNoSuitableShareFound(message=None, **kwargs)

Bases: cinder.exception.RemoteFSNoSuitableShareFound

message = u'There is no share which can host %(volume_size)sG'
exception WebDAVClientError(message=None, **kwargs)

Bases: cinder.exception.VolumeDriverException

message = u'The WebDAV request failed. Reason: %(msg)s, Return code/reason: %(code)s, Source Volume: %(src)s, Destination Volume: %(dst)s, Method: %(method)s.'
exception WorkerExists(message=None, **kwargs)

Bases: cinder.exception.Duplicate

message = u'Worker for %(type)s %(id)s already exists.'
exception WorkerNotFound(message=None, **kwargs)

Bases: cinder.exception.NotFound

message = u'Worker with %s could not be found.'
exception XIODriverException(message=None, **kwargs)

Bases: cinder.exception.VolumeDriverException

message = u'X-IO Volume Driver exception!'
exception XtremIOAlreadyMappedError(message=None, **kwargs)

Bases: cinder.exception.VolumeDriverException

message = u'Volume to Initiator Group mapping already exists'
exception XtremIOArrayBusy(message=None, **kwargs)

Bases: cinder.exception.VolumeDriverException

message = u'System is busy, retry operation.'
exception XtremIOSnapshotsLimitExceeded(message=None, **kwargs)

Bases: cinder.exception.VolumeDriverException

message = u'Exceeded the limit of snapshots per volume'
exception ZadaraAttachmentsNotFound(message=None, **kwargs)

Bases: cinder.exception.NotFound

message = u'Failed to retrieve attachments for volume %(name)s'
exception ZadaraInvalidAttachmentInfo(message=None, **kwargs)

Bases: cinder.exception.Invalid

message = u'Invalid attachment info for volume %(name)s: %(reason)s'
exception ZadaraServerCreateFailure(message=None, **kwargs)

Bases: cinder.exception.VolumeDriverException

message = u'Unable to create server object for initiator %(name)s'
exception ZadaraServerNotFound(message=None, **kwargs)

Bases: cinder.exception.NotFound

message = u'Unable to find server object for initiator %(name)s'
exception ZadaraVPSANoActiveController(message=None, **kwargs)

Bases: cinder.exception.VolumeDriverException

message = u'Unable to find any active VPSA controller'
exception ZadaraVolumeNotFound(message=None, **kwargs)

Bases: cinder.exception.VolumeDriverException

message = '%(reason)s'
exception ZoneManagerException(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'Fibre Channel connection control failure: %(reason)s'
exception ZoneManagerNotInitialized(message=None, **kwargs)

Bases: cinder.exception.CinderException

message = u'Fibre Channel Zone Manager not initialized'

The cinder.common.config Module

Command-line flag library.

Emulates gflags by wrapping cfg.ConfigOpts.

The idea is to move fully to cfg eventually, and this wrapper is a stepping stone.

set_middleware_defaults()

Update default configuration options for oslo.middleware.

The cinder.rpc Module

init(conf)
cleanup()
set_defaults(control_exchange)
add_extra_exmods(*args)
clear_extra_exmods()
get_allowed_exmods()
class RequestContextSerializer(base)

Bases: oslo_messaging.serializer.Serializer

deserialize_context(context)
deserialize_entity(context, entity)
serialize_context(context)
serialize_entity(context, entity)
get_client(target, version_cap=None, serializer=None)
get_server(target, endpoints, serializer=None)
get_notifier(*args, **kwargs)

The cinder.test Module

Base classes for our unit tests.

Allows overriding of CONF for use of fakes, and some black magic for inline callbacks.

class Database(db_api, db_migrate, sql_connection)

Bases: fixtures.fixture.Fixture

setUp()
class ModelsObjectComparatorMixin

Bases: object

class RPCAPITestCase(*args, **kwargs)

Bases: cinder.test.TestCase, cinder.test.ModelsObjectComparatorMixin

setUp()
class TestCase(*args, **kwargs)

Bases: testtools.testcase.TestCase

Test case base class for all unit tests.

MOCK_WORKER = True
POLICY_PATH = 'cinder/tests/unit/policy.json'
assert_notify_called(mock_notify, calls)
flags(**kw)

Override CONF variables for a test.

mock_object(obj, attr_name, *args, **kwargs)

Use python mock to mock an object attribute

Mocks the specified objects attribute with the given value. Automatically performs ‘addCleanup’ for the mock.

override_config(name, override, group=None)

Cleanly override CONF variables.

patch(path, *args, **kwargs)

Use python mock to mock a path with automatic cleanup.

setUp()

Run before each test method to initialize test environment.

start_service(name, host=None, **kwargs)
exception TestingException

Bases: exceptions.Exception

The cinder.utils Module

Utilities and helper functions.

class ComparableMixin

Bases: object

DO_NOTHING

Class that literrally does nothing.

We inherit from str in case it’s called with json.dumps.

class DoNothing

Bases: str

Class that literrally does nothing.

We inherit from str in case it’s called with json.dumps.

class TraceWrapperMetaclass

Bases: type

Metaclass that wraps all methods of a class with trace_method.

This metaclass will cause every function inside of the class to be decorated with the trace_method decorator.

To use the metaclass you define a class like so: @six.add_metaclass(utils.TraceWrapperMetaclass) class MyClass(object):

class TraceWrapperWithABCMetaclass

Bases: abc.ABCMeta, cinder.utils.TraceWrapperMetaclass

Metaclass that wraps all methods of a class with trace.

add_visible_admin_metadata(volume)

Add user-visible admin metadata to regular metadata.

Extracts the admin metadata keys that are to be made visible to non-administrators, and adds them to the regular metadata structure for the passed-in volume.

as_int(obj, quiet=True)
brick_attach_volume_encryptor(context, attach_info, encryption)

Attach encryption layer.

brick_detach_volume_encryptor(attach_info, encryption)

Detach encryption layer.

brick_get_connector(protocol, driver=None, use_multipath=False, device_scan_attempts=3, *args, **kwargs)

Wrapper to get a brick connector object.

This automatically populates the required protocol as well as the root_helper needed to execute commands.

brick_get_connector_properties(multipath=False, enforce_multipath=False)

Wrapper to automatically set root_helper in brick calls.

Parameters:
  • multipath – A boolean indicating whether the connector can support multipath.
  • enforce_multipath – If True, it raises exception when multipath=True is specified but multipathd is not running. If False, it falls back to multipath=False when multipathd is not running.
brick_get_encryptor(connection_info, *args, **kwargs)

Wrapper to get a brick encryptor object.

build_or_str(elements, str_format=None)

Builds a string of elements joined by ‘or’.

Will join strings with the ‘or’ word and if a str_format is provided it will be used to format the resulted joined string. If there are no elements an empty string will be returned.

Parameters:
  • elements (String or iterable of strings.) – Elements we want to join.
  • str_format (String.) – String to use to format the response.
calculate_virtual_free_capacity(total_capacity, free_capacity, provisioned_capacity, thin_provisioning_support, max_over_subscription_ratio, reserved_percentage, thin)

Calculate the virtual free capacity based on thin provisioning support.

Parameters:
  • total_capacity – total_capacity_gb of a host_state or pool.
  • free_capacity – free_capacity_gb of a host_state or pool.
  • provisioned_capacity – provisioned_capacity_gb of a host_state or pool.
  • thin_provisioning_support – thin_provisioning_support of a host_state or a pool.
  • max_over_subscription_ratio – max_over_subscription_ratio of a host_state or a pool
  • reserved_percentage – reserved_percentage of a host_state or a pool.
  • thin – whether volume to be provisioned is thin
Returns:

the calculated virtual free capacity.

check_exclusive_options(**kwargs)

Checks that only one of the provided options is actually not-none.

Iterates over all the kwargs passed in and checks that only one of said arguments is not-none, if more than one is not-none then an exception will be raised with the names of those arguments who were not-none.

check_metadata_properties(metadata=None)

Checks that the volume metadata properties are valid.

check_ssh_injection(cmd_list)
check_string_length(value, name, min_length=0, max_length=None, allow_all_spaces=True)

Check the length of specified string.

Parameters:
  • value – the value of the string
  • name – the name of the string
  • min_length – the min_length of the string
  • max_length – the max_length of the string
convert_str(text)

Convert to native string.

Convert bytes and Unicode strings to native strings:

  • convert to bytes on Python 2: encode Unicode using encodeutils.safe_encode()
  • convert to Unicode on Python 3: decode bytes from UTF-8
execute(*cmd, **kwargs)

Convenience wrapper around oslo’s execute() method.

get_blkdev_major_minor(path, lookup_for_file=True)

Get ‘major:minor’ number of block device.

Get the device’s ‘major:minor’ number of a block device to control I/O ratelimit of the specified path. If lookup_for_file is True and the path is a regular file, lookup a disk device which the file lies on and returns the result for the device.

get_bool_param(param_string, params)
get_file_gid(path)

This primarily exists to make unit testing easier.

get_file_mode(path)

This primarily exists to make unit testing easier.

get_file_size(path)

Returns the file size.

get_root_helper()
if_notifications_enabled(f)

Calls decorated method only if notifications are enabled.

is_blk_device(dev)
is_none_string(val)

Check if a string represents a None value.

last_completed_audit_period(unit=None)

This method gives you the most recently completed audit period.

arguments:
units: string, one of ‘hour’, ‘day’, ‘month’, ‘year’
Periods normally begin at the beginning (UTC) of the period unit (So a ‘day’ period begins at midnight UTC, a ‘month’ unit on the 1st, a ‘year’ on Jan, 1) unit string may be appended with an optional offset like so: 'day@18‘ This will begin the period at 18:00 UTC. 'month@15‘ starts a monthly period on the 15th, and year@3 begins a yearly one on March 1st.
returns: 2 tuple of datetimes (begin, end)
The begin timestamp of this audit period is the same as the end of the previous.
log_unsupported_driver_warning(driver)

Annoy the log about unsupported drivers.

make_dev_path(dev, partition=None, base='/dev')

Return a path to a particular device.

>>> make_dev_path('xvdc')
/dev/xvdc
>>> make_dev_path('xvdc', 1)
/dev/xvdc1
monkey_patch()

Patches decorators for all functions in a specified module.

If the CONF.monkey_patch set as True, this function patches a decorator for all functions in specified modules.

You can set decorators for each modules using CONF.monkey_patch_modules. The format is “Module path:Decorator function”. Example: ‘cinder.api.ec2.cloud:’ cinder.openstack.common.notifier.api.notify_decorator’

Parameters of the decorator is as follows. (See cinder.openstack.common.notifier.api.notify_decorator)

Parameters:
  • name – name of the function
  • function – object of the function
notifications_enabled(conf)

Check if oslo notifications are enabled.

read_file_as_root(file_path)

Secure helper to read file as root.

remove_invalid_filter_options(context, filters, allowed_search_options)

Remove search options that are not valid for non-admin API/context.

require_driver_initialized(driver)

Verifies if driver is initialized

If the driver is not initialized, an exception will be raised.

Params driver:The driver instance.
Raises:exception.DriverNotInitialized
resolve_hostname(hostname)

Resolves host name to IP address.

Resolves a host name (my.data.point.com) to an IP address (10.12.143.11). This routine also works if the data passed in hostname is already an IP. In this case, the same IP address will be returned.

Parameters:hostname – Host name to resolve.
Returns:IP Address for Host name.
retry(exceptions, interval=1, retries=3, backoff_rate=2, wait_random=False)
robust_file_write(directory, filename, data)

Robust file write.

Use “write to temp file and rename” model for writing the persistence file.

Parameters:
  • directory – Target directory to create a file.
  • filename – File name to store specified data.
  • data – String data.
sanitize_hostname(hostname)

Return a hostname which conforms to RFC-952 and RFC-1123 specs.

service_expired_time(with_timezone=False)
setup_tracing(trace_flags)

Set global variables for each trace flag.

Sets variables TRACE_METHOD and TRACE_API, which represent whether to log method and api traces.

Parameters:trace_flags – a list of strings
tempdir(*args, **kwds)
temporary_chown(*args, **kwds)

Temporarily chown a path.

Params owner_uid:
 UID of temporary owner (defaults to current user)
trace(f)

Trace calls to the decorated function.

This decorator should always be defined as the outermost decorator so it is defined last. This is important so it does not interfere with other decorators.

Using this decorator on a function will cause its execution to be logged at DEBUG level with arguments, return values, and exceptions.

Returns:a function decorator
trace_api(f)

Decorates a function if TRACE_API is true.

trace_method(f)

Decorates a function if TRACE_METHOD is true.

validate_dictionary_string_length(specs)

Check the length of each key and value of dictionary.

validate_integer(value, name, min_value=None, max_value=None)

Make sure that value is a valid integer, potentially within range.

Parameters:
  • value – the value of the integer
  • name – the name of the integer
  • min_length – the min_length of the integer
  • max_length – the max_length of the integer
Returns:

integer

walk_class_hierarchy(clazz, encountered=None)

Walk class hierarchy, yielding most derived classes first.

The cinder.wsgi Module

Tests

The conf_fixture Module

set_defaults(conf)

The test_rpc Module

class FakeAPI

Bases: cinder.rpc.RPCAPI

BINARY = 'cinder-scheduler'
RPC_API_VERSION = '1.5'
TOPIC = 'cinder-scheduler-topic'
class RPCAPITestCase(*args, **kwargs)

Bases: cinder.test.TestCase

Tests RPCAPI mixin aggregating stuff related to RPC compatibility.

setUp()
test_init(*args, **keywargs)
test_init_cached_caps(*args, **keywargs)
test_init_no_notifications_1___()

Test short-circuiting notifications with default and noop driver.

test_init_no_notifications_2___noop__()

Test short-circuiting notifications with default and noop driver.

test_init_no_notifications_3___noop____noop__()

Test short-circuiting notifications with default and noop driver.

test_init_none_caps(*args, **keywargs)

Test that with no service latest versions are selected.

test_init_notifications(*args, **keywargs)