#!/bin/bash COMPUTE_USER=${COMPUTE_USER:-heat-admin} ssh_opts_cpu="$ssh_opts -i instack_key" function get_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 chown $(whoami):$(whoami) instack_key chmod 400 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 { # 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_conf_bak=/etc/congress/congress.conf.bak 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 cp $co_conf $co_conf_bak sudo sed -i -e "/^drivers/s/$/,$co_entry/" $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_conf_bak=/etc/congress/congress.conf.bak if [ -e $co_conf_bak ]; then echo "restore the congress config" sudo mv $co_conf_bak $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 { installer_revert_patches return }