#!/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 instack)
}
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
}