예제 #1
0
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)
예제 #2
0
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)
예제 #3
0
 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)
예제 #5
0
 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')