def upload_image(context, image, instance, **kwargs): """Upload the snapshotted vm disk file to Glance image server.""" LOG.debug(_("Uploading image %s to the Glance image server") % image, instance=instance) read_file_handle = read_write_util.VMwareHTTPReadFile( kwargs.get("host"), kwargs.get("data_center_name"), kwargs.get("datastore_name"), kwargs.get("cookies"), kwargs.get("file_path")) file_size = read_file_handle.get_size() (image_service, image_id) = glance.get_remote_image_service(context, image) metadata = image_service.show(context, image_id) # The properties and other fields that we need to set for the image. image_metadata = { "disk_format": "vmdk", "is_public": "false", "name": metadata['name'], "status": "active", "container_format": "bare", "size": file_size, "properties": { "vmware_adaptertype": kwargs.get("adapter_type"), "vmware_ostype": kwargs.get("os_type"), "vmware_image_version": kwargs.get("image_version"), "owner_id": instance['project_id'] } } start_transfer(context, read_file_handle, file_size, image_service=image_service, image_id=image_id, image_meta=image_metadata) LOG.debug(_("Uploaded image %s to the Glance image server") % image, instance=instance)
def upload_image(context, image, instance, **kwargs): """Upload the snapshotted vm disk file to Glance image server.""" LOG.debug("Uploading image %s to the Glance image server", image, instance=instance) read_file_handle = read_write_util.VMwareHTTPReadFile( kwargs.get("host"), kwargs.get("data_center_name"), kwargs.get("datastore_name"), kwargs.get("cookies"), kwargs.get("file_path")) file_size = read_file_handle.get_size() metadata = IMAGE_API.get(context, image) #modified by liuling #Get vmdk to a temp file tmpfile = "/tmp/" + metadata['id'] fp = open(tmpfile, "wb") start_transfer(context, read_file_handle, file_size, write_file_handle=fp) if read_file_handle: read_file_handle.close() if fp: fp.close() #conver vmdk to qcow2 img_name = metadata['name'] convert_command = "qemu-img convert -f raw -O qcow2 " + tmpfile + " /tmp/" + img_name + ".qcow2" result = subprocess.call([convert_command], shell=True) if result == 0: upload_file_name = "/tmp/" + img_name + ".qcow2" file_size = os.path.getsize(upload_file_name) else: return # The properties and other fields that we need to set for the image. image_metadata = { "disk_format": "qcow2", "is_public": "false", "name": metadata['name'], "status": "active", "container_format": "bare", "size": file_size, "properties": { "owner_id": instance['project_id'] } } read_file_handle_local = read_write_util.HybridFileHandle( upload_file_name, "rb") start_transfer(context, read_file_handle_local, file_size, image_id=metadata['id'], image_meta=image_metadata) LOG.debug("Uploaded image %s to the Glance image server", image, instance=instance)
def test_ipv6_host_read(self): ipv6_host = 'fd8c:215d:178e:c51e:200:c9ff:fed1:584c' port = 7443 folder = 'tmp/fake.txt' # NOTE(sdague): the VMwareHTTPReadFile makes implicit http # call via requests during construction, block that from # happening here in the test. with mock.patch.object(read_write_util.VMwareHTTPReadFile, '_create_read_connection'): reader = read_write_util.VMwareHTTPReadFile( ipv6_host, port, 'fake_dc', 'fake_ds', dict(), folder) base_url = 'https://[%s]:%s/folder/%s' % (ipv6_host, port, folder) base_url += '?dsName=fake_ds&dcPath=fake_dc' self.assertEqual(base_url, reader._base_url)
def test_ipv6_host_read(self, mock_request): ipv6_host = 'fd8c:215d:178e:c51e:200:c9ff:fed1:584c' port = 7443 folder = 'tmp/fake.txt' read_write_util.VMwareHTTPReadFile(ipv6_host, port, 'fake_dc', 'fake_ds', dict(), folder) base_url = 'https://[%s]:%s/folder/%s' % (ipv6_host, port, folder) base_url += '?dsName=fake_ds&dcPath=fake_dc' headers = {'User-Agent': 'OpenStack-ESX-Adapter'} mock_request.assert_called_once_with('get', base_url, headers=headers, allow_redirects=True, stream=True, verify=False)
def test_ipv6_host_read(self, mock_open, mock_request): ipv6_host = 'fd8c:215d:178e:c51e:200:c9ff:fed1:584c' folder = 'tmp/fake.txt' read_write_util.VMwareHTTPReadFile(ipv6_host, 'fake_dc', 'fake_ds', dict(), folder) base_url = 'https://[%s]/folder/%s' % (ipv6_host, folder) base_url += '?dsName=fake_ds&dcPath=fake_dc' headers = {'Cookie': '', 'User-Agent': 'OpenStack-ESX-Adapter'} mock_request.assert_called_with(base_url, None, headers) mock_open.assert_called_with('fake_request')