#!/bin/bash set -eux pacemaker_status=$(systemctl is-active pacemaker) check_interval=3 function check_resource { if [ "$#" -ne 3 ]; then echo "ERROR: check_resource function expects 3 parameters, $# given" | tee /dev/fd/2 exit 1 fi service=$1 state=$2 timeout=$3 if [ "$state" = "stopped" ]; then match_for_incomplete='Started' else # started match_for_incomplete='Stopped' fi if timeout -k 10 $timeout crm_resource --wait; then node_states=$(pcs status --full | grep "$service" | grep -v Clone) if echo "$node_states" | grep -q "$match_for_incomplete"; then echo "ERROR: cluster settled but $service was not in $state state, exiting." | tee /dev/fd/2 exit 1 else echo "$service has $state" fi else echo "ERROR: cluster remained unstable for more than $timeout seconds, exiting." | tee /dev/fd/2 exit 1 fi } # Run if pacemaker is running, we're the bootstrap node, # and we're updating the deployment (not creating). if [ "$pacemaker_status" = "active" -a \ "$(hiera bootstrap_nodeid)" = "$(facter hostname)" -a \ "$(hiera update_identifier)" != "nil" ]; then #ensure neutron constraints like #https://review.openstack.org/#/c/245093/ if pcs constraint order show | grep "start neutron-server-clone then start neutron-ovs-cleanup-clone"; then pcs constraint remove order-neutron-server-clone-neutron-ovs-cleanup-clone-mandatory fi pcs resource disable httpd check_resource httpd stopped 300 pcs resource disable openstack-keystone check_resource openstack-keystone stopped 1800 if pcs status | grep haproxy-clone; then pcs resource restart haproxy-clone fi pcs resource restart redis-master pcs resource restart mongod-clone pcs resource restart rabbitmq-clone pcs resource restart memcached-clone pcs resource restart galera-master pcs resource enable openstack-keystone check_resource openstack-keystone started 1800 pcs resource enable httpd check_resource httpd started 800 fi