Handles all requests relating to volumes.
API
(image_service=None)¶Bases: cinder.db.base.Base
API for interacting with the volume manager.
AVAILABLE_MIGRATION_STATUS
= (None, 'deleting', 'error', 'success')¶accept_transfer
(context: cinder.context.RequestContext, volume: cinder.objects.volume.Volume, new_user: str, new_project: str, no_snapshots: bool = False) → dict¶attach
(context: cinder.context.RequestContext, volume: cinder.objects.volume.Volume, instance_uuid: str, host_name: str, mountpoint: str, mode: str) → cinder.objects.volume_attachment.VolumeAttachment¶attachment_create
(ctxt: cinder.context.RequestContext, volume_ref: cinder.objects.volume.Volume, instance_uuid: str, connector: Optional[dict] = None, attach_mode: Optional[str] = 'null') → cinder.objects.volume_attachment.VolumeAttachment¶Create an attachment record for the specified volume.
attachment_delete
(ctxt: cinder.context.RequestContext, attachment) → cinder.objects.volume_attachment.VolumeAttachmentList¶attachment_deletion_allowed
(ctxt: cinder.context.RequestContext, attachment_or_attachment_id, volume=None)¶Check if deleting an attachment is allowed (Bug #2004555)
Allowed is based on the REST API policy, the status of the attachment, where it is used, and who is making the request.
Deleting an attachment on the Cinder side while leaving the volume connected to the nova host results in leftover devices that can lead to data leaks/corruption.
OS-Brick may have code to detect it, but in some cases it is detected after it has already been exposed, so it’s better to prevent users from being able to intentionally triggering the issue.
attachment_update
(ctxt: cinder.context.RequestContext, attachment_ref: cinder.objects.volume_attachment.VolumeAttachment, connector) → cinder.objects.volume_attachment.VolumeAttachment¶Update an existing attachment record.
begin_detaching
(context: cinder.context.RequestContext, volume: cinder.objects.volume.Volume) → None¶calculate_resource_count
(context: cinder.context.RequestContext, resource_type: str, filters: Optional[dict]) → int¶check_volume_filters
(filters: dict, strict: bool = False) → None¶Sets the user filter value to accepted format
copy_volume_to_image
(context: cinder.context.RequestContext, volume: cinder.objects.volume.Volume, metadata: dict, force: bool) → dict¶Create a new image from the specified volume.
create
(context: cinder.context.RequestContext, size: Union[str, int], name: Optional[str], description: Optional[str], snapshot: Optional[cinder.objects.snapshot.Snapshot] = None, image_id: Optional[str] = None, volume_type: Optional[cinder.objects.volume_type.VolumeType] = None, metadata: Optional[dict] = None, availability_zone: Optional[str] = None, source_volume: Optional[cinder.objects.volume.Volume] = None, scheduler_hints=None, source_replica=None, consistencygroup: Optional[cinder.objects.consistencygroup.ConsistencyGroup] = None, cgsnapshot: Optional[cinder.objects.cgsnapshot.CGSnapshot] = None, source_cg=None, group: Optional[cinder.objects.group.Group] = None, group_snapshot=None, source_group=None, backup: Optional[cinder.objects.backup.Backup] = None)¶create_snapshot
(context: cinder.context.RequestContext, volume: cinder.objects.volume.Volume, name: str, description: str, metadata: Optional[dict] = None, cgsnapshot_id: Optional[str] = None, group_snapshot_id: Optional[str] = None, allow_in_use: bool = False) → cinder.objects.snapshot.Snapshot¶create_snapshot_force
(context: cinder.context.RequestContext, volume: cinder.objects.volume.Volume, name: str, description: str, metadata: Optional[dict] = None) → cinder.objects.snapshot.Snapshot¶create_snapshot_in_db
(context: cinder.context.RequestContext, volume: cinder.objects.volume.Volume, name: Optional[str], description: Optional[str], force: bool, metadata: Optional[dict], cgsnapshot_id: Optional[str], commit_quota: bool = True, group_snapshot_id: Optional[str] = None, allow_in_use: bool = False) → cinder.objects.snapshot.Snapshot¶create_snapshots_in_db
(context: cinder.context.RequestContext, volume_list: list, name: str, description: str, cgsnapshot_id: str, group_snapshot_id: Optional[str] = None) → list¶create_volume_metadata
(context: cinder.context.RequestContext, volume: cinder.objects.volume.Volume, metadata: dict) → dict¶Creates volume metadata.
delete
(context: cinder.context.RequestContext, volume: cinder.objects.volume.Volume, force: bool = False, unmanage_only: bool = False, cascade: bool = False) → None¶delete_snapshot
(context: cinder.context.RequestContext, snapshot: cinder.objects.snapshot.Snapshot, force: bool = False, unmanage_only: bool = False) → None¶delete_snapshot_metadata
(context: cinder.context.RequestContext, snapshot: cinder.objects.snapshot.Snapshot, key: str) → None¶Delete the given metadata item from a snapshot.
delete_volume_metadata
(context: cinder.context.RequestContext, volume: cinder.objects.volume.Volume, key: str, meta_type=<METADATA_TYPES.user: 1>) → None¶Delete the given metadata item from a volume.
detach
(context: cinder.context.RequestContext, volume: cinder.objects.volume.Volume, attachment_id: str) → None¶extend
(context: cinder.context.RequestContext, volume: cinder.objects.volume.Volume, new_size: int) → None¶extend_attached_volume
(context: cinder.context.RequestContext, volume: cinder.objects.volume.Volume, new_size: int) → None¶failover
(ctxt: cinder.context.RequestContext, host: str, cluster_name: str, secondary_id: Optional[str] = None) → None¶freeze_host
(ctxt: cinder.context.RequestContext, host: str, cluster_name: str) → None¶get
(context: cinder.context.RequestContext, volume_id: str, viewable_admin_meta: bool = False) → cinder.objects.volume.Volume¶get_all
(context: cinder.context.RequestContext, marker: Optional[str] = None, limit: Optional[int] = None, sort_keys: Optional[Iterable[str]] = None, sort_dirs: Optional[Iterable[str]] = None, filters: Optional[dict] = None, viewable_admin_meta: bool = False, offset: Optional[int] = None) → cinder.objects.volume.VolumeList¶get_all_snapshots
(context: cinder.context.RequestContext, search_opts: Optional[dict] = None, marker: Optional[str] = None, limit: Optional[int] = None, sort_keys: Optional[list] = None, sort_dirs: Optional[list] = None, offset: Optional[int] = None) → cinder.objects.snapshot.SnapshotList¶get_list_volumes_image_metadata
(context: cinder.context.RequestContext, volume_id_list: list) → DefaultDict[str, str]¶get_manageable_snapshots
(context: cinder.context.RequestContext, host: str, cluster_name: Optional[str], marker: Optional[str] = None, limit: Optional[int] = None, offset: Optional[int] = None, sort_keys: Optional[list] = None, sort_dirs: Optional[list] = None) → list¶get_manageable_volumes
(context: cinder.context.RequestContext, host: str, cluster_name, marker: Optional[str] = None, limit: Optional[int] = None, offset: Optional[int] = None, sort_keys: Optional[list] = None, sort_dirs: Optional[list] = None)¶get_snapshot
(context: cinder.context.RequestContext, snapshot_id: str) → cinder.objects.snapshot.Snapshot¶get_snapshot_metadata
(context: cinder.context.RequestContext, snapshot: cinder.objects.snapshot.Snapshot) → dict¶Get all metadata associated with a snapshot.
get_volume
(context: cinder.context.RequestContext, volume_id: str) → cinder.objects.volume.Volume¶get_volume_image_metadata
(context: cinder.context.RequestContext, volume: cinder.objects.volume.Volume) → dict¶get_volume_metadata
(context: cinder.context.RequestContext, volume: cinder.objects.volume.Volume) → dict¶Get all metadata associated with a volume.
get_volume_summary
(context: cinder.context.RequestContext, filters: Optional[dict] = None) → cinder.objects.volume.VolumeList¶get_volumes_image_metadata
(context: cinder.context.RequestContext) → collections.defaultdict¶initialize_connection
(context: cinder.context.RequestContext, volume: cinder.objects.volume.Volume, connector: dict) → dict¶is_service_request
(ctxt: cinder.context.RequestContext) → bool¶Check if a request is coming from a service
A request is coming from a service if it has a service token and the service user has one of the roles configured in the service_token_roles configuration option in the [keystone_authtoken] section (defaults to service).
list_availability_zones
(enable_cache: bool = False, refresh_cache: bool = False) → tuple¶Describe the known availability zones
enable_cache – Enable az cache
refresh_cache – Refresh cache immediately
tuple of dicts, each with a ‘name’ and ‘available’ key
manage_existing
(context: cinder.context.RequestContext, host: str, cluster_name: Optional[str], ref: dict, name: Optional[str] = None, description: Optional[str] = None, volume_type: Optional[cinder.objects.volume_type.VolumeType] = None, metadata: Optional[dict] = None, availability_zone: Optional[str] = None, bootable: Optional[bool] = False) → cinder.objects.volume.Volume¶manage_existing_snapshot
(context: cinder.context.RequestContext, ref: dict, volume: cinder.objects.volume.Volume, name: Optional[str] = None, description: Optional[str] = None, metadata: Optional[dict] = None) → cinder.objects.snapshot.Snapshot¶migrate_volume
(context: cinder.context.RequestContext, volume: cinder.objects.volume.Volume, host: str, cluster_name: str, force_copy: bool, lock_volume: bool) → None¶Migrate the volume to the specified host or cluster.
migrate_volume_completion
(context: cinder.context.RequestContext, volume: cinder.objects.volume.Volume, new_volume: cinder.objects.volume.Volume, error: bool) → str¶reimage
(context, volume, image_id, reimage_reserved=False)¶reserve_volume
(context: cinder.context.RequestContext, volume: cinder.objects.volume.Volume) → None¶retype
(context: cinder.context.RequestContext, volume: cinder.objects.volume.Volume, new_type: Union[str, cinder.objects.volume_type.VolumeType], migration_policy: Optional[str] = None) → None¶Attempt to modify the type associated with an existing volume.
revert_to_snapshot
(context: cinder.context.RequestContext, volume: cinder.objects.volume.Volume, snapshot: cinder.objects.snapshot.Snapshot) → None¶revert a volume to a snapshot
roll_detaching
(context: cinder.context.RequestContext, volume: cinder.objects.volume.Volume) → None¶terminate_connection
(context: cinder.context.RequestContext, volume: cinder.objects.volume.Volume, connector: dict, force: bool = False) → None¶thaw_host
(ctxt: cinder.context.RequestContext, host: str, cluster_name: str) → Optional[str]¶unreserve_volume
(context: cinder.context.RequestContext, volume: cinder.objects.volume.Volume) → None¶update
(context: cinder.context.RequestContext, volume: cinder.objects.volume.Volume, fields: dict) → None¶update_readonly_flag
(context: cinder.context.RequestContext, volume: cinder.objects.volume.Volume, flag) → None¶update_snapshot
(context: cinder.context.RequestContext, snapshot: cinder.objects.snapshot.Snapshot, fields: dict) → None¶update_snapshot_metadata
(context: cinder.context.RequestContext, snapshot: cinder.objects.snapshot.Snapshot, metadata: dict, delete: bool = False) → dict¶Updates or creates snapshot metadata.
If delete is True, metadata items that are not specified in the metadata argument will be deleted.
update_volume_admin_metadata
(context: cinder.context.RequestContext, volume: cinder.objects.volume.Volume, metadata: dict, delete: Optional[bool] = False, add: Optional[bool] = True, update: Optional[bool] = True) → dict¶Updates or creates volume administration metadata.
If delete is True, metadata items that are not specified in the metadata argument will be deleted.
update_volume_metadata
(context: cinder.context.RequestContext, volume: cinder.objects.volume.Volume, metadata: dict, delete: bool = False, meta_type=<METADATA_TYPES.user: 1>) → dict¶Updates volume metadata.
If delete is True, metadata items that are not specified in the metadata argument will be deleted.
HostAPI
¶Bases: cinder.db.base.Base
Sub-set of the Volume Manager API for managing host operations.
set_host_enabled
(context, host, enabled)¶Sets the specified host’s ability to accept new volumes.
Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.