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))
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()}