Added functions for get a ip on an instance

The cause of some gating failure looks like
because of getting ip address on instance.
However current exercise didn't log the return value.
In this commit, we add get_instance_ip function with
error hanlding support, and apply it on the execise.

Change-Id: I8e17ba68093faafe58a98eb780a032368eea38aa
diff --git a/exercises/boot_from_volume.sh b/exercises/boot_from_volume.sh
index a3a14eb..36524ed 100755
--- a/exercises/boot_from_volume.sh
+++ b/exercises/boot_from_volume.sh
@@ -174,7 +174,8 @@
 fi
 
 # Get the instance IP
-IP=$(nova show $VM_UUID | grep "$PRIVATE_NETWORK_NAME" | get_field 2)
+IP=$(get_instance_ip $VM_UUID $PRIVATE_NETWORK_NAME)
+
 die_if_not_set $LINENO IP "Failure retrieving IP address"
 
 # Private IPs can be pinged in single node deployments
diff --git a/exercises/floating_ips.sh b/exercises/floating_ips.sh
index ac65cf7..f93a727 100755
--- a/exercises/floating_ips.sh
+++ b/exercises/floating_ips.sh
@@ -132,7 +132,7 @@
 fi
 
 # Get the instance IP
-IP=$(nova show $VM_UUID | grep "$PRIVATE_NETWORK_NAME" | get_field 2)
+IP=$(get_instance_ip $VM_UUID $PRIVATE_NETWORK_NAME)
 die_if_not_set $LINENO IP "Failure retrieving IP address"
 
 # Private IPs can be pinged in single node deployments
diff --git a/exercises/neutron-adv-test.sh b/exercises/neutron-adv-test.sh
index 4367e2e..abb29cf 100755
--- a/exercises/neutron-adv-test.sh
+++ b/exercises/neutron-adv-test.sh
@@ -272,12 +272,12 @@
 }
 
 function ping_ip {
-   # Test agent connection.  Assumes namespaces are disabled, and
-   # that DHCP is in use, but not L3
-   local VM_NAME=$1
-   local NET_NAME=$2
-   IP=`nova show $VM_NAME | grep 'network' | awk '{print $5}'`
-   ping_check $NET_NAME $IP $BOOT_TIMEOUT
+     # Test agent connection.  Assumes namespaces are disabled, and
+     # that DHCP is in use, but not L3
+     local VM_NAME=$1
+     local NET_NAME=$2
+     IP=$(get_instance_ip $VM_NAME $NET_NAME)
+     ping_check $NET_NAME $IP $BOOT_TIMEOUT
 }
 
 function check_vm {
diff --git a/exercises/volumes.sh b/exercises/volumes.sh
index b2b391c..028d19b 100755
--- a/exercises/volumes.sh
+++ b/exercises/volumes.sh
@@ -135,7 +135,8 @@
 fi
 
 # Get the instance IP
-IP=$(nova show $VM_UUID | grep "$PRIVATE_NETWORK_NAME" | get_field 2)
+IP=$(get_instance_ip $VM_UUID $PRIVATE_NETWORK_NAME)
+
 die_if_not_set $LINENO IP "Failure retrieving IP address"
 
 # Private IPs can be pinged in single node deployments