Refactor installers support code 99/24399/3
authorCarlos Goncalves <carlos.goncalves@neclab.eu>
Wed, 16 Nov 2016 09:55:01 +0000 (09:55 +0000)
committerCarlos Goncalves <carlos.goncalves@neclab.eu>
Sat, 10 Dec 2016 16:18:46 +0000 (16:18 +0000)
Restructuring tests directory to become more modular, and adding
installer helper functions.

JIRA: DOCTOR-71

Change-Id: Ib3846c35485cfa4f0a0881beb69811cdc0b8f66f
Signed-off-by: Carlos Goncalves <carlos.goncalves@neclab.eu>
tests/lib/installer [new file with mode: 0644]
tests/lib/installers/apex [new file with mode: 0644]
tests/lib/installers/fuel [new file with mode: 0644]
tests/lib/installers/local [new file with mode: 0644]
tests/run.sh

diff --git a/tests/lib/installer b/tests/lib/installer
new file mode 100644 (file)
index 0000000..cdde6ef
--- /dev/null
@@ -0,0 +1,34 @@
+#!/bin/bash
+
+INSTALLER_TYPE=${INSTALLER_TYPE:-local}
+INSTALLER_IP=${INSTALLER_IP:-none}
+ssh_opts_cpu="$ssh_opts"
+
+function is_installer_supported {
+    local installer="$1"
+    [[ -f $TOP_DIR/lib/installers/$installer ]]
+}
+
+function is_installer {
+    local installer="$1"
+    [[ $installer == $INSTALLER_TYPE ]]
+}
+
+function setup_installer {
+    if ! is_installer_supported $INSTALLER_TYPE; then
+        die $LINENO"INSTALLER_TYPE=$INSTALLER_TYPE is not supported."
+    fi
+
+    source $TOP_DIR/lib/installers/$INSTALLER_TYPE
+
+    if ! is_set INSTALLER_IP; then
+        get_installer_ip
+    fi
+
+    installer_get_ssh_keys
+    installer_apply_patches
+}
+
+function cleanup_installer {
+    cleanup_installer_$INSTALLER_TYPE
+}
diff --git a/tests/lib/installers/apex b/tests/lib/installers/apex
new file mode 100644 (file)
index 0000000..54b3dce
--- /dev/null
@@ -0,0 +1,24 @@
+#!/bin/bash
+
+function get_installer_ip {
+    local instack_mac=$(sudo virsh domiflist instack | awk '/default/{print $5}')
+    INSTALLER_IP=$(/usr/sbin/arp -e | grep ${instack_mac} | awk '{print $1}')
+    die_if_not_set $LINENO $INSTALLER_IP "No installer IP"
+}
+
+function installer_get_ssh_keys {
+    sudo scp $ssh_opts root@"$INSTALLER_IP":/home/stack/.ssh/id_rsa instack_key
+    sudo chown $(whoami):$(whoami) instack_key
+    chmod 400 instack_key
+    ssh_opts_cpu+=" -i instack_key"
+}
+
+function installer_apply_patches {
+    # Noop
+    return
+}
+
+function cleanup_installer_apex {
+    # Noop
+    return
+}
diff --git a/tests/lib/installers/fuel b/tests/lib/installers/fuel
new file mode 100644 (file)
index 0000000..34a8692
--- /dev/null
@@ -0,0 +1,107 @@
+#!/bin/bash
+
+function get_installer_ip {
+    local instack_mac=$(sudo virsh domiflist fuel-opnfv | awk '/pxebr/{print $5}')
+    INSTALLER_IP=$(/usr/sbin/arp -e | grep ${instack_mac} | awk '{print $1}')
+    die_if_not_set $LINENO $INSTALLER_IP "No installer IP"
+}
+
+function installer_get_ssh_keys {
+    sshpass -p r00tme scp $ssh_opts root@${INSTALLER_IP}:.ssh/id_rsa instack_key
+    sudo chown $(whoami):$(whoami) instack_key
+    chmod 400 instack_key
+    ssh_opts_cpu+=" -i instack_key"
+}
+
+function installer_apply_patches {
+    cat > set_conf.sh << 'END_TXT'
+#!/bin/bash
+if [ -e /etc/ceilometer/event_pipeline.yaml ]; then
+    if ! grep -q '^ *- notifier://?topic=alarm.all$' /etc/ceilometer/event_pipeline.yaml; then
+        sed -i 's|- notifier://|- notifier://?topic=alarm.all|' /etc/ceilometer/event_pipeline.yaml
+        echo "modify the ceilometer config"
+        service ceilometer-agent-notification restart
+    fi
+else
+    echo "ceilometer event_pipeline.yaml file does not exist"
+    exit 1
+fi
+if [ -e /etc/nova/nova.conf ]; then
+    if ! grep -q '^notification_driver=messaging$' /etc/nova/nova.conf; then
+        sed -i -r 's/notification_driver=/notification_driver=messaging/g' /etc/nova/nova.conf
+        echo "modify nova config"
+        service nova-api restart
+    fi
+else
+    echo "nova.conf file does not exist"
+    exit 1
+fi
+exit 0
+END_TXT
+
+    chmod +x set_conf.sh
+    CONTROLLER_IP=$(sshpass -p r00tme ssh 2>/dev/null $ssh_opts root@${INSTALLER_IP} \
+         "fuel node | grep controller | cut -d '|' -f 5|xargs")
+    for node in $CONTROLLER_IP;do
+        scp $ssh_opts_cpu set_conf.sh "root@$node:"
+        ssh $ssh_opts_cpu "root@$node" './set_conf.sh > set_conf.log 2>&1 &'
+        sleep 1
+        scp $ssh_opts_cpu "root@$node:set_conf.log" set_conf_$node.log
+    done
+
+    if grep -q "modify the ceilometer config" set_conf_*.log ; then
+        NEED_TO_RESTORE_CEILOMETER=true
+    fi
+    if grep -q "modify nova config" set_conf_*.log ; then
+        NEED_TO_RESTORE_NOVA=true
+    fi
+
+    echo "waiting service restart..."
+    sleep 60
+
+}
+
+function cleanup_installer_fuel {
+   if ! ($NEED_TO_RESTORE_CEILOMETER || $NEED_TO_RESTORE_NOVA) ; then
+       echo "Don't need to restore config"
+       exit 0
+   fi
+
+   echo "restore the configuration..."
+   cat > restore_conf.sh << 'END_TXT'
+#!/bin/bash
+if @NEED_TO_RESTORE_CEILOMETER@ ; then
+    if [ -e /etc/ceilometer/event_pipeline.yaml ]; then
+        if grep -q '^ *- notifier://?topic=alarm.all$' /etc/ceilometer/event_pipeline.yaml; then
+            sed -i 's|- notifier://?topic=alarm.all|- notifier://|' /etc/ceilometer/event_pipeline.yaml
+            service ceilometer-agent-notification restart
+        fi
+    else
+        echo "ceilometer event_pipeline.yaml file does not exist"
+        exit 1
+    fi
+fi
+if @NEED_TO_RESTORE_NOVA@ ; then
+    if [ -e /etc/nova/nova.conf ]; then
+        if grep -q '^notification_driver=messaging$' /etc/nova/nova.conf; then
+            sed -i -r 's/notification_driver=messaging/notification_driver=/g' /etc/nova/nova.conf
+            service nova-api restart
+        fi
+    else
+        echo "nova.conf file does not exist"
+        exit 1
+    fi
+fi
+exit 0
+END_TXT
+   sed -i -e "s/@NEED_TO_RESTORE_CEILOMETER@/$NEED_TO_RESTORE_CEILOMETER/" restore_conf.sh
+   sed -i -e "s/@NEED_TO_RESTORE_NOVA@/$NEED_TO_RESTORE_NOVA/" restore_conf.sh
+   chmod +x restore_conf.sh
+   for node in $CONTROLLER_IP;do
+       scp $ssh_opts_cpu restore_conf.sh "root@$node:"
+       ssh $ssh_opts_cpu "root@$node" './restore_conf.sh > restore_conf.log 2>&1 &'
+   done
+
+   echo "waiting service restart..."
+   sleep 60
+}
diff --git a/tests/lib/installers/local b/tests/lib/installers/local
new file mode 100644 (file)
index 0000000..e7aed14
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/bash
+
+function get_installer_ip {
+    # Noop
+    return
+}
+
+function installer_get_ssh_keys {
+    echo "INSTALLER_TYPE set to 'local'. Assuming SSH keys already exchanged with $COMPUTE_HOST"
+    return
+}
+
+function installer_apply_patches {
+    # Noop
+    return
+}
+
+function cleanup_installer_local {
+    # Noop
+    return
+}
index ea7ded5..141d836 100755 (executable)
@@ -26,10 +26,6 @@ DOCTOR_PROJECT=doctor
 #TODO: change back to `_member_` when JIRA DOCTOR-55 is done
 DOCTOR_ROLE=admin
 
