The cinder.volume.drivers.vmware.volumeops Module

Implements operations on volumes residing on VMware datastores.

class ControllerType

Bases: object

Encapsulate various controller types.

BUS_LOGIC = 'VirtualBusLogicController'
CONTROLLER_TYPE_DICT = {'paraVirtual': 'ParaVirtualSCSIController', 'ide': 'VirtualIDEController', 'busLogic': 'VirtualBusLogicController', 'lsiLogicsas': 'VirtualLsiLogicSASController', 'lsiLogic': 'VirtualLsiLogicController'}
IDE = 'VirtualIDEController'
LSI_LOGIC = 'VirtualLsiLogicController'
LSI_LOGIC_SAS = 'VirtualLsiLogicSASController'
PARA_VIRTUAL = 'ParaVirtualSCSIController'
static get_controller_type(adapter_type)

Get the disk controller type based on the given adapter type.

Parameters:adapter_type – disk adapter type
Returns:controller type corresponding to the given adapter type
Raises:InvalidAdapterTypeException
static is_scsi_controller(controller_type)

Check if the given controller is a SCSI controller.

Parameters:controller_type – controller type
Returns:True if the controller is a SCSI controller
class FlatExtentVirtualDiskPath(ds_name, folder_path, disk_name)

Bases: cinder.volume.drivers.vmware.volumeops.VirtualDiskPath

Paths of files in a non-monolithic disk with a single flat extent.

get_flat_extent_ds_file_path()

Get datastore file path of the flat extent.

get_flat_extent_file_path()

Get absolute file path of the flat extent.

class MonolithicSparseVirtualDiskPath(ds_name, folder_path, disk_name)

Bases: cinder.volume.drivers.vmware.volumeops.VirtualDiskPath

Paths of file comprising a monolithic sparse disk.

class VMwareVolumeOps(session, max_objects)

Bases: object

Manages volume operations.

attach_disk_to_backing(backing, size_in_kb, disk_type, adapter_type, profile_id, vmdk_ds_file_path)

Attach an existing virtual disk to the backing VM.

Parameters:
  • backing – reference to the backing VM
  • size_in_kb – disk size in KB
  • disk_type – virtual disk type
  • adapter_type – disk adapter type
  • profile_id – storage policy profile identification
  • vmdk_ds_file_path – datastore file path of the virtual disk to be attached
cancel_retrieval(retrieve_result)

Cancel retrieval of results if necessary.

Parameters:retrieve_result – Result from RetrievePropertiesEx
change_backing_profile(backing, profile_id)

Change storage profile of the backing VM.

The current profile is removed if the new profile is None.

clone_backing(name, backing, snapshot, clone_type, datastore, disk_type=None, host=None, resource_pool=None, extra_config=None, folder=None)

Clone backing.

If the clone_type is ‘full’, then a full clone of the source volume backing will be created. Else, if it is ‘linked’, then a linked clone of the source volume backing will be created.

Parameters:
  • name – Name for the clone
  • backing – Reference to the backing entity
  • snapshot – Snapshot point from which the clone should be done
  • clone_type – Whether a full clone or linked clone is to be made
  • datastore – Reference to the datastore entity
  • disk_type – Disk type of the clone
  • host – Target host
  • resource_pool – Target resource pool
  • extra_config – Key-value pairs to be written to backing’s extra-config
  • folder – The location of the clone
continue_retrieval(retrieve_result)

Continue retrieval of results if necessary.

Parameters:retrieve_result – Result from RetrievePropertiesEx
copy_vmdk_file(src_dc_ref, src_vmdk_file_path, dest_vmdk_file_path, dest_dc_ref=None)

Copy contents of the src vmdk file to dest vmdk file.

Parameters:
  • src_dc_ref – Reference to datacenter containing src datastore
  • src_vmdk_file_path – Source vmdk file path
  • dest_vmdk_file_path – Destination vmdk file path
  • dest_dc_ref – Reference to datacenter of dest datastore. If unspecified, source datacenter is used.
