Merge "Refactor installers support code"
authorRyota Mibu <r-mibu@cq.jp.nec.com>
Wed, 14 Dec 2016 02:51:31 +0000 (02:51 +0000)
committerGerrit Code Review <gerrit@opnfv.org>
Wed, 14 Dec 2016 02:51:31 +0000 (02:51 +0000)
1  2 
tests/run.sh

diff --combined 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 |
      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
  
  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" \
  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
  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
      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