build_library: vm_image_util: create fixed-size VHDs for Azure

Azure requires disks to be fixed-size VHD files when uploading to blob storage
in order to create image/gallery objects from them. This is documented here[1].
To prevent mistakes from happening create disks in that format directly so that
any azure compatible tool can upload them, though azcopy is recommend because
it handles their sparseness best.

This has not been an issue for us so far because kola uses code from an older
utility that transparently handled the dynamic-to-fixed-size conversion for VHD
files (azure-vhd-utils). But people working with these things for the first
time fall into this trap.

[1]: https://docs.microsoft.com/en-us/azure/virtual-machines/linux/create-upload-generic#resizing-vhds.

Signed-off-by: Jeremi Piotrowski <jpiotrowski@microsoft.com>
This commit is contained in:
Jeremi Piotrowski 2022-02-01 17:50:42 +00:00
parent 98d964d689
commit 07568fb418

View File

@ -283,12 +283,12 @@ IMG_exoscale_DISK_FORMAT=qcow2
IMG_exoscale_OEM_PACKAGE=oem-exoscale IMG_exoscale_OEM_PACKAGE=oem-exoscale
## azure ## azure
IMG_azure_DISK_FORMAT=vhd IMG_azure_DISK_FORMAT=vhd_fixed
IMG_azure_DISK_LAYOUT=azure IMG_azure_DISK_LAYOUT=azure
IMG_azure_OEM_PACKAGE=oem-azure IMG_azure_OEM_PACKAGE=oem-azure
## azure pro ## azure pro
IMG_azure_pro_DISK_FORMAT=vhd IMG_azure_pro_DISK_FORMAT=vhd_fixed
IMG_azure_pro_DISK_LAYOUT=azure IMG_azure_pro_DISK_LAYOUT=azure
IMG_azure_pro_OEM_PACKAGE=oem-azure-pro IMG_azure_pro_OEM_PACKAGE=oem-azure-pro
@ -429,6 +429,7 @@ _disk_ext() {
vmdk_scsi) echo vmdk;; vmdk_scsi) echo vmdk;;
vmdk_stream) echo vmdk;; vmdk_stream) echo vmdk;;
hdd) echo hdd;; hdd) echo hdd;;
vhd*) echo vhd;;
*) echo "${disk_format}";; *) echo "${disk_format}";;
esac esac
} }
@ -579,6 +580,11 @@ _write_vhd_disk() {
assert_image_size "$2" vpc assert_image_size "$2" vpc
} }
_write_vhd_fixed_disk() {
qemu-img convert -f raw "$1" -O vpc -o subformat=fixed,force_size "$2"
assert_image_size "$2" vpc
}
_write_vmdk_ide_disk() { _write_vmdk_ide_disk() {
qemu-img convert -f raw "$1" -O vmdk -o adapter_type=ide "$2" qemu-img convert -f raw "$1" -O vmdk -o adapter_type=ide "$2"
assert_image_size "$2" vmdk assert_image_size "$2" vmdk