Merge "Stop personalizing the common Dockerfile"
[functest.git] / functest / ci / check_os.sh
index 053796d..7b66f3d 100755 (executable)
@@ -6,6 +6,22 @@
 #    jose.lausuch@ericsson.com
 #
 
+if [[ ${OS_INSECURE,,} == "true" ]]; then
+    options='--insecure'
+else
+    options=''
+fi
+
+declare -A service_cmd_array
+service_cmd_array['nova']="openstack $options server list"
+service_cmd_array['neutron']="openstack $options network list"
+service_cmd_array['keystone']="openstack $options endpoint list"
+service_cmd_array['cinder']="openstack $options volume list"
+service_cmd_array['glance']="openstack $options image list"
+
+MANDATORY_SERVICES='nova neutron keystone glance'
+OPTIONAL_SERVICES='cinder'
+
 verify_connectivity() {
     for i in $(seq 0 9); do
         if echo "test" | nc -v -w 10 $1 $2 &>/dev/null; then
@@ -16,6 +32,39 @@ verify_connectivity() {
     return 1
 }
 
+verify_SSL_connectivity() {
+    openssl s_client -connect $1:$2 &>/dev/null
+    return $?
+}
+
+check_service() {
+    local service cmd
+    service=$1
+    cmd=${service_cmd_array[$service]}
+    if [ -z "$2" ]; then
+        required='false'
+    else
+        required=$2
+    fi
+    echo ">>Checking ${service} service..."
+    if ! openstack $options service list | grep -i ${service} > /dev/null; then
+        if [ "$required" == 'false' ]; then
+            echo "WARN: Optional Service ${service} is not enabled!"
+            return
+        else
+            echo "ERROR: Required Service ${service} is not enabled!"
+            exit 1
+        fi
+    fi
+    $cmd &>/dev/null
+    result=$?
+    if [ $result -ne 0 ]; then
+        echo "ERROR: Failed execution $cmd. The $service does not seem to be working."
+        exit 1
+    else
+        echo "  ...OK"
+    fi
+}
 
 if [ -z $OS_AUTH_URL ];then
     echo "ERROR: OS_AUTH_URL environment variable missing... Have you sourced the OpenStack credentials?"
@@ -24,11 +73,17 @@ fi
 
 
 echo "Checking OpenStack endpoints:"
-publicURL=$OS_AUTH_URL
-publicIP=$(echo $publicURL|sed 's/^.*http\:\/\///'|sed 's/.[^:]*$//')
-publicPort=$(echo $publicURL|sed 's/^.*://'|sed 's/\/.*$//')
-echo ">>Verifying connectivity to the public endpoint $publicIP:$publicPort..."
-verify_connectivity $publicIP $publicPort
+publicURL=$(openstack $options catalog show identity |awk '/public/ {print $4}')
+publicIP=$(echo $publicURL|sed 's/^.*http.*\:\/\///'|sed 's/.[^:]*$//')
+publicPort=$(echo $publicURL|grep -Po '(?<=:)\d+')
+https_enabled=$(echo $publicURL | grep 'https')
+if [[ -n $https_enabled ]]; then
+    echo ">>Verifying SSL connectivity to the public endpoint $publicIP:$publicPort..."
+    verify_SSL_connectivity $publicIP $publicPort
+else
+    echo ">>Verifying connectivity to the public endpoint $publicIP:$publicPort..."
+    verify_connectivity $publicIP $publicPort
+fi
 RETVAL=$?
 if [ $RETVAL -ne 0 ]; then
     echo "ERROR: Cannot talk to the public endpoint $publicIP:$publicPort ."
@@ -37,51 +92,24 @@ if [ $RETVAL -ne 0 ]; then
 fi
 echo "  ...OK"
 
-adminURL=$(openstack catalog show  identity |awk '/admin/ {print $4}')
-if [ -z ${adminURL} ]; then
-    echo "ERROR: Cannot determine the admin URL."
-    openstack catalog show identity
-    exit 1
-fi
-adminIP=$(echo $adminURL|sed 's/^.*http\:\/\///'|sed 's/.[^:]*$//')
-adminPort=$(echo $adminURL|sed 's/^.*://'|sed 's/.[^\/]*$//')
-echo ">>Verifying connectivity to the admin endpoint $adminIP:$adminPort..."
-verify_connectivity $adminIP $adminPort
-RETVAL=$?
-if [ $RETVAL -ne 0 ]; then
-    echo "ERROR: Cannot talk to the admin endpoint $adminIP:$adminPort ."
-    echo "$adminURL"
-    exit 1
-fi
-echo "  ...OK"
-
 
-echo "Checking OpenStack basic services:"
-commands=('openstack endpoint list' 'nova list' 'neutron net-list' \
-            'glance image-list' 'cinder list')
-for cmd in "${commands[@]}"
-do
-    service=$(echo $cmd | awk '{print $1}')
-    echo ">>Checking $service service..."
-    $cmd &>/dev/null
-    result=$?
-    if [ $result -ne 0 ];
-    then
-        echo "ERROR: Failed execution $cmd. The $service does not seem to be working."
-        exit 1
-    else
-        echo "  ...OK"
-    fi
+echo "Checking Required OpenStack services:"
+for service in $MANDATORY_SERVICES; do
+    check_service $service "true"
 done
+echo "Required OpenStack services are OK."
 
-echo "OpenStack services are OK."
+echo "Checking Optional OpenStack services:"
+for service in $OPTIONAL_SERVICES; do
+    check_service $service
+done
 
 echo "Checking External network..."
-networks=($(neutron net-list -F id | tail -n +4 | head -n -1 | awk '{print $2}'))
+networks=($(neutron $options net-list -F id | tail -n +4 | head -n -1 | awk '{print $2}'))
 is_external=False
 for net in "${networks[@]}"
 do
-    is_external=$(neutron net-show $net|grep "router:external"|awk '{print $4}')
+    is_external=$(neutron $options net-show $net|grep "router:external"|awk '{print $4}')
     if [ $is_external == "True" ]; then
         echo "External network found: $net"
         break