Browse code

Merge "Use glance import workflow for creating image"

Zuul authored on 2020/07/16 00:02:28
Showing 2 changed files
... ...
@@ -77,6 +77,41 @@ function get_extra_file {
77 77
     fi
78 78
 }
79 79
 
80
+# Upload an image to glance using the configured mechanism
81
+#
82
+# Arguments:
83
+#  image name
84
+#  container format
85
+#  disk format
86
+#  path to image file
87
+#  optional properties (format of propname=value)
88
+#
89
+function _upload_image {
90
+    local image_name="$1"
91
+    shift
92
+    local container="$1"
93
+    shift
94
+    local disk="$1"
95
+    shift
96
+    local image="$1"
97
+    shift
98
+    local properties
99
+    local useimport
100
+
101
+    for prop in $*; do
102
+        properties+=" --property $prop"
103
+    done
104
+
105
+    if [[ "$GLANCE_USE_IMPORT_WORKFLOW" == "True" ]]; then
106
+        if [[ "$WSGI_MODE" != "uwsgi" ]]; then
107
+            useimport="--import"
108
+        else
109
+            echo "*** Unable to use glance import workflow because WSGI_MODE=uwsgi! ***"
110
+        fi
111
+    fi
112
+
113
+    openstack --os-cloud=devstack-admin --os-region-name="$REGION_NAME" image create "$image_name" --public --container-format "$container" --disk-format "$disk" $useimport $properties < "${image}"
114
+}
80 115
 
81 116
 # Retrieve an image from a URL and upload into Glance.
82 117
 # Uses the following variables:
