Browse code

Merge "Use vmdk descriptor to populate image properties"

Jenkins authored on 2013/11/16 03:45:11
Showing 1 changed files
... ...
@@ -1362,18 +1362,42 @@ function upload_image() {
1362 1362
 
1363 1363
         # Before we can upload vmdk type images to glance, we need to know it's
1364 1364
         # disk type, storage adapter, and networking adapter. These values are
1365
-        # passed to glance as custom properties. We take these values from the
1365
+        # passed to glance as custom properties. 
1366
+        # We take these values from the vmdk file if populated. Otherwise, we use
1366 1367
         # vmdk filename, which is expected in the following format:
1367 1368
         #
1368 1369
         #     <name>-<disk type>:<storage adapter>:<network adapter>
1369 1370
         #
1370 1371
         # If the filename does not follow the above format then the vsphere
1371 1372
         # driver will supply default values.
1373
+
1374
+        # vmdk adapter type
1375
+        vmdk_adapter_type="$(head -25 $IMAGE | grep -a -F -m 1 'ddb.adapterType =' $IMAGE)"
1376
+        vmdk_adapter_type="${vmdk_adapter_type#*\"}"
1377
+        vmdk_adapter_type="${vmdk_adapter_type%?}"
1378
+
1379
+        # vmdk disk type
1380
+        vmdk_create_type="$(head -25 $IMAGE | grep -a -F -m 1 'createType=' $IMAGE)"
1381
+        vmdk_create_type="${vmdk_create_type#*\"}"
1382
+        vmdk_create_type="${vmdk_create_type%?}"
1383
+        if [[ "$vmdk_create_type" = "monolithicSparse" ]]; then
1384
+            vmdk_disktype="sparse"
1385
+        elif [[ "$vmdk_create_type" = "monolithicFlat" ]]; then
1386
+            die $LINENO "Monolithic flat disks should use a descriptor-data pair." \
1387
+            "Please provide the disk and not the descriptor."
1388
+        else
1389
+            #TODO(alegendre): handle streamOptimized once supported by VMware driver.
1390
+            vmdk_disktype="preallocated"
1391
+        fi
1372 1392
         property_string=`echo "$IMAGE_NAME" | grep -oP '(?<=-)(?!.*-).+:.+:.+$'`
1373 1393
         if [[ ! -z "$property_string" ]]; then
1374 1394
             IFS=':' read -a props <<< "$property_string"
1375
-            vmdk_disktype="${props[0]}"
1376
-            vmdk_adapter_type="${props[1]}"
1395
+            if [[ ! -z "${props[0]}" ]]; then
1396
+                vmdk_disktype="${props[0]}"
1397
+            fi
1398
+            if [[ ! -z "${props[1]}" ]]; then
1399
+                vmdk_adapter_type="${props[1]}"
1400
+            fi
1377 1401
             vmdk_net_adapter="${props[2]}"
1378 1402
         fi
1379 1403