Helper methods to deal with images.
This is essentially a copy from nova.virt.images.py Some slight modifications, but at some point we should look at maybe pushing this up to Oslo
TemporaryImages
(image_service)¶Bases: object
Manage temporarily downloaded images to avoid downloading it twice.
In the ‘with TemporaryImages.fetch(image_service, ctx, image_id) as tmp’ clause, ‘tmp’ can be used as the downloaded image path. In addition, image_utils.fetch() will use the pre-fetched image by the TemporaryImages. This is useful to inspect image contents before conversion.
fetch
(image_service, context, image_id, suffix='')¶for_image_service
(image_service)¶get
(context, image_id)¶check_available_space
(dest, image_size, image_id)¶check_image_format
(source, src_format=None, image_id=None, data=None, run_as_root=True)¶Do some image format checks.
Verifies that the src_format matches what qemu-img thinks the image format is, and does some vmdk subformat checks. See Bug #1996188.
Does not check for a qcow2 backing file.
Will make a call out to qemu_img if data is None.
source – filename of the image to check
src_format – source image format recognized by qemu_img, or None
image_id – the image ID if this is a Glance image, or None
data – a imageutils.QemuImgInfo object from this image, or None
run_as_root – when ‘data’ is None, call ‘qemu-img info’ as root
ImageUnacceptable – when the image fails some format checks
ProcessExecutionError – if ‘qemu-img info’ fails
check_qemu_img_version
(minimum_version)¶check_virtual_size
(virtual_size, volume_size, image_id)¶check_vmdk_image
(image_id, data)¶Check some rules about VMDK images.
Make sure the VMDK subformat (the “createType” in vmware docs) is one that we allow as determined by the ‘vmdk_allowed_types’ configuration option. The default set includes only types that do not reference files outside the VMDK file, which can otherwise be used in exploits to expose host information.
image_id – the image id
data – an imageutils.QemuImgInfo object
ImageUnacceptable – when the VMDK createType is not in the allowed list
cleanup_temporary_file
(backend_name)¶coalesce_chain
(vhd_chain)¶coalesce_vhd
(vhd_path)¶convert_image
(source, dest, out_format, out_subformat=None, src_format=None, run_as_root=True, throttle=None, cipher_spec=None, passphrase_file=None, compress=False, src_passphrase_file=None, image_id=None, data=None)¶Convert image to other format.
NOTE: If the qemu-img convert command fails and this function raises an exception, a non-empty dest file may be left in the filesystem. It is the responsibility of the caller to decide what to do with this file.
source – source filename
dest – destination filename
out_format – output image format of qemu-img
out_subformat – output image subformat
src_format – source image format (use image_utils.fixup_disk_format() to translate from a Glance format to one recognizable by qemu_img)
run_as_root – run qemu-img as root
throttle – a cinder.throttling.Throttle object, or None
cipher_spec – encryption details
passphrase_file – filename containing luks passphrase
compress – compress w/ qemu-img when possible (best effort)
src_passphrase_file – filename containing source volume’s luks passphrase
image_id – the image ID if this is a Glance image, or None
data – a imageutils.QemuImgInfo object from this image, or None
ImageUnacceptable – when the image fails some format checks
ProcessExecutionError – when something goes wrong during conversion
create_temporary_file
(*args, **kwargs)¶decode_cipher
(cipher_spec, key_size)¶Decode a dm-crypt style cipher specification string
The assumed format being cipher[:keycount]-chainmode-ivmode[:ivopts] as documented under linux/Documentation/device-mapper/dm-crypt.txt in the kernel source tree.
discover_vhd_chain
(directory)¶extract_targz
(archive_name, target)¶fetch
(context, image_service, image_id, path, _user_id, _project_id)¶fetch_to_raw
(context, image_service, image_id, dest, blocksize, user_id=None, project_id=None, size=None, run_as_root=True)¶fetch_to_vhd
(context, image_service, image_id, dest, blocksize, volume_subformat=None, user_id=None, project_id=None, run_as_root=True)¶fetch_to_volume_format
(context, image_service, image_id, dest, volume_format, blocksize, volume_subformat=None, user_id=None, project_id=None, size=None, run_as_root=True)¶fetch_verify_image
(context, image_service, image_id, dest, user_id=None, project_id=None, size=None, run_as_root=True)¶fix_vhd_chain
(vhd_chain)¶fixup_disk_format
(disk_format)¶Return the format to be provided to qemu-img convert.
from_qemu_img_disk_format
(disk_format)¶Return the conventional format derived from qemu-img format.
get_qemu_data
(image_id, has_meta, disk_format_raw, dest, run_as_root, force_share=False)¶get_qemu_img_version
()¶The qemu-img version will be cached until the process is restarted.
get_vhd_size
(vhd_path)¶is_xenserver_format
(image_meta)¶qemu_img_info
(path, run_as_root=True, force_share=False)¶Return an object containing the parsed output from qemu-img info.
replace_xenserver_image_with_coalesced_vhd
(image_file)¶resize_image
(source, size, run_as_root=False, file_format=None)¶Changes the virtual size of the image.
resize_vhd
(vhd_path, size, journal)¶set_vhd_parent
(vhd_path, parentpath)¶temporary_dir
()¶temporary_file
(*args, **kwargs)¶upload_volume
(context, image_service, image_meta, volume_path, volume_format='raw', run_as_root=True, compress=True, store_id=None, base_image_ref=None)¶validate_stores_id
(context, image_service_store_id)¶verify_glance_image_signature
(context, image_service, image_id, path)¶Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.