... ...
@@ -118,7 +153,7 @@ function upload_image {
118 118
     # OpenVZ-format images are provided as .tar.gz, but not decompressed prior to loading
119 119
     if [[ "$image_url" =~ 'openvz' ]]; then
120 120
         image_name="${image_fname%.tar.gz}"
121
-        openstack --os-cloud=devstack-admin --os-region-name="$REGION_NAME" image create "$image_name" --public --container-format ami --disk-format ami < "${image}"
121
+        _upload_image "$image_name" ami ami "$image"
122 122
         return
123 123
     fi
124 124
 
... ...
@@ -232,7 +267,8 @@ function upload_image {
232 232
         vmdk_adapter_type="${props[1]:-$vmdk_adapter_type}"
233 233
         vmdk_net_adapter="${props[2]:-$vmdk_net_adapter}"
234 234
 
235
-        openstack --os-cloud=devstack-admin --os-region-name="$REGION_NAME" image create "$image_name" --public --container-format bare --disk-format vmdk --property vmware_disktype="$vmdk_disktype" --property vmware_adaptertype="$vmdk_adapter_type" --property hw_vif_model="$vmdk_net_adapter" < "${image}"
235
+        _upload_image "$image_name" bare vmdk "$image" vmware_disktype="$vmdk_disktype" vmware_adaptertype="$vmdk_adapter_type" hw_vif_model="$vmdk_net_adapter"
236
+
236 237
         return
237 238
     fi
238 239
 
... ...
@@ -246,14 +282,9 @@ function upload_image {
246 246
             # Nova defaults to PV for all VHD images, but
247 247
             # the glance setting is needed for booting
248 248
             # directly from volume.
249
-            force_vm_mode="--property vm_mode=xen"
249
+            force_vm_mode="vm_mode=xen"
250 250
         fi
251
-        openstack \
252
-            --os-cloud=devstack-admin --os-region-name="$REGION_NAME" \
253
-            image create \
254
-            "$image_name" --public \
255
-            --container-format=ovf --disk-format=vhd \
256
-            $force_vm_mode < "${image}"
251
+        _upload_image "$image_name" ovf vhd "$image" $force_vm_mode
257 252
         return
258 253
     fi
259 254
 
... ...
@@ -262,12 +293,7 @@ function upload_image {
262 262
     # Setting metadata, so PV mode is used.
263 263
     if [[ "$image_url" =~ '.xen-raw.tgz' ]]; then
264 264
         image_name="${image_fname%.xen-raw.tgz}"
265
-        openstack \
266
-            --os-cloud=devstack-admin --os-region-name="$REGION_NAME" \
267
-            image create \
268
-            "$image_name" --public \
269
-            --container-format=tgz --disk-format=raw \
270
-            --property vm_mode=xen < "${image}"
265
+        _upload_image "$image_name" tgz raw "$image" vm_mode=xen
271 266
         return
272 267
     fi
273 268
 
... ...
@@ -278,12 +304,7 @@ function upload_image {
278 278
             die $LINENO "Unknown vm_mode=${vm_mode} for Virtuozzo image"
279 279
         fi
280 280
 
281
-        openstack \
282
-            --os-cloud=devstack-admin --os-region-name="$REGION_NAME" \
283
-            image create \
284
-            "$image_name" --public \
285
-            --container-format=bare --disk-format=ploop \
286
-            --property vm_mode=$vm_mode < "${image}"
281
+        _upload_image "$image_name" bare ploop "$image" vm_mode=$vm_mode
287 282
         return
288 283
     fi
289 284
 
... ...
@@ -292,7 +313,7 @@ function upload_image {
292 292
     local disk_format=""
293 293
     local container_format=""
294 294
     local unpack=""
295
-    local img_property="--property hw_rng_model=virtio"
295
+    local img_property="hw_rng_model=virtio"
296 296
     case "$image_fname" in
297 297
         *.tar.gz|*.tgz)
298 298
             # Extract ami and aki files
... ...
@@ -370,18 +391,18 @@ function upload_image {
370 370
     esac
371 371
 
372 372
     if is_arch "ppc64le" || is_arch "ppc64" || is_arch "ppc"; then
373
-        img_property="$img_property --property hw_cdrom_bus=scsi --property os_command_line=console=hvc0"
373
+        img_property="$img_property hw_cdrom_bus=scsi os_command_line=console=hvc0"
374 374
     fi
375 375
 
376 376
     if is_arch "aarch64"; then
377
-        img_property="$img_property --property hw_machine_type=virt --property hw_cdrom_bus=scsi --property hw_scsi_model=virtio-scsi --property os_command_line='console=ttyAMA0'"
377
+        img_property="$img_property hw_machine_type=virt hw_cdrom_bus=scsi hw_scsi_model=virtio-scsi os_command_line='console=ttyAMA0'"
378 378
     fi
379 379
 
380 380
     if [ "$container_format" = "bare" ]; then
381 381
         if [ "$unpack" = "zcat" ]; then
382
-            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}")
382
+            _upload_image "$image_name" $container_format $disk_format <(zcat --force "$image") $img_property
383 383
         elif [ "$unpack" = "bunzip2" ]; then
384
-            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}")
384
+            _upload_image "$image_name" $container_format $disk_format <(bunzip2 -cdk "$image") $img_property
385 385
         elif [ "$unpack" = "unxz" ]; then
386 386
             # NOTE(brtknr): unxz the file first and cleanup afterwards to
387 387
             # prevent timeout while Glance tries to upload image (e.g. to Swift).
... ...
@@ -390,10 +411,10 @@ function upload_image {
390 390
             tmp_dir=$(mktemp -d)
391 391
             image_path="$tmp_dir/$image_name"
392 392
             unxz -cv "${image}" > "$image_path"
393
-            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"
393
+            _upload_image "$image_name" $container_format $disk_format "$image_path" $img_property
394 394
             rm -rf $tmp_dir
395 395
         else
396
-            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}"
396
+            _upload_image "$image_name" $container_format $disk_format "$image" $img_property
397 397
         fi
398 398
     else
399 399
         # Use glance client to add the kernel the root filesystem.
... ...
@@ -406,7 +427,7 @@ function upload_image {
406 406
         if [ -n "$ramdisk" ]; then
407 407
             ramdisk_id=$(openstack --os-cloud=devstack-admin --os-region-name="$REGION_NAME" image create "$image_name-ramdisk" $img_property --public --container-format ari --disk-format ari < "$ramdisk" | grep ' id ' | get_field 2)
408 408
         fi
409
-        openstack --os-cloud=devstack-admin --os-region-name="$REGION_NAME" image create "${image_name%.img}" $img_property --public --container-format ami --disk-format ami ${kernel_id:+--property kernel_id=$kernel_id} ${ramdisk_id:+--property ramdisk_id=$ramdisk_id} < "${image}"
409
+        _upload_image "${image_name%.img}" ami ami "$image" ${kernel_id:+ kernel_id=$kernel_id} ${ramdisk_id:+ ramdisk_id=$ramdisk_id} $img_property
410 410
     fi
411 411
 }
412 412
 
... ...
@@ -65,6 +65,8 @@ GLANCE_LOCK_DIR=${GLANCE_LOCK_DIR:=$DATA_DIR/glance/locks}
65 65
 GLANCE_STAGING_DIR=${GLANCE_MULTISTORE_FILE_IMAGE_DIR:=$DATA_DIR/os_glance_staging_store}
66 66
 GLANCE_TASKS_DIR=${GLANCE_MULTISTORE_FILE_IMAGE_DIR:=$DATA_DIR/os_glance_tasks_store}
67 67
 
68
+GLANCE_USE_IMPORT_WORKFLOW=$(trueorfalse False GLANCE_USE_IMPORT_WORKFLOW)
69
+
68 70
 GLANCE_CONF_DIR=${GLANCE_CONF_DIR:-/etc/glance}
69 71
 GLANCE_METADEF_DIR=$GLANCE_CONF_DIR/metadefs
70 72
 GLANCE_API_CONF=$GLANCE_CONF_DIR/glance-api.conf