cinder.image.image_utils module

cinder.image.image_utils module

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

class 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.

classmethod fetch(image_service, context, image_id, suffix='')
static 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. :param source: filename of the image to check :param src_format: source image format recognized by qemu_img, or None :param image_id: the image ID if this is a Glance image, or None :param data: a imageutils.QemuImgInfo object from this image, or None :param run_as_root: when ‘data’ is None, call ‘qemu-img info’ as root :raises ImageUnacceptable: when the image fails some format checks :raises 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. :param image_id: the image id :param data: an imageutils.QemuImgInfo object :raises 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, 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. :param source: source filename :param dest: destination filename :param out_format: output image format of qemu-img :param out_subformat: output image subformat :param src_format: source image format (use image_utils.fixup_disk_format()

to translate from a Glance format to one recognizable by qemu_img)
Parameters:
  • 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)
  • image_id – the image ID if this is a Glance image, or None
  • data – a imageutils.QemuImgInfo object from this image, or None
Raises:
  • 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.

qemu_img_supports_force_share()
replace_xenserver_image_with_coalesced_vhd(image_file)
resize_image(source, size, run_as_root=False)

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)
verify_glance_image_signature(context, image_service, image_id, path)
Creative Commons Attribution 3.0 License

Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.