Browse code

Support upload of qcow2.xz image format

Some images come in *.xz format [1] and this needs to be
uncompressed before being uploaded.

[1] https://builds.coreos.fedoraproject.org/prod/streams/stable/builds/31.20200323.3.2/x86_64/fedora-coreos-31.20200323.3.2-openstack.x86_64.qcow2.xz

Change-Id: I11f8484ba939c4b2c0a98aa08ef7db730baf71e8

Bharat Kunwar authored on 2020/04/20 18:53:25
Showing 1 changed files
... ...
@@ -341,6 +341,12 @@ function upload_image {
341 341
             disk_format=qcow2
342 342
             container_format=bare
343 343
             ;;
344
+        *.qcow2.xz)
345
+            image_name=$(basename "$image" ".qcow2.xz")
346
+            disk_format=qcow2
347
+            container_format=bare
348
+            unpack=unxz
349
+            ;;
344 350
         *.raw)
345 351
             image_name=$(basename "$image" ".raw")
346 352
             disk_format=raw
... ...
@@ -376,6 +382,16 @@ function upload_image {
376 376
             openstack --os-cloud=devstack-admin --os-region-name="$REGION_NAME" image create "$image_name" $img_property --public --container-format=$container_format --disk-format $disk_format < <(zcat --force "${image}")
377 377
         elif [ "$unpack" = "bunzip2" ]; then
378 378
             openstack --os-cloud=devstack-admin --os-region-name="$REGION_NAME" image create "$image_name" $img_property --public --container-format=$container_format --disk-format $disk_format < <(bunzip2 -cdk "${image}")
379
+        elif [ "$unpack" = "unxz" ]; then
380
+            # NOTE(brtknr): unxz the file first and cleanup afterwards to
381
+            # prevent timeout while Glance tries to upload image (e.g. to Swift).
382
+            local tmp_dir
383
+            local image_path
384
+            tmp_dir=$(mktemp -d)
385
+            image_path="$tmp_dir/$image_name"
386
+            unxz -cv "${image}" > "$image_path"
387
+            openstack --os-cloud=devstack-admin --os-region-name="$REGION_NAME" image create "$image_name" $img_property --public --container-format=$container_format --disk-format $disk_format --file "$image_path"
388
+            rm -rf $tmp_dir
379 389
         else
380 390
             openstack --os-cloud=devstack-admin --os-region-name="$REGION_NAME" image create "$image_name" $img_property --public --container-format=$container_format --disk-format $disk_format < "${image}"
381 391
         fi