#!/bin/sh # # Nagios XI failover for Princeton University # # Initial version written by: # Eric Loyd (eloyd@everwatch.global) # EverWatch Global, Inc. PATH=/usr/sbin:/sbin:/usr/bin:/bin #primary="nagiosxi-p.princeton.edu" #secondary="nagiosxi-f.princeton.edu" backupDir="/store/backups/nagiosxi" force="" noping="false" primary="" secondary="" synconly="false" syncname="sync" extraCmd="" hostname=`/bin/hostname` . ./colors.sh while [ -n "$1" ]; do case "$1" in -H | --hostname) hostname="$2"; shift 2;; -S | --secondary) secondary="$2"; shift 2;; -P | --primary) primary="$2"; shift 2;; -n | --sync-name) syncname="$2"; shift 2;; -s | --sync-only) synconly="true"; shift 1;; --force) force="true"; shift 1;; --noping) noping="true"; shift 1;; *) extraCmd="$extraCmd $1"; shift 1;; esac done [ -z "$hostname" ] && warning "Invalid hostname." && exit 2 ping_host() { $noping && return 0 /usr/local/nagios/libexec/check_icmp -H $1 >/dev/null 2>&1 } stop_nagios() { /home/nagios/bin/nagios_startstop.sh stop } start_nagios() { /home/nagios/bin/nagios_startstop.sh start } clean_old_copies() { verbose "Cleaning up old sync files..." -n find ${backupDir} -maxdepth 1 -name sync.\* -mtime +1 -exec rm {} \; verbose "Done" } do_nothing() { warning "We are not the primary or secondary. Doing nothing." exit 1 } do_primary() { verbose "We are the primary. Checking to see if secondary is on the network..." ping_host ${secondary} [ $? -ne 0 ] && error "Cannot ping ${secondary}. Use --noping to continue wihout ping." && exit verbose "Creating package to send to secondary" /home/nagios/bin/rsync_xi.sh --prepend ${syncname} --primary "${primary}" --secondary "${secondary}" $extraCmd } do_secondary() { verbose "We are the secondary. Checking to see if primary is on the network..." ping_host ${primary} if [ $? -eq 0 ]; then if [ -z $force ]; then warning "The primary (${primary}) is on the network. This process will be aborted. Use --force to force it to continue." exit 1 else warning "The primary (${primary}) is on the network but --force specified. Proceeding anyway." fi fi verbose "Checking for package from the primary" syncfile=$(basename `ls -tr1 ${backupDir}/${syncname}* | tail -1`) fullfile="/store/backups/nagiosxi/$syncfile" if [ -f "$fullfile" ]; then verbose " Sync file found ($fullfile). Continuing." /home/nagios/bin/rsync_xi.sh --primary "${primary}" --secondary "${secondary}" --file "$fullfile" else warning " No sync file found. Continuing to activate Nagios." fi if [ $? -eq 0 ]; then chmod 0640 /usr/local/nagiosxi/var/keys/xi.key chown nagios:nagios /usr/local/nagiosxi/var/keys/xi.key verbose "This is intended to be manually executed when needed, so we assume you want to start Nagios..." -n sleep 5 start_nagios rm -f ${fullfile} verbose "Done." fi } case "$hostname" in $primary) do_primary;; $secondary) do_secondary;; *) do_nothing esac clean_old_copies exit 0