diff options
author | Jenkins <jenkins@review.openstack.org> | 2014-09-09 03:43:46 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2014-09-09 03:43:46 +0000 |
commit | 48847a585757ace607de4ab5f8d8176142a39564 (patch) | |
tree | f49cec9e3190cd28bdd88251bfe6b2d67f486b48 | |
parent | b72ab3e3fe302938cb03a90370815ee551c120e3 (diff) | |
parent | abb4e829fcabeb6debb6158ccb444a265e209b17 (diff) | |
download | oslo-vmware-48847a585757ace607de4ab5f8d8176142a39564.tar.gz |
Merge "Support for copying streamOptimized disk to file"
-rw-r--r-- | oslo/vmware/image_transfer.py | 29 | ||||
-rw-r--r-- | tests/test_image_transfer.py | 29 |
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): |