* The way we retrieve data from cli output is janky, this
improves it slightly by creating a helper method.
Change-Id: Ib0889fd56f6a78bed85dad4c5e9e6e34bac9fb0d
| ... | ... |
@@ -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 |