fix some bugs for python verify jobs:
[doctor.git] / tests / lib / installers / apex
index 45a5dcd..3d94e1c 100644 (file)
 #!/bin/bash
 
+COMPUTE_USER=${COMPUTE_USER:-heat-admin}
+ssh_opts_cpu="$ssh_opts -i instack_key"
+
 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"
+    is_set INSTALLER_IP && return
+    INSTALLER_IP=$(get_first_vnic_ip undercloud)
 }
 
 function installer_get_ssh_keys {
-    sudo scp $ssh_opts root@"$INSTALLER_IP":/home/stack/.ssh/id_rsa instack_key
+    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 get_controller_ips {
+    is_set CONTROLLER_IPS && return
+    get_installer_ip
+    CONTROLLER_IPS=$(sudo ssh $ssh_opts $INSTALLER_IP \
+                     "source stackrc
+                      nova list | grep ' overcloud-controller-[0-9] ' | \
+                      sed -e 's/^.*ctlplane=//' -e 's/ *|\$//'")
+    die_if_not_set $LINENO CONTROLLER_IPS "No controller IPs"
 }
 
 function installer_apply_patches {
-    # Noop
-    return
+    # TODO(r-mibu): fix the followings in upstream (apex)
+    for node in $CONTROLLER_IPS;do
+        echo "check controller configuration for doctor ($node)"
+        ssh $ssh_opts_cpu "heat-admin@$node" '
+            set -x
+            date
+            echo "### apply patches (installer=apex)"
+
+            ep_conf=/etc/ceilometer/event_pipeline.yaml
+            ep_entry="- notifier://?topic=alarm.all"
+            if sudo grep -e "$ep_entry" $ep_conf; then
+                echo "NOTE: ceilometer is configured as we needed"
+            else
+                echo "modify the ceilometer config"
+                sudo sed -i -e "$ a \ \ \ \ \ \ \ \ \ \ $ep_entry    # added by doctor script" $ep_conf
+                sudo systemctl restart openstack-ceilometer-notification.service
+            fi
+
+            co_conf=/etc/congress/congress.conf
+            co_entry="congress.datasources.doctor_driver.DoctorDriver"
+            if sudo grep -e "^drivers.*$co_entry" $co_conf; then
+                echo "NOTE: congress is configured as we needed"
+            else
+                echo "modify the congress config"
+                sudo sed -i -e "/^drivers/s/$/,$co_entry    # added by doctor script/" \
+                    $co_conf
+                sudo systemctl restart openstack-congress-server.service
+            fi
+            ' > installer_apply_patches_$node.log 2>&1
+    done
+}
+
+function setup_installer {
+    get_installer_ip
+    installer_get_ssh_keys
+    get_controller_ips
+    installer_apply_patches
+
+    # NOTE: while executing command as doctor user,
+    #       'OS_PROJECT_ID' env parameter make openstack clients confused.
+    unset OS_PROJECT_ID
+}
+
+function get_compute_ip_from_hostname {
+    local compute_host=$1
+
+    compute_host_in_undercloud=${compute_host%%.*}
+    COMPUTE_IP=$(sudo ssh $ssh_opts $INSTALLER_IP \
+                 "source stackrc;
+                  nova show $compute_host_in_undercloud  | \
+                  awk '/ ctlplane network /{print \$5}'")
+    die_if_not_set $LINENO COMPUTE_IP "Could get IP address of $compute_host."
+}
+
+function installer_revert_patches {
+    # TODO(r-mibu): fix the followings in upstream (apex)
+    get_controller_ips
+    for node in $CONTROLLER_IPS;do
+        echo "restore controller configuration if touched ($node)"
+        ssh $ssh_opts_cpu "heat-admin@$node" '
+            set -x
+            echo "### revert patches (installer=apex)"
+            date
+
+            co_conf=/etc/congress/congress.conf
+            co_entry="congress.datasources.doctor_driver.DoctorDriver"
+            if sudo grep -q -e "# added by doctor script" $co_conf; then
+                echo "modify the congress config"
+                sudo sed -i -e "/^drivers/s/^\(.*\),$co_entry    # added by doctor script/\1/" $co_conf
+                sudo systemctl restart openstack-congress-server.service
+            fi
+
+            ep_conf=/etc/ceilometer/event_pipeline.yaml
+            if sudo grep -q -e "# added by doctor script" $ep_conf; then
+                echo "modify the ceilometer config"
+                sudo sed -ie "/# added by doctor script/d" $ep_conf
+                sudo systemctl restart openstack-ceilometer-notification.service
+            fi
+            ' >> installer_apply_patches_$node.log 2>&1
+    done
 }
 
-function cleanup_installer_apex {
-    # Noop
+function cleanup_installer {
+    installer_revert_patches
     return
 }