'Creates backing VM from non-streamOptimized image.
First, we create a disk-less backing. Then we create a virtual disk
using the image which is then attached to the backing VM. Finally, the
backing VM is cloned if disk type conversion is required.'

def _create_volume_from_non_stream_optimized_image(self, context, volume, image_service, image_id, image_size_in_bytes, adapter_type, image_disk_type):

    disk_type = VMwareVcVmdkDriver._get_disk_type(volume)
    create_params = {CREATE_PARAM_DISK_LESS: True}
    disk_conversion = self._check_disk_conversion(image_disk_type, disk_type)
    if disk_conversion:
        disk_name = uuidutils.generate_uuid()
        create_params[CREATE_PARAM_BACKING_NAME] = disk_name
        create_params[CREATE_PARAM_TEMP_BACKING] = True
    else:
        disk_name = volume['name']
    LOG.debug('Creating    disk-less    backing    for    volume:    %(id)s    with    params:    %(param)s.', {'id': volume['id'], 'param': create_params})
    backing = self._create_backing(volume, create_params=create_params)
    try:
        (ds_name, folder_path) = self._get_ds_name_folder_path(backing)
        host = self.volumeops.get_host(backing)
        dc_ref = self.volumeops.get_dc(host)
        vmdk_path = None
        attached = False
        if (image_disk_type == ImageDiskType.SPARSE):
            vmdk_path = self._create_virtual_disk_from_sparse_image(context, image_service, image_id, image_size_in_bytes, dc_ref, ds_name, folder_path, disk_name)
        else:
            vmdk_path = self._create_virtual_disk_from_preallocated_image(context, image_service, image_id, image_size_in_bytes, dc_ref, ds_name, folder_path, disk_name, adapter_type)
        LOG.debug('Attaching    virtual    disk:    %(path)s    to    backing:    %(backing)s.', {'path': vmdk_path.get_descriptor_ds_file_path(), 'backing': backing})
        profile_id = self._get_storage_profile_id(volume)
        self.volumeops.attach_disk_to_backing(backing, (image_size_in_bytes // units.Ki), disk_type, adapter_type, profile_id, vmdk_path.get_descriptor_ds_file_path())
        attached = True
        if disk_conversion:
            (host, rp, folder, summary) = self._select_ds_for_volume(volume)
            datastore = summary.datastore
            LOG.debug('Cloning    temporary    backing:    %s    for    disk    type    conversion.', backing)
            extra_config = self._get_extra_config(volume)
            clone = self.volumeops.clone_backing(volume['name'], backing, None, volumeops.FULL_CLONE_TYPE, datastore, disk_type=disk_type, host=host, resource_pool=rp, extra_config=extra_config, folder=folder)
            self._delete_temp_backing(backing)
            backing = clone
        self.volumeops.update_backing_disk_uuid(backing, volume['id'])
    except Exception:
        with excutils.save_and_reraise_exception():
            LOG.exception('Error    occurred    while    creating    volume:    %(id)s    from    image:    %(image_id)s.', {'id': volume['id'], 'image_id': image_id})
            self._delete_temp_backing(backing)
            if ((vmdk_path is not None) and (not attached)):
                self._delete_temp_disk(vmdk_path.get_descriptor_ds_file_path(), dc_ref)
