Browse code

Add a helper method to volumes test to get fields

* The way we retrieve data from cli output is janky, this
improves it slightly by creating a helper method.

Change-Id: Ib0889fd56f6a78bed85dad4c5e9e6e34bac9fb0d

Vishvananda Ishaya authored on 2012/02/28 07:41:54
Showing 1 changed files
... ...
@@ -55,18 +55,33 @@ IMAGE=`glance -f index | egrep $DEFAULT_IMAGE_NAME | head -1 | cut -d" " -f1`
55 55
 # determinine instance type
56 56
 # -------------------------
57 57
 
58
+# Helper function to grab a numbered field from python novaclient cli result
59
+# Fields are numbered starting with 1
60
+# Reverse syntax is supported: -1 is the last field, -2 is second to last, etc.
61
+function get_field () {
62
+    while read data
63
+    do
64
+        if [ "$1" -lt 0 ]; then
65
+            field="(\$(NF$1))"
66
+        else
67
+            field="\$$(($1 + 1))"
68
+        fi
69
+        echo "$data" | awk -F'[ \t]*\\|[ \t]*' "{print $field}"
70
+    done
71
+}
72
+
58 73
 # List of instance types:
59 74
 nova flavor-list
60 75
 
61
-INSTANCE_TYPE=`nova flavor-list | grep $DEFAULT_INSTANCE_TYPE | cut -d"|" -f2`
76
+INSTANCE_TYPE=`nova flavor-list | grep $DEFAULT_INSTANCE_TYPE | get_field 1`
62 77
 if [[ -z "$INSTANCE_TYPE" ]]; then
63 78
     # grab the first flavor in the list to launch if default doesn't exist
64
-   INSTANCE_TYPE=`nova flavor-list | head -n 4 | tail -n 1 | cut -d"|" -f2`
79
+   INSTANCE_TYPE=`nova flavor-list | head -n 4 | tail -n 1 | get_field 1`
65 80
 fi
66 81
 
67 82
 NAME="myserver"
68 83
 
69
-VM_UUID=`nova boot --flavor $INSTANCE_TYPE --image $IMAGE $NAME --security_groups=$SECGROUP | grep ' id ' | cut -d"|" -f3 | sed 's/ //g'`
84
+VM_UUID=`nova boot --flavor $INSTANCE_TYPE --image $IMAGE $NAME --security_groups=$SECGROUP | grep ' id ' | get_field 2`
70 85
 
71 86
 # Testing
72 87
 # =======
... ...
@@ -85,7 +100,7 @@ if ! timeout $ACTIVE_TIMEOUT sh -c "while ! nova show $VM_UUID | grep status | g
85 85
 fi
86 86
 
87 87
 # get the IP of the server
88
-IP=`nova show $VM_UUID | grep "private network" | cut -d"|" -f3`
88
+IP=`nova show $VM_UUID | grep "private network" | get_field 2`
89 89
 
90 90
 # for single node deployments, we can ping private ips
91 91
 MULTI_HOST=${MULTI_HOST:-0}
... ...
@@ -108,7 +123,7 @@ fi
108 108
 VOL_NAME="myvol-$(openssl rand -hex 4)"
109 109
 
110 110
 # Verify it doesn't exist
111
-if [[ -n "`nova volume-list | grep $VOL_NAME | head -1 | cut -d'|' -f3 | sed 's/ //g'`" ]]; then
111
+if [[ -n "`nova volume-list | grep $VOL_NAME | head -1 | get_field 2`" ]]; then
112 112
     echo "Volume $VOL_NAME already exists"
113 113
     exit 1
114 114
 fi
... ...
@@ -121,7 +136,7 @@ if ! timeout $ACTIVE_TIMEOUT sh -c "while ! nova volume-list | grep $VOL_NAME |
121 121
 fi
122 122
 
123 123
 # Get volume ID
124
-VOL_ID=`nova volume-list | grep $VOL_NAME | head -1 | cut -d'|' -f2 | sed 's/ //g'`
124
+VOL_ID=`nova volume-list | grep $VOL_NAME | head -1 | get_field 1`
125 125
 
126 126
 # Attach to server
127 127
 DEVICE=/dev/vdb
... ...
@@ -131,7 +146,7 @@ if ! timeout $ACTIVE_TIMEOUT sh -c "while ! nova volume-list | grep $VOL_NAME |
131 131
     exit 1
132 132
 fi
133 133
 
134
-VOL_ATTACH=`nova volume-list | grep $VOL_NAME | head -1 | cut -d'|' -f6 | sed 's/ //g'`
134
+VOL_ATTACH=`nova volume-list | grep $VOL_NAME | head -1 | get_field -1`
135 135
 if [[ "$VOL_ATTACH" != $VM_UUID ]]; then
136 136
     echo "Volume not attached to correct instance"
137 137
     exit 1