summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRyota Mibu <r-mibu@cq.jp.nec.com>2016-12-14 02:51:31 +0000
committerGerrit Code Review <gerrit@opnfv.org>2016-12-14 02:51:31 +0000
commit40cba233d16e355b078e368772ad4aadbb5f91b1 (patch)
tree79b448f6b4b00553302aec928fd772835858e12c
parent6d0620d15a3391d4a0a9f2bec9de143ef68734d2 (diff)
parent83076cf49ebd8ded4d5d5e9667fcd8e9e9be4172 (diff)
Merge "Refactor installers support code"
-rw-r--r--tests/lib/installer34
-rw-r--r--tests/lib/installers/apex24
-rw-r--r--tests/lib/installers/fuel107
-rw-r--r--tests/lib/installers/local21
-rwxr-xr-xtests/run.sh172
5 files changed, 199 insertions, 159 deletions
diff --git a/tests/lib/installer b/tests/lib/installer
new file mode 100644
index 00000000..cdde6eff
--- /dev/null
+++ b/tests/lib/installer
@@ -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
index 00000000..54b3dce2
--- /dev/null
+++ b/tests/lib/installers/apex
@@ -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
index 00000000..34a86922
--- /dev/null
+++ b/tests/lib/installers/fuel
@@ -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
index 00000000..e7aed14f
--- /dev/null
+++ b/tests/lib/installers/local
@@ -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
+}
diff --git a/tests/run.sh b/tests/run.sh
index b6bfc0ba..f1087baf 100755
--- a/tests/run.sh
+++ b/tests/run.sh
@@ -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"
@@ -389,13 +245,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
@@ -415,7 +271,7 @@ stop_consumer() {
kill $(pgrep -f "python consumer.py")
# 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"
@@ -523,7 +379,7 @@ cleanup() {
openstack project delete "$DOCTOR_PROJECT"
openstack user delete "$DOCTOR_USER"
- restore_test_env
+ cleanup_installer
}
@@ -532,11 +388,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