Browse code

Clean up local variable usage - upload_image()

Cleans up the rather coplex upload_image() function

Change-Id: Ie1ef200b905dd5d17ef887390d620817208f2bf5

Dean Troyer authored on 2014/07/26 01:09:36
Showing 1 changed files
... ...
@@ -55,26 +55,28 @@ function upload_image {
55 55
     local image_url=$1
56 56
     local token=$2
57 57
 
58
+    local image image_fname image_name
59
+
58 60
     # Create a directory for the downloaded image tarballs.
59 61
     mkdir -p $FILES/images
60
-    IMAGE_FNAME=`basename "$image_url"`
62
+    image_fname=`basename "$image_url"`
61 63
     if [[ $image_url != file* ]]; then
62 64
         # Downloads the image (uec ami+akistyle), then extracts it.
63
-        if [[ ! -f $FILES/$IMAGE_FNAME || "$(stat -c "%s" $FILES/$IMAGE_FNAME)" = "0" ]]; then
64
-            wget -c $image_url -O $FILES/$IMAGE_FNAME
65
+        if [[ ! -f $FILES/$image_fname || "$(stat -c "%s" $FILES/$image_fname)" = "0" ]]; then
66
+            wget -c $image_url -O $FILES/$image_fname
65 67
             if [[ $? -ne 0 ]]; then
66 68
                 echo "Not found: $image_url"
67 69
                 return
68 70
             fi
69 71
         fi
70
-        IMAGE="$FILES/${IMAGE_FNAME}"
72
+        image="$FILES/${image_fname}"
71 73
     else
72 74
         # File based URL (RFC 1738): file://host/path
73 75
         # Remote files are not considered here.
74 76
         # *nix: file:///home/user/path/file
75 77
         # windows: file:///C:/Documents%20and%20Settings/user/path/file
76
-        IMAGE=$(echo $image_url | sed "s/^file:\/\///g")
77
-        if [[ ! -f $IMAGE || "$(stat -c "%s" $IMAGE)" == "0" ]]; then
78
+        image=$(echo $image_url | sed "s/^file:\/\///g")
79
+        if [[ ! -f $image || "$(stat -c "%s" $image)" == "0" ]]; then
78 80
             echo "Not found: $image_url"
79 81
             return
80 82
         fi
... ...
@@ -82,14 +84,14 @@ function upload_image {
82 82
 
83 83
     # OpenVZ-format images are provided as .tar.gz, but not decompressed prior to loading
84 84
     if [[ "$image_url" =~ 'openvz' ]]; then
85
-        IMAGE_NAME="${IMAGE_FNAME%.tar.gz}"
86
-        glance --os-auth-token $token --os-image-url http://$GLANCE_HOSTPORT image-create --name "$IMAGE_NAME" --is-public=True --container-format ami --disk-format ami < "${IMAGE}"
85
+        image_name="${image_fname%.tar.gz}"
86
+        glance --os-auth-token $token --os-image-url http://$GLANCE_HOSTPORT image-create --name "$image_name" --is-public=True --container-format ami --disk-format ami < "${image}"
87 87
         return
88 88
     fi
89 89
 
90 90
     # vmdk format images
91 91
     if [[ "$image_url" =~ '.vmdk' ]]; then
92
-        IMAGE_NAME="${IMAGE_FNAME%.vmdk}"
92
+        image_name="${image_fname%.vmdk}"
93 93
 
94 94
         # Before we can upload vmdk type images to glance, we need to know it's
95 95
         # disk type, storage adapter, and networking adapter. These values are
... ...
@@ -102,17 +104,17 @@ function upload_image {
102 102
         # If the filename does not follow the above format then the vsphere
103 103
         # driver will supply default values.
104 104
 
105
-        vmdk_adapter_type=""
106
-        vmdk_disktype=""
107
-        vmdk_net_adapter=""
105
+        local vmdk_disktype=""
106
+        local vmdk_net_adapter=""
107
+        local path_len
108 108
 
109 109
         # vmdk adapter type
110
-        vmdk_adapter_type="$(head -25 $IMAGE | { grep -a -F -m 1 'ddb.adapterType =' $IMAGE || true; })"
110
+        local vmdk_adapter_type="$(head -25 $image | { grep -a -F -m 1 'ddb.adapterType =' $image || true; })"
111 111
         vmdk_adapter_type="${vmdk_adapter_type#*\"}"
112 112
         vmdk_adapter_type="${vmdk_adapter_type%?}"
113 113
 
114 114
         # vmdk disk type
115
-        vmdk_create_type="$(head -25 $IMAGE | { grep -a -F -m 1 'createType=' $IMAGE || true; })"
115
+        local vmdk_create_type="$(head -25 $image | { grep -a -F -m 1 'createType=' $image || true; })"
116 116
         vmdk_create_type="${vmdk_create_type#*\"}"
117 117
         vmdk_create_type="${vmdk_create_type%\"*}"
118 118
 
... ...
@@ -120,17 +122,16 @@ function upload_image {
120 120
                                     `"should use a descriptor-data pair."
121 121
         if [[ "$vmdk_create_type" = "monolithicSparse" ]]; then
122 122
             vmdk_disktype="sparse"
123
-        elif [[ "$vmdk_create_type" = "monolithicFlat" || \
124
-        "$vmdk_create_type" = "vmfs" ]]; then
123
+        elif [[ "$vmdk_create_type" = "monolithicFlat" || "$vmdk_create_type" = "vmfs" ]]; then
125 124
             # Attempt to retrieve the *-flat.vmdk
126
-            flat_fname="$(head -25 $IMAGE | { grep -G 'RW\|RDONLY [0-9]+ FLAT\|VMFS' $IMAGE || true; })"
125
+            local flat_fname="$(head -25 $image | { grep -G 'RW\|RDONLY [0-9]+ FLAT\|VMFS' $image || true; })"
127 126
             flat_fname="${flat_fname#*\"}"
128 127
             flat_fname="${flat_fname%?}"
129 128
             if [[ -z "$flat_fname" ]]; then
130
-                flat_fname="$IMAGE_NAME-flat.vmdk"
129
+                flat_fname="$image_name-flat.vmdk"
131 130
             fi
132
-            path_len=`expr ${#image_url} - ${#IMAGE_FNAME}`
133
-            flat_url="${image_url:0:$path_len}$flat_fname"
131
+            path_len=`expr ${#image_url} - ${#image_fname}`
132
+            local flat_url="${image_url:0:$path_len}$flat_fname"
134 133
             warn $LINENO "$descriptor_data_pair_msg"`
135 134
                             `" Attempt to retrieve the *-flat.vmdk: $flat_url"
136 135
             if [[ $flat_url != file* ]]; then
... ...
@@ -138,29 +139,29 @@ function upload_image {
138 138
                 "$(stat -c "%s" $FILES/$flat_fname)" = "0" ]]; then
139 139
                     wget -c $flat_url -O $FILES/$flat_fname
140 140
                 fi
141
-                IMAGE="$FILES/${flat_fname}"
141
+                image="$FILES/${flat_fname}"
142 142
             else
143
-                IMAGE=$(echo $flat_url | sed "s/^file:\/\///g")
144
-                if [[ ! -f $IMAGE || "$(stat -c "%s" $IMAGE)" == "0" ]]; then
143
+                image=$(echo $flat_url | sed "s/^file:\/\///g")
144
+                if [[ ! -f $image || "$(stat -c "%s" $image)" == "0" ]]; then
145 145
                     echo "Flat disk not found: $flat_url"
146 146
                     return 1
147 147
                 fi
148 148
             fi
149
-            IMAGE_NAME="${flat_fname}"
149
+            image_name="${flat_fname}"
150 150
             vmdk_disktype="preallocated"
151 151
         elif [[ "$vmdk_create_type" = "streamOptimized" ]]; then
152 152
             vmdk_disktype="streamOptimized"
153 153
         elif [[ -z "$vmdk_create_type" ]]; then
154 154
             # *-flat.vmdk provided: attempt to retrieve the descriptor (*.vmdk)
155 155
             # to retrieve appropriate metadata
156
-            if [[ ${IMAGE_NAME: -5} != "-flat" ]]; then
156
+            if [[ ${image_name: -5} != "-flat" ]]; then
157 157
                 warn $LINENO "Expected filename suffix: '-flat'."`
158
-                            `" Filename provided: ${IMAGE_NAME}"
158
+                            `" Filename provided: ${image_name}"
159 159
             else
160
-                descriptor_fname="${IMAGE_NAME:0:${#IMAGE_NAME} - 5}.vmdk"
161
-                path_len=`expr ${#image_url} - ${#IMAGE_FNAME}`
162
-                flat_path="${image_url:0:$path_len}"
163
-                descriptor_url=$flat_path$descriptor_fname
160
+                descriptor_fname="${image_name:0:${#image_name} - 5}.vmdk"
161
+                path_len=`expr ${#image_url} - ${#image_fname}`
162
+                local flat_path="${image_url:0:$path_len}"
163
+                local descriptor_url=$flat_path$descriptor_fname
164 164
                 warn $LINENO "$descriptor_data_pair_msg"`
165 165
                                 `" Attempt to retrieve the descriptor *.vmdk: $descriptor_url"
166 166
                 if [[ $flat_path != file* ]]; then
... ...
@@ -189,35 +190,35 @@ function upload_image {
189 189
         # NOTE: For backwards compatibility reasons, colons may be used in place
190 190
         # of semi-colons for property delimiters but they are not permitted
191 191
         # characters in NTFS filesystems.
192
-        property_string=`echo "$IMAGE_NAME" | { grep -oP '(?<=-)(?!.*-).*[:;].*[:;].*$' || true; }`
192
+        property_string=`echo "$image_name" | { grep -oP '(?<=-)(?!.*-).*[:;].*[:;].*$' || true; }`
193 193
         IFS=':;' read -a props <<< "$property_string"
194 194
         vmdk_disktype="${props[0]:-$vmdk_disktype}"
195 195
         vmdk_adapter_type="${props[1]:-$vmdk_adapter_type}"
196 196
         vmdk_net_adapter="${props[2]:-$vmdk_net_adapter}"
197 197
 
198
-        glance --os-auth-token $token --os-image-url http://$GLANCE_HOSTPORT image-create --name "$IMAGE_NAME" --is-public=True --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}"
198
+        glance --os-auth-token $token --os-image-url http://$GLANCE_HOSTPORT image-create --name "$image_name" --is-public=True --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}"
199 199
         return
200 200
     fi
201 201
 
202 202
     # XenServer-vhd-ovf-format images are provided as .vhd.tgz
203 203
     # and should not be decompressed prior to loading
204 204
     if [[ "$image_url" =~ '.vhd.tgz' ]]; then
205
-        IMAGE_NAME="${IMAGE_FNAME%.vhd.tgz}"
206
-        FORCE_VM_MODE=""
207
-        if [[ "$IMAGE_NAME" =~ 'cirros' ]]; then
205
+        image_name="${image_fname%.vhd.tgz}"
206
+        local force_vm_mode=""
207
+        if [[ "$image_name" =~ 'cirros' ]]; then
208 208
             # Cirros VHD image currently only boots in PV mode.
209 209
             # Nova defaults to PV for all VHD images, but
210 210
             # the glance setting is needed for booting
211 211
             # directly from volume.
212
-            FORCE_VM_MODE="--property vm_mode=xen"
212
+            force_vm_mode="--property vm_mode=xen"
213 213
         fi
214 214
         glance \
215 215
             --os-auth-token $token \
216 216
             --os-image-url http://$GLANCE_HOSTPORT \
217 217
             image-create \
218
-            --name "$IMAGE_NAME" --is-public=True \
218
+            --name "$image_name" --is-public=True \
219 219
             --container-format=ovf --disk-format=vhd \
220
-            $FORCE_VM_MODE < "${IMAGE}"
220
+            $force_vm_mode < "${image}"
221 221
         return
222 222
     fi
223 223
 
... ...
@@ -225,93 +226,94 @@ function upload_image {
225 225
     # and should not be decompressed prior to loading.
226 226
     # Setting metadata, so PV mode is used.
227 227
     if [[ "$image_url" =~ '.xen-raw.tgz' ]]; then
228
-        IMAGE_NAME="${IMAGE_FNAME%.xen-raw.tgz}"
228
+        image_name="${image_fname%.xen-raw.tgz}"
229 229
         glance \
230 230
             --os-auth-token $token \
231 231
             --os-image-url http://$GLANCE_HOSTPORT \
232 232
             image-create \
233
-            --name "$IMAGE_NAME" --is-public=True \
233
+            --name "$image_name" --is-public=True \
234 234
             --container-format=tgz --disk-format=raw \
235
-            --property vm_mode=xen < "${IMAGE}"
235
+            --property vm_mode=xen < "${image}"
236 236
         return
237 237
     fi
238 238
 
239
-    KERNEL=""
240
-    RAMDISK=""
241
-    DISK_FORMAT=""
242
-    CONTAINER_FORMAT=""
243
-    UNPACK=""
244
-    case "$IMAGE_FNAME" in
239
+    local kernel=""
240
+    local ramdisk=""
241
+    local disk_format=""
242
+    local container_format=""
243
+    local unpack=""
244
+    local img_property=""
245
+    case "$image_fname" in
245 246
         *.tar.gz|*.tgz)
246 247
             # Extract ami and aki files
247
-            [ "${IMAGE_FNAME%.tar.gz}" != "$IMAGE_FNAME" ] &&
248
-                IMAGE_NAME="${IMAGE_FNAME%.tar.gz}" ||
249
-                IMAGE_NAME="${IMAGE_FNAME%.tgz}"
250
-            xdir="$FILES/images/$IMAGE_NAME"
248
+            [ "${image_fname%.tar.gz}" != "$image_fname" ] &&
249
+                image_name="${image_fname%.tar.gz}" ||
250
+                image_name="${image_fname%.tgz}"
251
+            local xdir="$FILES/images/$image_name"
251 252
             rm -Rf "$xdir";
252 253
             mkdir "$xdir"
253
-            tar -zxf $IMAGE -C "$xdir"
254
-            KERNEL=$(for f in "$xdir/"*-vmlinuz* "$xdir/"aki-*/image; do
254
+            tar -zxf $image -C "$xdir"
255
+            kernel=$(for f in "$xdir/"*-vmlinuz* "$xdir/"aki-*/image; do
255 256
                 [ -f "$f" ] && echo "$f" && break; done; true)
256
-            RAMDISK=$(for f in "$xdir/"*-initrd* "$xdir/"ari-*/image; do
257
+            ramdisk=$(for f in "$xdir/"*-initrd* "$xdir/"ari-*/image; do
257 258
                 [ -f "$f" ] && echo "$f" && break; done; true)
258
-            IMAGE=$(for f in "$xdir/"*.img "$xdir/"ami-*/image; do
259
+            image=$(for f in "$xdir/"*.img "$xdir/"ami-*/image; do
259 260
                 [ -f "$f" ] && echo "$f" && break; done; true)
260
-            if [[ -z "$IMAGE_NAME" ]]; then
261
-                IMAGE_NAME=$(basename "$IMAGE" ".img")
261
+            if [[ -z "$image_name" ]]; then
262
+                image_name=$(basename "$image" ".img")
262 263
             fi
263 264
             ;;
264 265
         *.img)
265
-            IMAGE_NAME=$(basename "$IMAGE" ".img")
266
-            format=$(qemu-img info ${IMAGE} | awk '/^file format/ { print $3; exit }')
266
+            image_name=$(basename "$image" ".img")
267
+            local format=$(qemu-img info ${image} | awk '/^file format/ { print $3; exit }')
267 268
             if [[ ",qcow2,raw,vdi,vmdk,vpc," =~ ",$format," ]]; then
268
-                DISK_FORMAT=$format
269
+                disk_format=$format
269 270
             else
270
-                DISK_FORMAT=raw
271
+                disk_format=raw
271 272
             fi
272
-            CONTAINER_FORMAT=bare
273
+            container_format=bare
273 274
             ;;
274 275
         *.img.gz)
275
-            IMAGE_NAME=$(basename "$IMAGE" ".img.gz")
276
-            DISK_FORMAT=raw
277
-            CONTAINER_FORMAT=bare
278
-            UNPACK=zcat
276
+            image_name=$(basename "$image" ".img.gz")
277
+            disk_format=raw
278
+            container_format=bare
279
+            unpack=zcat
279 280
             ;;
280 281
         *.qcow2)
281
-            IMAGE_NAME=$(basename "$IMAGE" ".qcow2")
282
-            DISK_FORMAT=qcow2
283
-            CONTAINER_FORMAT=bare
282
+            image_name=$(basename "$image" ".qcow2")
283
+            disk_format=qcow2
284
+            container_format=bare
284 285
             ;;
285 286
         *.iso)
286
-            IMAGE_NAME=$(basename "$IMAGE" ".iso")
287
-            DISK_FORMAT=iso
288
-            CONTAINER_FORMAT=bare
287
+            image_name=$(basename "$image" ".iso")
288
+            disk_format=iso
289
+            container_format=bare
289 290
             ;;
290
-        *) echo "Do not know what to do with $IMAGE_FNAME"; false;;
291
+        *) echo "Do not know what to do with $image_fname"; false;;
291 292
     esac
292 293
 
293 294
     if is_arch "ppc64"; then
294
-        IMG_PROPERTY="--property hw_cdrom_bus=scsi"
295
+        img_property="--property hw_cdrom_bus=scsi"
295 296
     fi
296 297
 
297
-    if [ "$CONTAINER_FORMAT" = "bare" ]; then
298
-        if [ "$UNPACK" = "zcat" ]; then
299
-            glance --os-auth-token $token --os-image-url http://$GLANCE_HOSTPORT image-create --name "$IMAGE_NAME" $IMG_PROPERTY --is-public True --container-format=$CONTAINER_FORMAT --disk-format $DISK_FORMAT < <(zcat --force "${IMAGE}")
298
+    if [ "$container_format" = "bare" ]; then
299
+        if [ "$unpack" = "zcat" ]; then
300
+            glance --os-auth-token $token --os-image-url http://$GLANCE_HOSTPORT image-create --name "$image_name" $img_property --is-public True --container-format=$container_format --disk-format $disk_format < <(zcat --force "${image}")
300 301
         else
301
-            glance --os-auth-token $token --os-image-url http://$GLANCE_HOSTPORT image-create --name "$IMAGE_NAME" $IMG_PROPERTY --is-public True --container-format=$CONTAINER_FORMAT --disk-format $DISK_FORMAT < "${IMAGE}"
302
+            glance --os-auth-token $token --os-image-url http://$GLANCE_HOSTPORT image-create --name "$image_name" $img_property --is-public True --container-format=$container_format --disk-format $disk_format < "${image}"
302 303
         fi
303 304
     else
304 305
         # Use glance client to add the kernel the root filesystem.
305 306
         # We parse the results of the first upload to get the glance ID of the
306 307
         # kernel for use when uploading the root filesystem.
307
-        KERNEL_ID=""; RAMDISK_ID="";
308
-        if [ -n "$KERNEL" ]; then
309
-            KERNEL_ID=$(glance --os-auth-token $token --os-image-url http://$GLANCE_HOSTPORT image-create --name "$IMAGE_NAME-kernel" $IMG_PROPERTY --is-public True --container-format aki --disk-format aki < "$KERNEL" | grep ' id ' | get_field 2)
308
+        local kernel_id="" ramdisk_id="";
309
+        if [ -n "$kernel" ]; then
310
+            kernel_id=$(glance --os-auth-token $token --os-image-url http://$GLANCE_HOSTPORT image-create --name "$image_name-kernel" $img_property --is-public True --container-format aki --disk-format aki < "$kernel" | grep ' id ' | get_field 2)
310 311
         fi
311
-        if [ -n "$RAMDISK" ]; then
312
-            RAMDISK_ID=$(glance --os-auth-token $token --os-image-url http://$GLANCE_HOSTPORT image-create --name "$IMAGE_NAME-ramdisk" $IMG_PROPERTY --is-public True --container-format ari --disk-format ari < "$RAMDISK" | grep ' id ' | get_field 2)
312
+        if [ -n "$ramdisk" ]; then
313
+            ramdisk_id=$(glance --os-auth-token $token --os-image-url http://$GLANCE_HOSTPORT image-create --name "$image_name-ramdisk" $img_property --is-public True --container-format ari --disk-format ari < "$ramdisk" | grep ' id ' | get_field 2)
313 314
         fi
314
-        glance --os-auth-token $token --os-image-url http://$GLANCE_HOSTPORT image-create --name "${IMAGE_NAME%.img}" $IMG_PROPERTY --is-public True --container-format ami --disk-format ami ${KERNEL_ID:+--property kernel_id=$KERNEL_ID} ${RAMDISK_ID:+--property ramdisk_id=$RAMDISK_ID} < "${IMAGE}"
315
+        glance --os-auth-token $token --os-image-url http://$GLANCE_HOSTPORT image-create --name "${image_name%.img}" $img_property --is-public True --container-format ami --disk-format ami ${kernel_id:+--property kernel_id=$kernel_id} ${ramdisk_id:+--property ramdisk_id=$ramdisk_id} < "${image}"
315 316
     fi
316 317
 }
317 318