From: Ryota Mibu Date: Wed, 14 Dec 2016 02:51:31 +0000 (+0000) Subject: Merge "Refactor installers support code" X-Git-Tag: danube.1.RC1~36 X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=commitdiff_plain;h=40cba233d16e355b078e368772ad4aadbb5f91b1;hp=-c;p=doctor.git Merge "Refactor installers support code" --- 40cba233d16e355b078e368772ad4aadbb5f91b1 diff --combined tests/run.sh index b6bfc0ba,141d836a..f1087baf --- a/tests/run.sh +++ b/tests/run.sh @@@ -26,10 -26,6 +26,6 @@@ DOCTOR_PROJECT=docto #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 +34,11 @@@ ssh_opts="-o UserKnownHostsFile=/dev/nu 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 +46,18 @@@ 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 +81,13 @@@ 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" @@@ -299,6 -155,12 +155,6 @@@ create_alarm() -q "traits.state=string::error; traits.instance_id=string::$vm_id" } -print_log() { - log_file=$1 - echo "$log_file:" - sed -e 's/^/ /' "$log_file" -} - start_monitor() { pgrep -f "python monitor.py" && return 0 sudo -E python monitor.py "$COMPUTE_HOST" "$COMPUTE_IP" "$INSPECTOR_TYPE" \ @@@ -308,6 -170,7 +164,6 @@@ stop_monitor() { pgrep -f "python monitor.py" || return 0 sudo kill $(pgrep -f "python monitor.py") - print_log monitor.log } congress_add_rule() { @@@ -374,6 -237,7 +230,6 @@@ stop_inspector() if [[ "$INSPECTOR_TYPE" == "sample" ]] ; then pgrep -f "python inspector.py" || return 0 kill $(pgrep -f "python inspector.py") - print_log inspector.log elif [[ "$INSPECTOR_TYPE" == "congress" ]] ; then congress_del_rule host_force_down classification congress_del_rule error_vm_states classification @@@ -389,13 -253,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 @@@ -413,14 -277,16 +269,14 @@@ stop_consumer() { pgrep -f "python consumer.py" || return 0 kill $(pgrep -f "python consumer.py") - 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" tunnel_command="sudo ssh $ssh_opts_cpu $COMPUTE_USER@$ip $forward_rule sleep 600" kill $(pgrep -f "$tunnel_command") - print_log "ssh_tunnel.${ip}.log" done fi } @@@ -504,6 -370,7 +360,6 @@@ cleanup() sleep 240 check_host_status "UP" scp $ssh_opts_cpu "$COMPUTE_USER@$COMPUTE_IP:disable_network.log" . - print_log disable_network.log openstack $as_doctor_user server list | grep -q " $VM_NAME " && openstack $as_doctor_user server delete "$VM_NAME" sleep 1 @@@ -523,7 -390,7 +379,7 @@@ openstack project delete "$DOCTOR_PROJECT" openstack user delete "$DOCTOR_USER" - restore_test_env + cleanup_installer } @@@ -532,11 -399,9 +388,9 @@@ echo "Note: doctor/tests/run.sh has bee 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