summaryrefslogtreecommitdiff
path: root/cinder/volume/drivers/vmware/volumeops.py
diff options
context:
space:
mode:
Diffstat (limited to 'cinder/volume/drivers/vmware/volumeops.py')
-rw-r--r--cinder/volume/drivers/vmware/volumeops.py43
1 files changed, 35 insertions, 8 deletions
diff --git a/cinder/volume/drivers/vmware/volumeops.py b/cinder/volume/drivers/vmware/volumeops.py
index 44d6e7685..e401f7126 100644
--- a/cinder/volume/drivers/vmware/volumeops.py
+++ b/cinder/volume/drivers/vmware/volumeops.py
@@ -1183,6 +1183,28 @@ class VMwareVolumeOps(object):
self._session.wait_for_task(task)
LOG.info(_LI("Successfully deleted file: %s."), file_path)
+ def create_datastore_folder(self, ds_name, folder_path, datacenter):
+ """Creates a datastore folder.
+
+ This method returns silently if the folder already exists.
+
+ :param ds_name: datastore name
+ :param folder_path: path of folder to create
+ :param datacenter: datacenter of target datastore
+ """
+ fileManager = self._session.vim.service_content.fileManager
+ ds_folder_path = "[%s] %s" % (ds_name, folder_path)
+ LOG.debug("Creating datastore folder: %s.", ds_folder_path)
+ try:
+ self._session.invoke_api(self._session.vim,
+ 'MakeDirectory',
+ fileManager,
+ name=ds_folder_path,
+ datacenter=datacenter)
+ LOG.info(_LI("Created datastore folder: %s."), folder_path)
+ except exceptions.FileAlreadyExistsException:
+ LOG.debug("Datastore folder: %s already exists.", folder_path)
+
def get_path_name(self, backing):
"""Get path name of the backing.
@@ -1308,26 +1330,31 @@ class VMwareVolumeOps(object):
LOG.debug("Created descriptor: %s.",
path.get_descriptor_ds_file_path())
- def copy_vmdk_file(self, dc_ref, src_vmdk_file_path, dest_vmdk_file_path):
+ def copy_vmdk_file(self, 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.
- During the copy also coalesce snapshots of src if present.
- dest_vmdk_file_path will be created if not already present.
-
- :param dc_ref: Reference to datacenter containing src and dest
+ :param src_dc_ref: Reference to datacenter containing src datastore
:param src_vmdk_file_path: Source vmdk file path
:param dest_vmdk_file_path: Destination vmdk file path
+ :param dest_dc_ref: Reference to datacenter of dest datastore.
+ If unspecified, source datacenter is used.
"""
- LOG.debug('Copying disk data before snapshot of the VM')
+ LOG.debug('Copying disk: %(src)s to %(dest)s.',
+ {'src': src_vmdk_file_path,
+ 'dest': dest_vmdk_file_path})
+
+ dest_dc_ref = dest_dc_ref or src_dc_ref
diskMgr = self._session.vim.service_content.virtualDiskManager
task = self._session.invoke_api(self._session.vim,
'CopyVirtualDisk_Task',
diskMgr,
sourceName=src_vmdk_file_path,
- sourceDatacenter=dc_ref,
+ sourceDatacenter=src_dc_ref,
destName=dest_vmdk_file_path,
- destDatacenter=dc_ref,
+ destDatacenter=dest_dc_ref,
force=True)
+
LOG.debug("Initiated copying disk data via task: %s.", task)
self._session.wait_for_task(task)
LOG.info(_LI("Successfully copied disk at: %(src)s to: %(dest)s."),