create_backing(name, size_kb, disk_type, folder, resource_pool, host, ds_name, profileId=None, adapter_type='lsiLogic', extra_config=None)

Create backing for the volume.

Creates a VM with one VMDK based on the given inputs.

Parameters:
  • name – Name of the backing
  • size_kb – Size in KB of the backing
  • disk_type – VMDK type for the disk
  • folder – Folder, where to create the backing under
  • resource_pool – Resource pool reference
  • host – Host reference
  • ds_name – Datastore name where the disk is to be provisioned
  • profileId – Storage profile ID to be associated with backing
  • adapter_type – Disk adapter type
  • extra_config – Key-value pairs to be written to backing’s extra-config
Returns:

Reference to the created backing entity

create_backing_disk_less(name, folder, resource_pool, host, ds_name, profileId=None, extra_config=None)

Create disk-less volume backing.

This type of backing is useful for creating volume from image. The downloaded image from the image service can be copied to a virtual disk of desired provisioning type and added to the backing VM.

Parameters:
  • name – Name of the backing
  • folder – Folder where the backing is created
  • resource_pool – Resource pool reference
  • host – Host reference
  • ds_name – Name of the datastore used for VM storage
  • profileId – Storage profile ID to be associated with backing
  • extra_config – Key-value pairs to be written to backing’s extra-config
Returns:

Reference to the created backing entity

create_datastore_folder(ds_name, folder_path, datacenter)

Creates a datastore folder.

This method returns silently if the folder already exists.

Parameters:
  • ds_name – datastore name
  • folder_path – path of folder to create
  • datacenter – datacenter of target datastore
create_flat_extent_virtual_disk_descriptor(dc_ref, path, size_in_kb, adapter_type, disk_type)

Create descriptor for a single flat extent virtual disk.

To create the descriptor, we create a virtual disk and delete its flat extent.

Parameters:
  • dc_ref – reference to the datacenter
  • path – descriptor datastore file path
  • size_in_kb – size of the virtual disk in KB
  • adapter_type – virtual disk adapter type
  • disk_type – type of the virtual disk
create_folder(parent_folder, child_folder_name)

Creates child folder under the given parent folder.

Parameters:
  • parent_folder – Reference to the parent folder
  • child_folder_name – Name of the child folder
Returns:

Reference to the child folder

create_snapshot(backing, name, description, quiesce=False)

Create snapshot of the backing with given name and description.

Parameters:
  • backing – Reference to the backing entity
  • name – Snapshot name
  • description – Snapshot description
  • quiesce – Whether to quiesce the backing when taking snapshot
Returns:

Created snapshot entity reference

create_virtual_disk(dc_ref, vmdk_ds_file_path, size_in_kb, adapter_type='busLogic', disk_type='preallocated')

Create virtual disk with the given settings.

Parameters:
  • dc_ref – datacenter reference
  • vmdk_ds_file_path – datastore file path of the virtual disk
  • size_in_kb – disk size in KB
  • adapter_type – disk adapter type
  • disk_type – vmdk type
create_vm_inventory_folder(datacenter, path_comp)

Create and return a VM inventory folder.

This method caches references to inventory folders returned.

Parameters:
  • datacenter – Reference to datacenter
  • path_comp – Path components as a list
delete_backing(backing)

Delete the backing.

Parameters:backing – Managed object reference to the backing
delete_file(file_path, datacenter=None)

Delete file or folder on the datastore.

Parameters:file_path – Datastore path of the file or folder
delete_snapshot(backing, name)

Delete a given snapshot from volume backing.

Parameters:
  • backing – Reference to the backing entity
  • name – Snapshot name
delete_vmdk_file(vmdk_file_path, dc_ref)

Delete given vmdk files.

Parameters:
  • vmdk_file_path – VMDK file path to be deleted
  • dc_ref – Reference to datacenter that contains this VMDK file
detach_disk_from_backing(backing, disk_device)

Detach the given disk from backing.

extend_virtual_disk(requested_size_in_gb, path, dc_ref, eager_zero=False)

Extend the virtual disk to the requested size.

