fix failing wget statements under -o errexit in vmdk upload routine
Fix the case when uploaded image has no descriptor.
Refactored the code a bit
Tested:
1. monithic Sparse
2. monolithic flat
2.1 flat file name mentioned in descriptor file
2.1 flat file name not mentioned in descriptor file
3. descriptor header not found in the file
3.1 image file name is *-flat, download descriptor
3.2 image file name does not end with *-flat
4. file name contains all image properties
Change-Id: I0df9be5c2a1b9ed53cdb22d5cd40b94e56c48f37
Closes-bug: #1289664
diff --git a/functions b/functions
index 1d30922..e0d2b01 100644
--- a/functions
+++ b/functions
@@ -122,7 +122,7 @@
flat_fname="$(head -25 $IMAGE | { grep -G 'RW\|RDONLY [0-9]+ FLAT\|VMFS' $IMAGE || true; })"
flat_fname="${flat_fname#*\"}"
flat_fname="${flat_fname%?}"
- if [[ -z "$flat_name" ]]; then
+ if [[ -z "$flat_fname" ]]; then
flat_fname="$IMAGE_NAME-flat.vmdk"
fi
path_len=`expr ${#image_url} - ${#IMAGE_FNAME}`
@@ -133,27 +133,16 @@
if [[ ! -f $FILES/$flat_fname || \
"$(stat -c "%s" $FILES/$flat_fname)" = "0" ]]; then
wget -c $flat_url -O $FILES/$flat_fname
- if [[ $? -ne 0 ]]; then
- echo "Flat disk not found: $flat_url"
- flat_found=false
- fi
fi
- if $flat_found; then
- IMAGE="$FILES/${flat_fname}"
- fi
+ IMAGE="$FILES/${flat_fname}"
else
IMAGE=$(echo $flat_url | sed "s/^file:\/\///g")
if [[ ! -f $IMAGE || "$(stat -c "%s" $IMAGE)" == "0" ]]; then
echo "Flat disk not found: $flat_url"
- flat_found=false
- fi
- if ! $flat_found; then
- IMAGE=$(echo $image_url | sed "s/^file:\/\///g")
+ return 1
fi
fi
- if $flat_found; then
- IMAGE_NAME="${flat_fname}"
- fi
+ IMAGE_NAME="${flat_fname}"
vmdk_disktype="preallocated"
elif [[ "$vmdk_create_type" = "streamOptimized" ]]; then
vmdk_disktype="streamOptimized"
@@ -163,33 +152,27 @@
if [[ ${IMAGE_NAME: -5} != "-flat" ]]; then
warn $LINENO "Expected filename suffix: '-flat'."`
`" Filename provided: ${IMAGE_NAME}"
- fi
-
- descriptor_fname="${IMAGE_NAME:0:${#IMAGE_NAME} - 5}.vmdk"
- path_len=`expr ${#image_url} - ${#IMAGE_FNAME}`
- flat_path="${image_url:0:$path_len}"
- descriptor_url=$flat_path$descriptor_fname
- warn $LINENO "$descriptor_data_pair_msg"`
- `" Attempt to retrieve the descriptor *.vmdk: $descriptor_url"
- if [[ $flat_path != file* ]]; then
- if [[ ! -f $FILES/$descriptor_fname || \
- "$(stat -c "%s" $FILES/$descriptor_fname)" = "0" ]]; then
- wget -c $descriptor_url -O $FILES/$descriptor_fname
- if [[ $? -ne 0 ]]; then
- warn $LINENO "Descriptor not found $descriptor_url"
- descriptor_found=false
+ else
+ descriptor_fname="${IMAGE_NAME:0:${#IMAGE_NAME} - 5}.vmdk"
+ path_len=`expr ${#image_url} - ${#IMAGE_FNAME}`
+ flat_path="${image_url:0:$path_len}"
+ descriptor_url=$flat_path$descriptor_fname
+ warn $LINENO "$descriptor_data_pair_msg"`
+ `" Attempt to retrieve the descriptor *.vmdk: $descriptor_url"
+ if [[ $flat_path != file* ]]; then
+ if [[ ! -f $FILES/$descriptor_fname || \
+ "$(stat -c "%s" $FILES/$descriptor_fname)" = "0" ]]; then
+ wget -c $descriptor_url -O $FILES/$descriptor_fname
+ fi
+ descriptor_url="$FILES/$descriptor_fname"
+ else
+ descriptor_url=$(echo $descriptor_url | sed "s/^file:\/\///g")
+ if [[ ! -f $descriptor_url || \
+ "$(stat -c "%s" $descriptor_url)" == "0" ]]; then
+ echo "Descriptor not found: $descriptor_url"
+ return 1
fi
fi
- descriptor_url="$FILES/$descriptor_fname"
- else
- descriptor_url=$(echo $descriptor_url | sed "s/^file:\/\///g")
- if [[ ! -f $descriptor_url || \
- "$(stat -c "%s" $descriptor_url)" == "0" ]]; then
- warn $LINENO "Descriptor not found $descriptor_url"
- descriptor_found=false
- fi
- fi
- if $descriptor_found; then
vmdk_adapter_type="$(head -25 $descriptor_url | { grep -a -F -m 1 'ddb.adapterType =' $descriptor_url || true; })"
vmdk_adapter_type="${vmdk_adapter_type#*\"}"
vmdk_adapter_type="${vmdk_adapter_type%?}"