-SUPPORTED_INSTALLER_TYPES="apex fuel local"
-INSTALLER_TYPE=${INSTALLER_TYPE:-local}
-INSTALLER_IP=${INSTALLER_IP:-none}
-
 SUPPORTED_INSPECTOR_TYPES="sample congress"
 INSPECTOR_TYPE=${INSPECTOR_TYPE:-sample}
 TOP_DIR=$(cd $(dirname "$0") && pwd)
@@ -38,151 +34,11 @@ ssh_opts="-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no"
 as_doctor_user="--os-username $DOCTOR_USER --os-password $DOCTOR_PW
                 --os-tenant-name $DOCTOR_PROJECT"
 
-if [[ ! "$SUPPORTED_INSTALLER_TYPES" =~ "$INSTALLER_TYPE" ]] ; then
-    echo "ERROR: INSTALLER_TYPE=$INSTALLER_TYPE is not supported."
-    exit 1
-fi
-
 if [[ ! "$SUPPORTED_INSPECTOR_TYPES" =~ "$INSPECTOR_TYPE" ]] ; then
     echo "ERROR: INSPECTOR_TYPE=$INSPECTOR_TYPE is not supported."
     exit 1
 fi
 
-get_installer_ip() {
-    if [[ "$INSTALLER_TYPE" == "apex" ]] ; then
-        if [[ "$INSTALLER_IP" == "none" ]] ; then
-            instack_mac=$(sudo virsh domiflist instack | awk '/default/{print $5}')
-            INSTALLER_IP=$(/usr/sbin/arp -e | grep ${instack_mac} | awk '{print $1}')
-        fi
-    elif [[ "$INSTALLER_TYPE" == "fuel" ]] ; then
-        if [[ "$INSTALLER_IP" == "none" ]] ; then
-            instack_mac=$(sudo virsh domiflist fuel-opnfv | awk '/pxebr/{print $5}')
-            INSTALLER_IP=$(/usr/sbin/arp -e | grep ${instack_mac} | awk '{print $1}')
-        fi
-    fi
-
-    if [[ "$INSTALLER_TYPE" != "local" ]] ; then
-        die_if_not_set $LINENO INSTALLER_IP "No installer IP"
-    fi
-}
-
-prepare_ssh_to_cloud() {
-    ssh_opts_cpu="$ssh_opts"
-
-    # get ssh key from installer node
-    if [[ "$INSTALLER_TYPE" == "apex" ]] ; then
-        sudo scp $ssh_opts root@"$INSTALLER_IP":/home/stack/.ssh/id_rsa instack_key
-        sudo chown $(whoami):$(whoami) instack_key
-        chmod 400 instack_key
-        ssh_opts_cpu+=" -i instack_key"
-    elif [[ "$INSTALLER_TYPE" == "fuel" ]] ; then
-        sshpass -p r00tme scp $ssh_opts root@${INSTALLER_IP}:.ssh/id_rsa instack_key
-        sudo chown $(whoami):$(whoami) instack_key
-        chmod 400 instack_key
-        ssh_opts_cpu+=" -i instack_key"
-    elif [[ "$INSTALLER_TYPE" == "local" ]] ; then
-        echo "INSTALLER_TYPE set to 'local'. Assuming SSH keys already exchanged with $COMPUTE_HOST"
-    fi
-}
-
-prepare_test_env() {
-    #TODO delete it when fuel support the configuration
-    if [[ "$INSTALLER_TYPE" == "fuel" ]] ; then
-        echo "modify the configuration..."
-        cat > set_conf.sh << 'END_TXT'
-#!/bin/bash
-if [ -e /etc/ceilometer/event_pipeline.yaml ]; then
-    if ! grep -q '^ *- notifier://?topic=alarm.all$' /etc/ceilometer/event_pipeline.yaml; then
-        sed -i 's|- notifier://|- notifier://?topic=alarm.all|' /etc/ceilometer/event_pipeline.yaml
-        echo "modify the ceilometer config"
-        service ceilometer-agent-notification restart
-    fi
-else
-    echo "ceilometer event_pipeline.yaml file does not exist"
-    exit 1
-fi
-if [ -e /etc/nova/nova.conf ]; then
-    if ! grep -q '^notification_driver=messaging$' /etc/nova/nova.conf; then
-        sed -i -r 's/notification_driver=/notification_driver=messaging/g' /etc/nova/nova.conf
-        echo "modify nova config"
-        service nova-api restart
-    fi
-else
-    echo "nova.conf file does not exist"
-    exit 1
-fi
-exit 0
-END_TXT
-        chmod +x set_conf.sh
-        CONTROLLER_IP=$(sshpass -p r00tme ssh 2>/dev/null $ssh_opts root@${INSTALLER_IP} \
-             "fuel node | grep controller | cut -d '|' -f 5|xargs")
-        for node in $CONTROLLER_IP;do
-            scp $ssh_opts_cpu set_conf.sh "root@$node:"
-            ssh $ssh_opts_cpu "root@$node" './set_conf.sh > set_conf.log 2>&1 &'
-            sleep 1
-            scp $ssh_opts_cpu "root@$node:set_conf.log" set_conf_$node.log
-        done
-
-        if grep -q "modify the ceilometer config" set_conf_*.log ; then
-            NEED_TO_RESTORE_CEILOMETER=true
-        fi
-        if grep -q "modify nova config" set_conf_*.log ; then
-            NEED_TO_RESTORE_NOVA=true
-        fi
-
-        echo "waiting service restart..."
-        sleep 60
-    fi
-}
-
-restore_test_env() {
-    #TODO delete it when fuel support the configuration
-    if [[ "$INSTALLER_TYPE" == "fuel" ]] ; then
-        if ! ($NEED_TO_RESTORE_CEILOMETER || $NEED_TO_RESTORE_NOVA) ; then
-            echo "Don't need to restore config"
-            exit 0
-        fi
-
-        echo "restore the configuration..."
-        cat > restore_conf.sh << 'END_TXT'
-#!/bin/bash
-if @NEED_TO_RESTORE_CEILOMETER@ ; then
-    if [ -e /etc/ceilometer/event_pipeline.yaml ]; then
-        if grep -q '^ *- notifier://?topic=alarm.all$' /etc/ceilometer/event_pipeline.yaml; then
-            sed -i 's|- notifier://?topic=alarm.all|- notifier://|' /etc/ceilometer/event_pipeline.yaml
-            service ceilometer-agent-notification restart
-        fi
-    else
-        echo "ceilometer event_pipeline.yaml file does not exist"
-        exit 1
-    fi
-fi
-if @NEED_TO_RESTORE_NOVA@ ; then
-    if [ -e /etc/nova/nova.conf ]; then
-        if grep -q '^notification_driver=messaging$' /etc/nova/nova.conf; then
-            sed -i -r 's/notification_driver=messaging/notification_driver=/g' /etc/nova/nova.conf
-            service nova-api restart
-        fi
-    else
-        echo "nova.conf file does not exist"
-        exit 1
-    fi
-fi
-exit 0
-END_TXT
-        sed -i -e "s/@NEED_TO_RESTORE_CEILOMETER@/$NEED_TO_RESTORE_CEILOMETER/" restore_conf.sh
-        sed -i -e "s/@NEED_TO_RESTORE_NOVA@/$NEED_TO_RESTORE_NOVA/" restore_conf.sh
-        chmod +x restore_conf.sh
-        for node in $CONTROLLER_IP;do
-            scp $ssh_opts_cpu restore_conf.sh "root@$node:"
-            ssh $ssh_opts_cpu "root@$node" './restore_conf.sh > restore_conf.log 2>&1 &'
-        done
-
-        echo "waiting service restart..."
-        sleep 60
-    fi
-}
-
 get_compute_host_info() {
     # get computer host info which VM boot in
     COMPUTE_HOST=$(openstack $as_doctor_user server show $VM_NAME |
@@ -190,18 +46,18 @@ get_compute_host_info() {
     compute_host_in_undercloud=${COMPUTE_HOST%%.*}
     die_if_not_set $LINENO COMPUTE_HOST "Failed to get compute hostname"
 
-    if [[ "$INSTALLER_TYPE" == "apex" ]] ; then
+    if is_installer apex; then
         COMPUTE_USER=${COMPUTE_USER:-heat-admin}
         COMPUTE_IP=$(sudo ssh $ssh_opts $INSTALLER_IP \
              "source stackrc; \
              nova show $compute_host_in_undercloud \
              | awk '/ ctlplane network /{print \$5}'")
-    elif [[ "$INSTALLER_TYPE" == "fuel" ]] ; then
+    elif is_installer fuel; then
         COMPUTE_USER=${COMPUTE_USER:-root}
         node_id=$(echo $compute_host_in_undercloud | cut -d "-" -f 2)
         COMPUTE_IP=$(sshpass -p r00tme ssh 2>/dev/null $ssh_opts root@${INSTALLER_IP} \
              "fuel node|awk -F '|' -v id=$node_id '{if (\$1 == id) print \$5}' |xargs")
-    elif [[ "$INSTALLER_TYPE" == "local" ]] ; then
+    elif is_installer local; then
         COMPUTE_USER=${COMPUTE_USER:-$(whoami)}
         COMPUTE_IP=$(getent hosts "$COMPUTE_HOST" | awk '{ print $1 }')
     fi
@@ -225,13 +81,13 @@ get_compute_host_info() {
 
 get_consumer_ip() {
     local get_consumer_command="ip route get $COMPUTE_IP | awk '/ src /{print \$NF}'"
-    if [[ "$INSTALLER_TYPE" == "apex" ]] ; then
+    if is_installer apex; then
         CONSUMER_IP=$(sudo ssh $ssh_opts root@$INSTALLER_IP \
                       "$get_consumer_command")
-    elif [[ "$INSTALLER_TYPE" == "fuel" ]] ; then
+    elif is_installer fuel; then
         CONSUMER_IP=$(sudo sshpass -p r00tme ssh $ssh_opts root@${INSTALLER_IP} \
                       "$get_consumer_command")
-    elif [[ "$INSTALLER_TYPE" == "local" ]] ; then
+    elif is_installer local; then
         CONSUMER_IP=`$get_consumer_command`
     fi
     echo "CONSUMER_IP=$CONSUMER_IP"
@@ -397,13 +253,13 @@ start_consumer() {
     # NOTE(r-mibu): create tunnel to the controller nodes, so that we can
     # avoid some network problems dpends on infra and installers.
     # This tunnel will be terminated by stop_consumer() or after 10 mins passed.
-    if [[ "$INSTALLER_TYPE" != "local" ]] ; then
-        if [[ "$INSTALLER_TYPE" == "apex" ]] ; then
+    if ! is_installer local; then
+        if is_installer apex; then
             CONTROLLER_IPS=$(sudo ssh $ssh_opts $INSTALLER_IP \
                              "source stackrc; \
                              nova list | grep ' overcloud-controller-[0-9] ' \
                              | sed -e 's/^.*ctlplane=//' -e 's/ *|\$//'")
-        elif [[ "$INSTALLER_TYPE" == "fuel" ]] ; then
+        elif is_installer fuel; then
             CONTROLLER_IPS=$(sshpass -p r00tme ssh 2>/dev/null $ssh_opts root@${INSTALLER_IP} \
                             "fuel node | grep controller | cut -d '|' -f 5|xargs")
         fi
@@ -424,7 +280,7 @@ stop_consumer() {
     print_log consumer.log
 
     # NOTE(r-mibu): terminate tunnels to the controller nodes
-    if [[ "$INSTALLER_TYPE" != "local" ]] ; then
+    if ! is_installer local; then
         for ip in $CONTROLLER_IPS
         do
             forward_rule="-R $CONSUMER_PORT:localhost:$CONSUMER_PORT"
@@ -534,7 +390,7 @@ cleanup() {
     openstack project delete "$DOCTOR_PROJECT"
     openstack user delete "$DOCTOR_USER"
 
-    restore_test_env
+    cleanup_installer
 }
 
 
@@ -543,11 +399,9 @@ echo "Note: doctor/tests/run.sh has been executed."
 trap cleanup EXIT
 
 source $TOP_DIR/functions-common
+source $TOP_DIR/lib/installer
 
-echo "preparing test env..."
-get_installer_ip
-prepare_ssh_to_cloud
-prepare_test_env
+setup_installer
 
 echo "preparing VM image..."
 download_image