Esempio n. 1
0
 def test_update_progress_with_error(self):
     session = self._create_mock_session(True, 10)
     handle = rw_handles.VmdkWriteHandle(session, '10.1.2.3', 443,
                                         'rp-1', 'folder-1', None,
                                         100)
     session.invoke_api.side_effect = exceptions.VimException(None)
     self.assertRaises(exceptions.VimException, handle.update_progress)
Esempio n. 2
0
def download_stream_optimized_data(context, timeout_secs, read_handle,
                                   **kwargs):
    """Download stream optimized data to VMware server.

    :param context: image service write context
    :param timeout_secs: time in seconds to wait for the download to complete
    :param read_handle: handle from which to read the image data
    :param kwargs: keyword arguments to configure the destination
                   VMDK write handle
    :returns: managed object reference of the VM created for import to VMware
              server
    :raises: VimException, VimFaultException, VimAttributeException,
             VimSessionOverLoadException, VimConnectionException,
             ImageTransferException, ValueError
    """
    file_size = int(kwargs.get('image_size'))
    write_handle = rw_handles.VmdkWriteHandle(kwargs.get('session'),
                                              kwargs.get('host'),
                                              kwargs.get('port'),
                                              kwargs.get('resource_pool'),
                                              kwargs.get('vm_folder'),
                                              kwargs.get('vm_import_spec'),
                                              file_size)
    _start_transfer(context,
                    timeout_secs,
                    read_handle,
                    file_size,
                    write_file_handle=write_handle)
    return write_handle.get_imported_vm()
Esempio n. 3
0
 def test_update_progress(self):
     vmdk_size = 100
     data_size = 10
     session = self._create_mock_session(True, 10)
     handle = rw_handles.VmdkWriteHandle(session, '10.1.2.3', 443,
                                         'rp-1', 'folder-1', None,
                                         vmdk_size)
     handle.write([1] * data_size)
     handle.update_progress()
Esempio n. 4
0
 def test_write(self):
     session = self._create_mock_session()
     handle = rw_handles.VmdkWriteHandle(session, '10.1.2.3', 443,
                                         'rp-1', 'folder-1', None,
                                         100)
     data = [1] * 10
     handle.write(data)
     self.assertEqual(len(data), handle._bytes_written)
     self._conn.send.assert_called_once_with(data)
 def test_init_failure(self):
     session = self._create_mock_session(False)
     self.assertRaises(exceptions.VimException,
                       lambda: rw_handles.VmdkWriteHandle(session,
                                                          '10.1.2.3',
                                                          'rp-1',
                                                          'folder-1',
                                                          None,
                                                          100))
Esempio n. 6
0
    def test_close(self):
        session = self._create_mock_session()
        handle = rw_handles.VmdkWriteHandle(session, '10.1.2.3', 443,
                                            'rp-1', 'folder-1', None,
                                            100)

        def session_invoke_api_side_effect(module, method, *args, **kwargs):
            if module == new_vim_util and method == 'get_object_property':
                return 'ready'
            self.assertEqual(session.vim, module)
            self.assertEqual('HttpNfcLeaseComplete', method)

        session.invoke_api = mock.Mock(
            side_effect=session_invoke_api_side_effect)
        handle.close()
        self.assertEqual(2, session.invoke_api.call_count)
Esempio n. 7
0
def download_stream_optimized_image(context, timeout_secs, image_service,
                                    image_id, **kwargs):
    """Download stream optimized image from image service to VMware server.

    :param context: image service write context
    :param timeout_secs: time in seconds to wait for the download to complete
    :param image_service: image service handle
    :param image_id: ID of the image to be downloaded
    :param kwargs: keyword arguments to configure the destination
                   VMDK write handle
    :returns: managed object reference of the VM created for import to VMware
              server
    :raises: VimException, VimFaultException, VimAttributeException,
             VimSessionOverLoadException, VimConnectionException,
             ImageTransferException, ValueError
    """
    LOG.debug(_("Downloading image: %s from image service as a stream "
                "optimized file."),
              image_id)

    # TODO(vbala) catch specific exceptions raised by download call
    read_iter = image_service.download(context, image_id)
    read_handle = rw_handles.ImageReadHandle(read_iter)
    file_size = int(kwargs.get('image_size'))
    write_handle = rw_handles.VmdkWriteHandle(kwargs.get('session'),
                                              kwargs.get('host'),
                                              kwargs.get('resource_pool'),
                                              kwargs.get('vm_folder'),
                                              kwargs.get('vm_import_spec'),
                                              file_size)
    _start_transfer(context,
                    timeout_secs,
                    read_handle,
                    file_size,
                    write_file_handle=write_handle)
    LOG.debug(_("Downloaded image: %s from image service as a stream "
                "optimized file."),
              image_id)
    return write_handle.get_imported_vm()
Esempio n. 8
0
def fetch_image_stream_optimized(context, instance, session, vm_name, ds_name,
                                 vm_folder_ref, res_pool_ref):
    """Fetch image from Glance to ESX datastore."""
    image_ref = instance.image_ref
    LOG.debug(
        "Downloading image file data %(image_ref)s to the ESX "
        "as VM named '%(vm_name)s'", {
            'image_ref': image_ref,
            'vm_name': vm_name
        },
        instance=instance)

    metadata = IMAGE_API.get(context, image_ref)
    file_size = int(metadata['size'])

    vm_import_spec = _build_import_spec_for_import_vapp(
        session, vm_name, ds_name)

    read_iter = IMAGE_API.download(context, image_ref)
    read_handle = rw_handles.ImageReadHandle(read_iter)

    write_handle = rw_handles.VmdkWriteHandle(session, session._host,
                                              session._port, res_pool_ref,
                                              vm_folder_ref, vm_import_spec,
                                              file_size)
    start_transfer(context,
                   read_handle,
                   file_size,
                   write_file_handle=write_handle)

    imported_vm_ref = write_handle.get_imported_vm()

    LOG.info(_LI("Downloaded image file data %(image_ref)s"),
             {'image_ref': instance['image_ref']},
             instance=instance)
    session._call_method(session.vim, "UnregisterVM", imported_vm_ref)
    LOG.info(_LI("The imported VM was unregistered"), instance=instance)