Basic conversion of Images

https://blueprints.launchpad.net/glance/+spec/basic-import-conversion

Some store engines work better when working with specific image formats. For example, in the case of ceph, having a raw image improves performance and allows ceph to do smarter things with the image data. Therefore, this spec proposes adding a basic support to image conversion that will give operators full control on the destination format. The proposed change is the starting point for more complex conversion operations.

Problem description

With the support of asynchronous operations and the new import workflow in Glance (see the dependency tree), it will be possible to have an image format conversion on the fly while importing an image.

The conversion will be provided by a plugin of the import workflow. This plugin can be activated or not based on the deployer configuration. This means that the deployer will need to specify the preferred format of images for the deployment.

This blueprint will handle the conversion of formats supported by qemu-img convert: raw, qcow2, vdi, vmdk and vpc.

Internally, Glance will receive the bits of the image in a XX format. These bits will be stored in a temporary location. The plugin will be triggered to convert the image to its target format YY and moved to its final destination. When the task is finished, the temporary location is deleted. This means that the format uploaded initially is not kept by Glance.

Proposed change

Using Glance’s Asynchronous Workers, we can execute a background task that converts images from the source format to a pre-configured format.

Alternatives

Let the user convert images themselves and upload the final, converted, file.

Data model impact

None

REST API impact

None

Security impact

None

Notifications impact

None

Other end user impact

None

Performance Impact

Based on the maximum number of workers and the size that the administrator has configured for the conversion workspace, performance could be negatively affected if the operator misconfigures their maximum number of workers and allocated workspace.

In addition to the above, it’s also important to consider the time required to download the image locally, convert it and then upload it to the final store. The implementation proposes using qemu-image, which executes random accesses to the image data.

Other deployer impact

When configuring this feature, operators will need to know the average size of the images that they are managing and appropriately configure the max_workers setting and an appropriate amount of space for the workers to use.

Developer impact

None

Implementation

Assignee(s)

Primary assignee:

flaper87

Other contributors:

None

Reviewers

Core reviewer(s):

jokke_ nikhil-komawar kragniz icordasc

Work Items

  • Create specific workers for different conversion tasks

  • Create workflows for tasks

  • Update configuration files with additions

  • Update configuration documentation

Dependencies

This depends on Glance’s Asynchronous Workers.

Testing

Unit testing will be needed for the conversion tasks and for the new task flows.

Documentation Impact

This may have an impact on the upgrade and installation parts of the documentation. For operators upgrading, they’ll need to understand how to properly configure a system for image conversion. For new users, they’ll need to be warned about appropriately allocating space for the workers to use and possibly choosing a more conservative maximum worker number than is default until they can determine the appropriate number.

References

None