From 83076cf49ebd8ded4d5d5e9667fcd8e9e9be4172 Mon Sep 17 00:00:00 2001 From: Carlos Goncalves Date: Wed, 16 Nov 2016 09:55:01 +0000 Subject: Refactor installers support code Restructuring tests directory to become more modular, and adding installer helper functions. JIRA: DOCTOR-71 Change-Id: Ib3846c35485cfa4f0a0881beb69811cdc0b8f66f Signed-off-by: Carlos Goncalves --- tests/run.sh | 172 +++++------------------------------------------------------ 1 file changed, 13 insertions(+), 159 deletions(-) (limited to 'tests/run.sh') diff --git a/tests/run.sh b/tests/run.sh index ea7ded50..141d836a 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" @@ -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 -- cgit 1.2.3-korg