Parameters:
  • requested_size_in_gb – Size of the volume in GB
  • path – Datastore path of the virtual disk to extend
  • dc_ref – Reference to datacenter
  • eager_zero – Boolean determining if the free space is zeroed out
get_backing(name)

Get the backing based on name.

Parameters:name – Name of the backing
Returns:Managed object reference to the backing
get_cluster_hosts(cluster)

Get hosts in the given cluster.

Parameters:cluster – cluster reference
Returns:references to hosts in the cluster
get_cluster_refs(names)

Get references to given clusters.

Parameters:names – list of cluster names
Returns:Dictionary of cluster names to references
get_connected_hosts(datastore)

Get all the hosts to which the datastore is connected and usable.

The datastore is considered to be usable for a host only if it is writable, mounted and accessible.

Parameters:datastore – Reference to the datastore entity
Returns:List of managed object references of all connected hosts
get_create_spec(name, size_kb, disk_type, ds_name, profile_id=None, adapter_type='lsiLogic', extra_config=None)

Return spec for creating backing with a single disk.

Parameters:
  • name – name of the backing
  • size_kb – disk size in KB
  • disk_type – disk provisioning type
  • ds_name – datastore name where the disk is to be provisioned
  • profile_id – storage policy profile identification
  • adapter_type – disk adapter type
  • extra_config – key-value pairs to be written to backing’s extra-config
Returns:

spec for creation

get_datastore(backing)

Get datastore where the backing resides.

Parameters:backing – Reference to the backing
Returns:Datastore reference to which the backing belongs
get_dc(child)

Get parent datacenter up the hierarchy via ‘parent’ property.

Parameters:child – Reference of the child entity
Returns:Parent Datacenter of the param child entity
get_disk_device(vm, vmdk_path)

Get the disk device of the VM which corresponds to the given path.

Parameters:
  • vm – VM reference
  • vmdk_path – Datastore path of virtual disk
Returns:

Matching disk device

get_disk_size(backing)

Get disk size of the backing.

Parameters:backing – backing VM reference
Returns:disk size in bytes
get_entity_by_inventory_path(path)

Returns the managed object identified by the given inventory path.

Parameters:path – Inventory path
Returns:Reference to the managed object
get_entity_name(entity)

Get name of the managed entity.

Parameters:entity – Reference to the entity
Returns:Name of the managed entity
get_host(instance)

Get host under which instance is present.

Parameters:instance – Managed object reference of the instance VM
Returns:Host managing the instance VM
get_hosts()

Get all host from the inventory.

Returns:All the hosts from the inventory
get_path_name(backing)

Get path name of the backing.

Parameters:backing – Reference to the backing entity
Returns:Path name of the backing
get_profile(backing)

Query storage profile associated with the given backing.

Parameters:backing – backing reference
Returns:profile name
get_snapshot(backing, name)

Get snapshot of the backing with given name.

Parameters:
  • backing – Reference to the backing entity
  • name – Snapshot name
Returns:

Snapshot entity of the backing with given name

get_summary(datastore)

Get datastore summary.

Parameters:datastore – Reference to the datastore
Returns:‘summary’ property of the datastore
get_vmdk_path(backing)

Get the vmdk file name of the backing.

The vmdk file path of the backing returned is of the form: “[datastore1] my_folder/my_vm.vmdk”

Parameters:backing – Reference to the backing
Returns:VMDK file path of the backing
get_vmfolder(datacenter)

Get the vmFolder.

Parameters:datacenter – Reference to the datacenter entity
Returns:vmFolder property of the datacenter
is_datastore_accessible(datastore, host)

Check if the datastore is accessible to the given host.

Parameters:datastore – datastore reference
Returns:True if the datastore is accessible
move_backing_to_folder(backing, folder)

Move the volume backing to the folder.

Parameters:
  • backing – Reference to the backing
  • folder – Reference to the folder
move_vmdk_file(src_dc_ref, src_vmdk_file_path, dest_vmdk_file_path, dest_dc_ref=None)

Move the given vmdk file to another datastore location.

