summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2014-09-09 03:43:46 +0000
committerGerrit Code Review <review@openstack.org>2014-09-09 03:43:46 +0000
commit48847a585757ace607de4ab5f8d8176142a39564 (patch)
treef49cec9e3190cd28bdd88251bfe6b2d67f486b48
parentb72ab3e3fe302938cb03a90370815ee551c120e3 (diff)
parentabb4e829fcabeb6debb6158ccb444a265e209b17 (diff)
downloadoslo-vmware-48847a585757ace607de4ab5f8d8176142a39564.tar.gz
Merge "Support for copying streamOptimized disk to file"
-rw-r--r--oslo/vmware/image_transfer.py29
-rw-r--r--tests/test_image_transfer.py29
2 files changed, 58 insertions, 0 deletions
diff --git a/oslo/vmware/image_transfer.py b/oslo/vmware/image_transfer.py
index fde72e7..1c2f58b 100644
--- a/oslo/vmware/image_transfer.py
+++ b/oslo/vmware/image_transfer.py
@@ -494,6 +494,35 @@ def download_stream_optimized_image(context, timeout_secs, image_service,
return imported_vm
+def copy_stream_optimized_disk(
+ context, timeout_secs, write_handle, **kwargs):
+ """Copy virtual disk from VMware server to the given write handle.
+
+ :param context: context
+ :param timeout_secs: time in seconds to wait for the copy to complete
+ :param write_handle: copy destination
+ :param kwargs: keyword arguments to configure the source
+ VMDK read handle
+ :raises: VimException, VimFaultException, VimAttributeException,
+ VimSessionOverLoadException, VimConnectionException,
+ ImageTransferException, ValueError
+ """
+ vmdk_file_path = kwargs.get('vmdk_file_path')
+ LOG.debug("Copying virtual disk: %(vmdk_path)s to %(dest)s.",
+ {'vmdk_path': vmdk_file_path,
+ 'dest': write_handle.name})
+ file_size = kwargs.get('vmdk_size')
+ read_handle = rw_handles.VmdkReadHandle(kwargs.get('session'),
+ kwargs.get('host'),
+ kwargs.get('port'),
+ kwargs.get('vm'),
+ kwargs.get('vmdk_file_path'),
+ file_size)
+ _start_transfer(context, timeout_secs, read_handle, file_size,
+ write_file_handle=write_handle)
+ LOG.debug("Downloaded virtual disk: %s.", vmdk_file_path)
+
+
def upload_image(context, timeout_secs, image_service, image_id, owner_id,
**kwargs):
"""Upload the VM's disk file to image service.
diff --git a/tests/test_image_transfer.py b/tests/test_image_transfer.py
index 1965cd9..969e4f4 100644
--- a/tests/test_image_transfer.py
+++ b/tests/test_image_transfer.py
@@ -452,6 +452,35 @@ class ImageTransferUtilityTest(base.TestCase):
vm_import_spec=vm_import_spec,
image_size=image_size)
+ @mock.patch.object(image_transfer, '_start_transfer')
+ @mock.patch('oslo.vmware.rw_handles.VmdkReadHandle')
+ def test_copy_stream_optimized_disk(
+ self, vmdk_read_handle, start_transfer):
+
+ read_handle = mock.sentinel.read_handle
+ vmdk_read_handle.return_value = read_handle
+
+ context = mock.sentinel.context
+ timeout = mock.sentinel.timeout
+ write_handle = mock.Mock(name='/cinder/images/tmpAbcd.vmdk')
+ session = mock.sentinel.session
+ host = mock.sentinel.host
+ port = mock.sentinel.port
+ vm = mock.sentinel.vm
+ vmdk_file_path = mock.sentinel.vmdk_file_path
+ vmdk_size = mock.sentinel.vmdk_size
+
+ image_transfer.copy_stream_optimized_disk(
+ context, timeout, write_handle, session=session, host=host,
+ port=port, vm=vm, vmdk_file_path=vmdk_file_path,
+ vmdk_size=vmdk_size)
+
+ vmdk_read_handle.assert_called_once_with(
+ session, host, port, vm, vmdk_file_path, vmdk_size)
+ start_transfer.assert_called_once_with(
+ context, timeout, read_handle, vmdk_size,
+ write_file_handle=write_handle)
+
@mock.patch('oslo.vmware.rw_handles.VmdkReadHandle')
@mock.patch.object(image_transfer, '_start_transfer')
def test_upload_image(self, fake_transfer, fake_rw_handles_VmdkReadHandle):