[glance] (Silly) question about container_format and disk_format
Hello! I do not completely understand the parameters 'container_format' and 'disk_format' as described in [1]. The documentation always uses 'the format' but IMHO there might be two formats involved. Are those formats either (A) the formats of the image file that is passed in. Like (from the official documentation [2]) $ openstack image create --disk-format qcow2 --container-format bare \ --public --file ./centos63.qcow2 centos63-image qcow2 / bare are the formats of the passed in image. or (B) the formats that are used internally to store the image Like $ openstack image create --disk-format vmdk --container-format ova \ --public --file ./centos63.qcow2 centos63-image vmdk / ova are formats that are used internally in OpenStack glance to store the image. In this case there must be an auto-detection of the image file format that is passed in and an automatic conversion into the new format. Kind regards Andre [1] https://developer.openstack.org/api-ref/image/v2/index.html?expanded=create-... [2] https://docs.openstack.org/glance/pike/admin/manage-images.html
Hello! After digging through the source code, I'd answer my own question: image disk_format and container_format are (A) the formats of the image file that is passed in. Reasoning: Glance's so called flows use those parameters as input like ovf_process.py [1]: if image.container_format == 'ova': When there is a conversion done in the flow, the target format is the one from the configuration (like [2]): target_format = CONF.image_conversion.output_format After a possible conversion, the new disk and container formats are set (e.g. [3]): image.disk_format = target_format image.container_format = 'bare' (At some points instead of using the disk and container format parameters, a call to 'qemu-img info' is done to extract those information from the image - like in [4]: stdout, stderr = putils.trycmd("qemu-img", "info", "--output=json", ... ... metadata = json.loads(stdout) source_format = metadata.get('format') ) So it looks that the idea is, that the disk_format and container_format should always reflect the current format of the image. Can anybody please confirm / comment? Kind regards Andre [1] https://git.openstack.org/cgit/openstack/glance/tree/glance/async_/flows/ovf... [2] https://git.openstack.org/cgit/openstack/glance/tree/glance/async_/flows/plu... [3] https://git.openstack.org/cgit/openstack/glance/tree/glance/async_/flows/plu... [4] https://git.openstack.org/cgit/openstack/glance/tree/glance/async_/flows/plu... On 12/18/18 11:07 AM, Andre Florath wrote:
Hello!
I do not completely understand the parameters 'container_format' and 'disk_format' as described in [1]. The documentation always uses 'the format' but IMHO there might be two formats involved.
Are those formats either
(A) the formats of the image file that is passed in.
Like (from the official documentation [2])
$ openstack image create --disk-format qcow2 --container-format bare \ --public --file ./centos63.qcow2 centos63-image
qcow2 / bare are the formats of the passed in image.
or
(B) the formats that are used internally to store the image
Like
$ openstack image create --disk-format vmdk --container-format ova \ --public --file ./centos63.qcow2 centos63-image
vmdk / ova are formats that are used internally in OpenStack glance to store the image. In this case there must be an auto-detection of the image file format that is passed in and an automatic conversion into the new format.
Kind regards
Andre
[1] https://developer.openstack.org/api-ref/image/v2/index.html?expanded=create-... [2] https://docs.openstack.org/glance/pike/admin/manage-images.html
On 1/3/19 3:07 AM, Andre Florath wrote:
Hello!
After digging through the source code, I'd answer my own question:
Sorry you had to answer your own question, but glad you were willing to dig into the source code!
image disk_format and container_format are
(A) the formats of the image file that is passed in.
This is "sort of" correct. In general, Glance does not verify either the disk_format or container_format of the image data, so these values are whatever the image owner has specified. Glance doesn't verify these because disk/container formats are developed independently of OpenStack, and in the heady days of 2010, it seemed like a good idea that new disk/container formats be usable without having to wait for a new Glance release. (There isn't much incentive for an image owner to lie about the disk/container format, because specifying the wrong one could make the image unusable by any consuming service that relies on these image properties.)
Reasoning:
Glance's so called flows use those parameters as input like ovf_process.py [1]:
if image.container_format == 'ova':
When there is a conversion done in the flow, the target format is the one from the configuration (like [2]):
target_format = CONF.image_conversion.output_format
After a possible conversion, the new disk and container formats are set (e.g. [3]):
image.disk_format = target_format image.container_format = 'bare'
(At some points instead of using the disk and container format parameters, a call to 'qemu-img info' is done to extract those information from the image - like in [4]:
stdout, stderr = putils.trycmd("qemu-img", "info", "--output=json", ...
Note to fans of CVE 2015-5162: the above call to qemu-img is time restricted.
... metadata = json.loads(stdout) source_format = metadata.get('format') )
Remember that the "flows" are optional, so in general you cannot rely upon Glance setting these values correctly for you.
So it looks that the idea is, that the disk_format and container_format should always reflect the current format of the image.
Can anybody please confirm / comment?
Yes, the image properties associated with an image are meant to describe the image data associated with that image record.
Kind regards
Andre
Happy new year! brian
[1] https://git.openstack.org/cgit/openstack/glance/tree/glance/async_/flows/ovf... [2] https://git.openstack.org/cgit/openstack/glance/tree/glance/async_/flows/plu... [3] https://git.openstack.org/cgit/openstack/glance/tree/glance/async_/flows/plu... [4] https://git.openstack.org/cgit/openstack/glance/tree/glance/async_/flows/plu...
On 12/18/18 11:07 AM, Andre Florath wrote:
Hello!
I do not completely understand the parameters 'container_format' and 'disk_format' as described in [1]. The documentation always uses 'the format' but IMHO there might be two formats involved.
Are those formats either
(A) the formats of the image file that is passed in.
Like (from the official documentation [2])
$ openstack image create --disk-format qcow2 --container-format bare \ --public --file ./centos63.qcow2 centos63-image
qcow2 / bare are the formats of the passed in image.
or
(B) the formats that are used internally to store the image
Like
$ openstack image create --disk-format vmdk --container-format ova \ --public --file ./centos63.qcow2 centos63-image
vmdk / ova are formats that are used internally in OpenStack glance to store the image. In this case there must be an auto-detection of the image file format that is passed in and an automatic conversion into the new format.
Kind regards
Andre
[1] https://developer.openstack.org/api-ref/image/v2/index.html?expanded=create-... [2] https://docs.openstack.org/glance/pike/admin/manage-images.html
participants (2)
-
Andre Florath
-
Brian Rosmaita