Пример #1
0
 def test_path_strip(self):
     scheme = 'https'
     server = '13.37.73.31'
     path = 'images/ubuntu-14.04.vmdk'
     dc_path = 'datacenter-1'
     ds_name = 'datastore-1'
     params = {'dcPath': dc_path, 'dsName': ds_name}
     query = urlparse.urlencode(params)
     url = datastore.DatastoreURL(scheme, server, path, dc_path, ds_name)
     expected_url = '%s://%s/folder/%s?%s' % (scheme, server, path, query)
     self.assertEqual(expected_url, str(url))
Пример #2
0
    def copy_image_to_volume(self, context, volume, image_service, image_id):
        """Fetch the image from image_service and write it to the volume.

        :param context: Security/policy info for the request.
        :param volume: The volume to create.
        :param image_service: The image service to use.
        :param image_id: The image identifier.
        :returns: Model updates.
        """
        metadata = image_service.show(context, image_id)
        self._validate_disk_format(metadata['disk_format'])
        self._validate_container_format(metadata.get('container_format'),
                                        image_id)

        properties = metadata['properties'] or {}
        disk_type = properties.get('vmware_disktype',
                                   vmdk.ImageDiskType.PREALLOCATED)
        vmdk.ImageDiskType.validate(disk_type)

        size_bytes = metadata['size']
        dc_ref, summary, folder_path = self._get_temp_image_folder(
            volume.size * units.Gi)
        disk_name = volume.id
        if disk_type in [
                vmdk.ImageDiskType.SPARSE, vmdk.ImageDiskType.STREAM_OPTIMIZED
        ]:
            vmdk_path = self._create_virtual_disk_from_sparse_image(
                context, image_service, image_id, size_bytes, dc_ref,
                summary.name, folder_path, disk_name)
        else:
            vmdk_path = self._create_virtual_disk_from_preallocated_image(
                context, image_service, image_id, size_bytes, dc_ref,
                summary.name, folder_path, disk_name,
                vops.VirtualDiskAdapterType.LSI_LOGIC)

        ds_path = datastore.DatastorePath.parse(
            vmdk_path.get_descriptor_ds_file_path())
        dc_path = self.volumeops.get_inventory_path(dc_ref)

        vmdk_url = datastore.DatastoreURL('https',
                                          self.configuration.vmware_host_ip,
                                          ds_path.rel_path, dc_path,
                                          ds_path.datastore)

        fcd_loc = self.volumeops.register_disk(str(vmdk_url), volume.name,
                                               summary.datastore)

        profile_id = self._get_storage_profile_id(volume)
        if profile_id:
            self.volumeops.update_fcd_policy(fcd_loc, profile_id)

        return {'provider_location': fcd_loc.provider_location()}