diff options
author | Vipin Balachandran <vbala@vmware.com> | 2014-08-18 20:28:23 +0530 |
---|---|---|
committer | Vipin Balachandran <vbala@vmware.com> | 2014-08-21 20:43:15 +0530 |
commit | abb4e829fcabeb6debb6158ccb444a265e209b17 (patch) | |
tree | 8d310a57e055be979123309e282e8653671990a9 | |
parent | e434d1b81976378c0971ab645ea789ca484834a6 (diff) | |
download | oslo-vmware-abb4e829fcabeb6debb6158ccb444a265e209b17.tar.gz |
Support for copying streamOptimized disk to file
This patch adds a method for copying virtual disk in streamOptimized
format from VMware datastore to a file.
Change-Id: I1e358e6fe310312515bdcdf014f8beaf7a82256d
-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 a86773d..ffcc583 100644 --- a/oslo/vmware/image_transfer.py +++ b/oslo/vmware/image_transfer.py @@ -495,6 +495,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): |