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