Parameters:
  • src_dc_ref – Reference to datacenter containing src datastore
  • src_vmdk_file_path – Source vmdk file path
  • dest_vmdk_file_path – Destination vmdk file path
  • dest_dc_ref – Reference to datacenter of dest datastore. If unspecified, source datacenter is used.
relocate_backing(backing, datastore, resource_pool, host, disk_type=None)

Relocates backing to the input datastore and resource pool.

The implementation uses moveAllDiskBackingsAndAllowSharing disk move type.

Parameters:
  • backing – Reference to the backing
  • datastore – Reference to the datastore
  • resource_pool – Reference to the resource pool
  • host – Reference to the host
  • disk_type – destination disk type
rename_backing(backing, new_name)

Rename backing VM.

Parameters:
  • backing – VM to be renamed
  • new_name – new VM name
snapshot_exists(backing)

Check if the given backing contains snapshots.

update_backing_disk_uuid(backing, disk_uuid)

Update backing VM’s disk UUID.

Parameters:
  • backing – Reference to backing VM
  • disk_uuid – New disk UUID
update_backing_extra_config(backing, extra_config)
update_backing_uuid(backing, uuid)
class VirtualDiskAdapterType

Bases: object

Supported virtual disk adapter types.

BUS_LOGIC = 'busLogic'
IDE = 'ide'
LSI_LOGIC = 'lsiLogic'
LSI_LOGIC_SAS = 'lsiLogicsas'
PARA_VIRTUAL = 'paraVirtual'
static get_adapter_type(extra_spec_adapter)

Get the adapter type to be used in VirtualDiskSpec.

Parameters:extra_spec_adapter – adapter type in the extra_spec
Returns:adapter type to be used in VirtualDiskSpec
static is_valid(adapter_type)

Check if the given adapter type is valid.

Parameters:adapter_type – adapter type to check
Returns:True if valid
static validate(extra_spec_adapter_type)

Validate the given adapter type in extra_spec.

This method throws an instance of InvalidAdapterTypeException if the given adapter type is invalid.

Parameters:extra_spec_adapter_type – adapter type in extra_spec
Raises:InvalidAdapterTypeException
class VirtualDiskPath(ds_name, folder_path, disk_name)

Bases: object

Class representing paths of files comprising a virtual disk.

get_datastore_file_path(ds_name, file_path)

Get datastore path corresponding to the given file path.

Parameters:
  • ds_name – name of the datastore containing the file represented by the given file path
  • file_path – absolute path of the file
Returns:

datastore file path

get_descriptor_ds_file_path()

Get datastore file path of the virtual disk descriptor.

get_descriptor_file_path()

Get absolute file path of the virtual disk descriptor.

class VirtualDiskType

Bases: object

Supported virtual disk types.

EAGER_ZEROED_THICK = 'eagerZeroedThick'
EXTRA_SPEC_DISK_TYPE_DICT = {'thick': 'preallocated', 'eagerZeroedThick': 'eagerZeroedThick', 'thin': 'thin'}
PREALLOCATED = 'preallocated'
THIN = 'thin'
static get_virtual_disk_type(extra_spec_disk_type)

Return disk type corresponding to the extra_spec disk type.

Parameters:extra_spec_disk_type – disk type in extra_spec
Returns:virtual disk type
Raises:InvalidDiskTypeException
static is_valid(extra_spec_disk_type)

Check if the given disk type in extra_spec is valid.

Parameters:extra_spec_disk_type – disk type in extra_spec
Returns:True if valid
static validate(extra_spec_disk_type)

Validate the given disk type in extra_spec.

This method throws an instance of InvalidDiskTypeException if the given disk type is invalid.

Parameters:extra_spec_disk_type – disk type in extra_spec
Raises:InvalidDiskTypeException
split_datastore_path(datastore_path)

Split the datastore path to components.

return the datastore name, relative folder path and the file name

E.g. datastore_path = [datastore1] my_volume/my_volume.vmdk, returns (datastore1, my_volume/, my_volume.vmdk)

Parameters:datastore_path – Datastore path of a file
Returns:Parsed datastore name, relative folder path and file name