From 2ef08250d3ffb697041e3ef626c408ef8fec3f40 Mon Sep 17 00:00:00 2001 From: Eric Loyd Date: Sun, 25 Apr 2021 12:49:22 -0400 Subject: [PATCH] new version for 2021 --- failover/Makefile | 14 +- failover/failover.sh | 29 ++- failover/nagios_startstop.sh | 2 +- failover/rsync_xi.sh | 462 +++++++++++++++++++++++++++++------ 4 files changed, 411 insertions(+), 96 deletions(-) diff --git a/failover/Makefile b/failover/Makefile index 5d1c136..6ef1e14 100644 --- a/failover/Makefile +++ b/failover/Makefile @@ -1,11 +1,7 @@ -primary: sync - ./failover.sh -P nagiosxi-p.princeton.edu -S nagiosxi-f.princeton.edu -H nagiosxi-p.princeton.edu +default: test -secondary: - ./failover.sh -P nagiosxi-p.princeton.edu -S nagiosxi-f.princeton.edu -H nagiosxi-f.princeton.edu +test: + ./failover.sh -P primary.localdomain -S secondary.localdomain -sync: - rsync -av /home/nagios/bin/ nagiosxi-f.princeton.edu:/home/nagios/bin/ - -copy: - rsync -av /root/princeton/failover/ /home/nagios/bin; chown -R nagios. /home/nagios/bin +go: + ./failover.sh -P primary.localdomain -S secondary.localdomain -E diff --git a/failover/failover.sh b/failover/failover.sh index f4e17e9..6a2adc7 100755 --- a/failover/failover.sh +++ b/failover/failover.sh @@ -8,10 +8,13 @@ PATH=/usr/sbin:/sbin:/usr/bin:/bin -primary="nagiosxi-p.princeton.edu" -secondary="nagiosxi-f.princeton.edu" +#primary="nagiosxi-p.princeton.edu" +#secondary="nagiosxi-f.princeton.edu" +primary="" +secondary="" synconly="false" syncname="sync" +extraCmd="" hostname=`/bin/hostname` @@ -24,7 +27,7 @@ while [ -n "$1" ]; do -P | --primary) primary="$2"; shift 2;; -n | --sync-name) syncname="$2"; shift 2;; -s | --sync-only) synconly="true"; shift 1;; - *) shift 1;; + *) extraCmd="$extraCmd $1"; shift 1;; esac done @@ -37,20 +40,25 @@ do_nothing() { do_primary() { verbose "We are the primary. Creating package to send to secondary." - ./rsync_xi.sh --prepend ${syncname} --secondary "${secondary}" - cp /usr/local/nagiosxi/html/includes/components/custom-includes/css/header-gradient.css.primary /usr/local/nagiosxi/html/includes/components/custom-includes/css/header-gradient.css + ./rsync_xi.sh --prepend ${syncname} --primary "${primary}" --secondary "${secondary}" $extraCmd + if [ -r "/usr/local/nagiosxi/html/includes/components/custom-includes/css/header-gradient.css.primary" -a -w "/usr/local/nagiosxi/html/includes/components/custom-includes/css/header-gradient.css" ]; then + verbose "Copying local gradient files" + cp /usr/local/nagiosxi/html/includes/components/custom-includes/css/header-gradient.css.primary /usr/local/nagiosxi/html/includes/components/custom-includes/css/header-gradient.css + fi } do_secondary() { verbose "We are the secondary. Expanding package from the primary." - syncfile=`ls -tr1 /store/backups/nagiosxi/ | tail -1` + syncfile=$(basename `ls -tr1 /store/backups/nagiosxi/${syncname}* | tail -1`) [ -z "$syncfile" ] && error "No sync file ($syncfile) found." && exit 2 - ./restore_xi.sh /store/backups/nagiosxi/$syncfile + ./rsync_xi.sh --primary "${primary}" --secondary "${secondary}" --file "/store/backups/nagiosxi/$syncfile" if [ $? -eq 0 ]; then - verbose "Stopping Nagios services because we are the secondary" + verbose "Ensuring Nagios services are stopped because we are the secondary" sleep 2 - ./nagios_startstop.sh stop - cp /usr/local/nagiosxi/html/includes/components/custom-includes/css/header-gradient.css.secondary /usr/local/nagiosxi/html/includes/components/custom-includes/css/header-gradient.css + /home/nagios/bin/nagios_startstop.sh stop + if [ -r "/usr/local/nagiosxi/html/includes/components/custom-includes/css/header-gradient.css.secondary" -a -w "/usr/local/nagiosxi/html/includes/components/custom-includes/css/header-gradient.css" ]; then + cp /usr/local/nagiosxi/html/includes/components/custom-includes/css/header-gradient.css.secondary /usr/local/nagiosxi/html/includes/components/custom-includes/css/header-gradient.css + fi rm -f ${syncfile} fi } @@ -62,3 +70,4 @@ case "$hostname" in esac exit 0 + diff --git a/failover/nagios_startstop.sh b/failover/nagios_startstop.sh index c862100..4f89869 100755 --- a/failover/nagios_startstop.sh +++ b/failover/nagios_startstop.sh @@ -47,4 +47,4 @@ while [ -n "$1" ]; do stop) stop_engine; shift 1;; *) shift 1;; esac -done \ No newline at end of file +done diff --git a/failover/rsync_xi.sh b/failover/rsync_xi.sh index d9cd68a..90b9f4e 100755 --- a/failover/rsync_xi.sh +++ b/failover/rsync_xi.sh @@ -1,17 +1,24 @@ #!/bin/bash # # Creates a Full Backup of Nagios XI -# Copyright (c) 2011-2018 Nagios Enterprises, LLC. All rights reserved. +# Copyright (c) 2011-2020 Nagios Enterprises, LLC. All rights reserved. # PATH=/home/nagios/bin:/usr/bin:/bin . /home/nagios/bin/colors.sh -BASEDIR=/usr/local/nagiosxi/scripts -# FIXME +BASEDIR="/usr/local/nagiosxi/scripts" SBLOG="/usr/local/nagiosxi/var/components/scheduledbackups.log" -ts=`date +%s` -secondary="" + +timeStamp=`date +%s` +hostname="`/bin/hostname`" +pName="" +sName="" +noping=/bin/false +execute="-n" +syncfile="" +isP=/bin/false +isS=/bin/false # Import Nagios XI and xi-sys.cfg config vars . $BASEDIR/../var/xi-sys.cfg @@ -22,8 +29,12 @@ eval $(php $BASEDIR/import_xiconfig.php) ############################### usage () { echo "" - echo "Use this script to backup Nagios XI." + echo "Use this script to synchronize primary XI to secondary, or to expand primary information on secondary" echo "" + echo " -P | --primary Set the FQDN of the primary (what is returned by /bin/hostname)" + echo " -S | --secondary Set the FQDN of the secondary (what is returned by /bin/hostname)" + echo " -F | --file Set the name of the file that we will be restoring from on the secondary" + echo " -E | --execute Perform the sync (otherwise, it just does a dry-run)" echo " -n | --name Set the name of the backup minus the .tar.gz" echo " -p | --prepend Prepend a string to the .tar.gz name" echo " -a | --append Append a string to the .tar.gz name" @@ -36,12 +47,24 @@ usage () { ############################### while [ -n "$1" ]; do case "$1" in - -s | --secondary) - secondary="$2" + -P | --primary) + pName="$2" + ;; + -S | --secondary) + sName="$2" + ;; + -E | --execute) + execute="" + ;; + -F | --file) + syncfile="$2" + ;; + --noping) + noping=/bin/true ;; -h | --help) usage - exit 1 + exit 0 ;; -n | --name) fullname=$2 @@ -59,10 +82,13 @@ while [ -n "$1" ]; do shift done -[ -z "$secondary" ] && echo "Secondary not specified." && exit 2 +do_primary() { +ping_host $sName +[ $? -ne 0 ] && echo "Cannot ping $sName. Use --noping to continue wihout ping." && exit +echo "Starting sync from $pName to $sName" # Restart nagios to forcibly update retention.dat -echo "Restart nagios to forcibly update retention.dat" +verbose "Restarting nagios to forcibly update retention.dat" sudo $BASEDIR/manage_services.sh stop nagios sleep 5 sudo $BASEDIR/manage_services.sh start nagios @@ -81,75 +107,71 @@ cd $rootdir name=$fullname if [ -z $fullname ]; then - name=$prepend$ts$append + name=$prepend$timeStamp$append fi # Get current Unix timestamp as name if [ -z $name ]; then - name=$ts + name=timeStampts fi # My working directory -mydir=$rootdir/$name +workDir=$rootdir/$name # Make directory for this specific backup -mkdir -p $mydir +mkdir -p $workDir -############################## -# BACKUP DIRS -############################## -# sudo rsync -av --rsync-path="sudo /bin/rsync" /usr/local/test/ nagios@secondary:/usr/local/test/ do_rsync() { verbose "Syncing $*..." - sudo rsync -av --delete --delete-after --rsync-path="sudo /bin/rsync" "$1" "nagios@${secondary}:${1}" + src="$1" + [ ! -e "$src" ] && warning " OK: No such file or directory: $src" && return + [ -d "$src" ] && sudo rsync -a --delete --delete-after --rsync-path="sudo /bin/rsync" ${execute} ${src}/ nagios@${sName}:${src}/ + [ -f "$src" ] && sudo rsync -a --delete --delete-after --rsync-path="sudo /bin/rsync" ${execute} ${src} nagios@${sName}:${src} } +do_backup_files() { +############################## +# BACKUP DIRS +############################## + # Only backup NagiosQL if it exists if [ -d "/var/www/html/nagiosql" ]; then - do_rsync /var/www/html/nagiosql/ - do_rsync /etc/nagiosql/ -fi -# Backup ramdisk if it exists -if [ -f "/etc/sysconfig/nagios" ]; then - do_rsync /etc/sysconfig/nagios -fi -if [ "$distro" == "Ubuntu" -o "$distro" == "Debian" ]; then - do_rsync /var/spool/cron/crontabs/$apacheuser -else - do_rsync /var/spool/cron/apache -fi -if [ -d "/etc/apache2/sites-available" ]; then - do_rsync /etc/apache2/sites-available/default-ssl.conf -else - do_rsync $httpdconfdir/ssl.conf + do_rsync /var/www/html/nagiosql + do_rsync /etc/nagiosql fi -do_rsync /etc/mrtg/conf.d/ -do_rsync /etc/mrtg/mrtg.cfg -do_rsync /etc/snmp/ -do_rsync /home/nagios/ -do_rsync /usr/local/nagios/ -do_rsync /usr/local/nagiosmobile/ -do_rsync /usr/local/nagiosxi/ -do_rsync /usr/local/nagvis/ -do_rsync /usr/local/nrdp/ -do_rsync /usr/share/snmp/ -do_rsync /var/lib/mrtg/ - +do_rsync /etc/apache2/sites-available/default-ssl.conf do_rsync /etc/logrotate.d/nagiosxi -do_rsync $httpdconfdir/nagiosxi.conf +do_rsync /etc/mrtg/conf.d +do_rsync /etc/mrtg/mrtg.cfg +do_rsync /etc/snmp +do_rsync /etc/sysconfig/nagios +do_rsync /home/nagios +do_rsync $httpdconfdir/nagios.conf do_rsync $httpdconfdir/nagiosmobile.conf +do_rsync $httpdconfdir/nagiosxi.conf do_rsync $httpdconfdir/nagvis.conf do_rsync $httpdconfdir/nrdp.conf +do_rsync $httpdconfdir/ssl.conf +do_rsync /usr/local/nagios +do_rsync /usr/local/nagiosmobile +do_rsync /usr/local/nagiosxi +do_rsync /usr/local/nagvis +do_rsync /usr/local/nrdp +do_rsync /usr/share/snmp +do_rsync /var/lib/mrtg +do_rsync /var/spool/cron/apache +do_rsync /var/spool/cron/crontabs/$apacheuser -verbose "Checking nagios.cfg for nonstandard directories..." -for dir in `egrep "[^#].*=" /usr/local/nagios/etc/nagios.cfg | awk -F= '/\// {print $2}' | egrep -v "(usr/lib|/usr/local/nagios|/tmp|/var/run)" | rev | cut -d "/" -f 2- | rev | sort -u`; do - echo "Directory $dir needs to be copied" - do_rsync "${dir}/" -done -verbose "Backing up MySQL databases..." -mkdir -p $mydir/mysql +} # End of do_backup_files + +do_backup_sql() { +############################## +# BACKUP DATABASES +############################## +echo "Backing up MySQL databases..." +mkdir -p $workDir/mysql if [[ "$cfg__db_info__ndoutils__dbserver" == *":"* ]]; then ndoutils_dbport=`echo "$cfg__db_info__ndoutils__dbserver" | cut -f2 -d":"` ndoutils_dbserver=`echo "$cfg__db_info__ndoutils__dbserver" | cut -f1 -d":"` @@ -157,11 +179,11 @@ else ndoutils_dbport='3306' ndoutils_dbserver="$cfg__db_info__ndoutils__dbserver" fi -mysqldump -h "$ndoutils_dbserver" --port="$ndoutils_dbport" -u $cfg__db_info__ndoutils__user --password="$cfg__db_info__ndoutils__pwd" --add-drop-database -B $cfg__db_info__ndoutils__db > $mydir/mysql/nagios.sql +mysqldump -h "$ndoutils_dbserver" --port="$ndoutils_dbport" -u $cfg__db_info__ndoutils__user --password="$cfg__db_info__ndoutils__pwd" --add-drop-database -B $cfg__db_info__ndoutils__db > $workDir/mysql/nagios.sql res=$? if [ $res != 0 ]; then - error "Error backing up MySQL database 'nagios' - check the password in this script!" | tee -a $SBLOG - rm -rf $mydir + echo "Error backing up MySQL database 'nagios' - check the password in this script!" + rm -r $workDir exit $res; fi if [[ "$cfg__db_info__nagiosql__dbserver" == *":"* ]]; then @@ -171,25 +193,26 @@ else nagiosql_dbport='3306' nagiosql_dbserver="$cfg__db_info__nagiosql__dbserver" fi -mysqldump -h "$nagiosql_dbserver" --port="$nagiosql_dbport" -u $cfg__db_info__nagiosql__user --password="$cfg__db_info__nagiosql__pwd" --add-drop-database -B $cfg__db_info__nagiosql__db > $mydir/mysql/nagiosql.sql +mysqldump -h "$nagiosql_dbserver" --port="$nagiosql_dbport" -u $cfg__db_info__nagiosql__user --password="$cfg__db_info__nagiosql__pwd" --add-drop-database -B $cfg__db_info__nagiosql__db > $workDir/mysql/nagiosql.sql res=$? if [ $res != 0 ]; then - error "Error backing up MySQL database 'nagiosql' - check the password in this script!" | tee -a $SBLOG - rm -rf $mydir + echo "Error backing up MySQL database 'nagiosql' - check the password in this script!" + rm -r $workDir exit $res; fi + # Only backup PostgresQL if we are still using it if [ $cfg__db_info__nagiosxi__dbtype == "pgsql" ]; then - verbose "Backing up PostgresQL databases..." - mkdir -p $mydir/pgsql + echo "Backing up PostgresQL databases..." + mkdir -p $workDir/pgsql if [ -z $cfg__db_info__nagiosxi__dbserver ]; then cfg__db_info__nagiosxi__dbserver="localhost" fi - pg_dump -h $cfg__db_info__nagiosxi__dbserver -c -U $cfg__db_info__nagiosxi__user $cfg__db_info__nagiosxi__db > $mydir/pgsql/nagiosxi.sql + pg_dump -h $cfg__db_info__nagiosxi__dbserver -c -U $cfg__db_info__nagiosxi__user $cfg__db_info__nagiosxi__db > $workDir/pgsql/nagiosxi.sql res=$? if [ $res != 0 ]; then - error "Error backing up PostgresQL database 'nagiosxi' !" | tee -a $SBLOG - rm -rf $mydir + echo "Error backing up PostgresQL database 'nagiosxi' !" + rm -r $workDir exit $res; fi else @@ -200,11 +223,11 @@ else nagiosxi_dbport='3306' nagiosxi_dbserver="$cfg__db_info__nagiosxi__dbserver" fi - mysqldump -h "$nagiosxi_dbserver" --port="$nagiosxi_dbport" -u $cfg__db_info__nagiosxi__user --password="$cfg__db_info__nagiosxi__pwd" --add-drop-database -B $cfg__db_info__nagiosxi__db > $mydir/mysql/nagiosxi.sql + mysqldump -h "$nagiosxi_dbserver" --port="$nagiosxi_dbport" -u $cfg__db_info__nagiosxi__user --password="$cfg__db_info__nagiosxi__pwd" --add-drop-database -B $cfg__db_info__nagiosxi__db > $workDir/mysql/nagiosxi.sql res=$? if [ $res != 0 ]; then - error "Error backing up MySQL database 'nagiosxi' - check the password in this script!" | tee -a $SBLOG - rm -rf $mydir + echo "Error backing up MySQL database 'nagiosxi' - check the password in this script!" + rm -r $workDir exit $res; fi fi @@ -212,7 +235,7 @@ fi ############################## # COMPRESS BACKUP ############################## -verbose "Compressing backup..." +echo "Compressing backup..." tar czfp $name.tar.gz $name rm -rf $name @@ -220,20 +243,307 @@ rm -rf $name chown $nagiosuser:$nagiosgroup $name.tar.gz if [ -s $name.tar.gz ];then + echo " " echo "===============" echo "BACKUP COMPLETE" echo "===============" - verbose "Backup stored in $rootdir/$name.tar.gz" + echo "Backup stored in $rootdir/$name.tar.gz" else echo " " echo "===============" echo "BACKUP FAILED" echo "===============" - error "File was not created at $rootdir/$name.tar.gz" - rm -rf $mydir + echo "File was not created at $rootdir/$name.tar.gz" + rm -rf $workDir exit 1; fi - do_rsync $rootdir/$name.tar.gz -exit 0 +} # End of do_backup_sql + +do_backup_files +do_backup_sql +} # End of do_primary + +restore_secondary() { +# Change this password if your root password is different than "nagiosxi" +# MySQL root password +themysqlpass="nagiosxi" + +# Tests mysql connection by opening a connection and selecting the DB we want to use +test_mysql_connection() { + local db_host="$1" + local db_port="$2" + local db_username="$3" + local db_password="$4" + db_error=$(mysql -h "$db_host" --port="$db_port" -u $db_username --password=$db_password -e "show databases;" 2>&1) + return $? +} + +backupfile=$1 +rootdir=/store/backups/nagiosxi + +############################## +# MAKE SURE BACKUP FILE EXIST +############################## +if [ ! -f $backupfile ]; then + error "Unable to find backup file $backupfile!" + exit 1 +fi + +############################## +# MAKE TEMP RESTORE DIRECTORY +############################## +#ts=`echo $backupfile | cut -d . -f 1` +ts=`date +%s` +### echo "TS=$ts" +mydir=${rootdir}/${ts}-restore +mkdir -p $mydir +if [ ! -d $mydir ]; then + error "Unable to create restore directory $mydir!" + exit 1 +fi + + +############################## +# UNZIP BACKUP +############################## +verbose "Extracting backup to $mydir..." +cd $mydir +tar xzfps $backupfile +# Change to subdirectory +cd `ls | head -1` +backupdir=`pwd` + +verbose "Backup files look okay. Preparing to restore..." + +############################## +# SHUTDOWN SERVICES +############################## +verbose "Shutting down services..." +[ -r "/usr/local/nagios/var/retention.dat" ] && cp /usr/local/nagios/var/retention.dat $backupdir +sudo $BASEDIR/manage_services.sh stop nagios +sudo $BASEDIR/manage_services.sh stop ndo2db +sudo $BASEDIR/manage_services.sh stop npcd +[ -r "$backupdir/retention.dat" ] && cp $backupdir/retention.dat /usr/local/nagios/var/retention.dat + + +rootdir=/ +# Overwrite the mysqlpass with the hardcoded one at the top +mysqlpass="$themysqlpass" + +############################## +# RESTORE DATABASES +############################## + +verbose "Restoring MySQL databases..." +if [[ "$cfg__db_info__ndoutils__dbserver" == *":"* ]]; then + ndoutils_dbport=`echo "$cfg__db_info__ndoutils__dbserver" | cut -f2 -d":"` + ndoutils_dbserver=`echo "$cfg__db_info__ndoutils__dbserver" | cut -f1 -d":"` +else + ndoutils_dbport='3306' + ndoutils_dbserver="$cfg__db_info__ndoutils__dbserver" +fi + +# Test mysql and see if we can connect before continuing +x=1 +while [ $x -le 5 ]; +do + test_mysql_connection $ndoutils_dbserver $ndoutils_dbport "root" $mysqlpass + if [ $? == 1 ]; then + error "ERROR: Could not connect to $ndoutils_dbserver:$ndoutils_dbport with root password supplied." + read -s -r -p "Please enter the MySQL root password: " mysqlpass + echo "" + else + break + fi + if [ $x -eq 5 ]; then + error "ERROR: Aborting restore: Could not connect to MySQL." + error "$db_error" + exit 1 + fi + x=$(($x+1)) +done + +mysql -h "$ndoutils_dbserver" --port="$ndoutils_dbport" -u root --password=$mysqlpass < $backupdir/mysql/nagios.sql +res=$? +if [ $res != 0 ]; then + error "Error restoring MySQL database 'nagios'" + exit 1 +fi + +if [[ "$cfg__db_info__nagiosql__dbserver" == *":"* ]]; then + nagiosql_dbport=`echo "$cfg__db_info__nagiosql__dbserver" | cut -f2 -d":"` + nagiosql_dbserver=`echo "$cfg__db_info__nagiosql__dbserver" | cut -f1 -d":"` +else + nagiosql_dbport='3306' + nagiosql_dbserver="$cfg__db_info__nagiosql__dbserver" +fi + +# Test mysql again and see if we can connect before continuing +x=1 +while [ $x -le 5 ]; +do + test_mysql_connection $nagiosql_dbserver $nagiosql_dbport "root" $mysqlpass + if [ $? == 1 ]; then + error "ERROR: Could not connect to $nagiosql_dbserver:$nagiosql_dbport with root password supplied." + read -s -r -p "Please enter the MySQL root password: " mysqlpass + echo "" + else + break + fi + if [ $x -eq 5 ]; then + error "ERROR: Aborting restore: Could not connect to MySQL." + error "$db_error" + exit 1 + fi + x=$(($x+1)) +done + +mysql -h "$nagiosql_dbserver" --port="$nagiosql_dbport" -u root --password=$mysqlpass < $backupdir/mysql/nagiosql.sql +res=$? +if [ $res != 0 ]; then + error "Error restoring MySQL database 'nagiosql'" + exit 1 +fi + +# Only restore PostgresQL if we are still using it +if [ "$cfg__db_info__nagiosxi__dbtype" == "pgsql" ]; then + + service postgresql initdb &>/dev/null || true + + verbose "Restoring Nagios XI PostgresQL database..." + if [ -f /var/lib/pgsql/data/pg_hba.conf ]; then + pghba="/var/lib/pgsql/data/pg_hba.conf" + cp -pr $pghba $pghba.old + else + #Ubuntu/Debian + pghba=$(find /etc/postgresql -name "*pg_hba.conf") + cp -pr $pghba $pghba.old + fi + echo "local all all trust +host all all 127.0.0.1/32 trust +host all all ::1/128 trust" > $pghba + + $BASEDIR/manage_services.sh start postgresql + + sudo -u postgres psql -c "create user nagiosxi with password 'n@gweb';" + sudo -u postgres psql -c "create database nagiosxi owner nagiosxi;" + + $BASEDIR/manage_services.sh restart postgresql + + # Sleep a bit (required so Postgres finishes startup before we connect again) + verbose "Sleeping for a few seconds (please wait)..." + sleep 7 + + psql -U nagiosxi nagiosxi < $backupdir/pgsql/nagiosxi.sql + res=$? + if [ $res != 0 ]; then + error "Error restoring PostgresQL database 'nagiosxi' !" + exit 1 + fi + $BASEDIR/manage_services.sh restart postgresql + if [ "$dist" == "el7" ] || [ "$dist" == "el8" ]; then + systemctl enable postgresql.service + elif [[ "$distro" == "Ubuntu" ]] || [[ "$distro" == "Debian" ]]; then + update-rc.d postgresql enable + else + chkconfig postgresql on + fi + # Remove nagiosxi db from mysql if postgres is used instead + if [[ "$cfg__db_info__nagiosql__dbserver" == *":"* ]]; then + nagiosql_dbport=`echo "$cfg__db_info__nagiosql__dbserver" | cut -f2 -d":"` + nagiosql_dbserver=`echo "$cfg__db_info__nagiosql__dbserver" | cut -f1 -d":"` + else + nagiosql_dbport='3306' + nagiosql_dbserver="$cfg__db_info__nagiosql__dbserver" + fi + mysql -h "$nagiosql_dbserver" --port="$nagiosql_dbport" -u root --password=$mysqlpass < "DROP TABLE IF EXISTS nagiosxi;" +else + verbose "Restoring Nagios XI MySQL database..." + if [[ "$cfg__db_info__nagiosxi__dbserver" == *":"* ]]; then + nagiosxi_dbport=`echo "$cfg__db_info__nagiosxi__dbserver" | cut -f2 -d":"` + nagiosxi_dbserver=`echo "$cfg__db_info__nagiosxi__dbserver" | cut -f1 -d":"` + else + nagiosxi_dbport='3306' + if [ "x$cfg__db_info__nagiosxi__dbserver" == "x" ]; then + nagiosxi_dbserver="localhost" + else + nagiosxi_dbserver="$cfg__db_info__nagiosxi__dbserver" + fi + fi + + # Test mysql again and see if we can connect before continuing + x=1 + while [ $x -le 5 ]; + do + test_mysql_connection $nagiosxi_dbserver $nagiosxi_dbport "root" $mysqlpass + if [ $? == 1 ]; then + error "ERROR: Could not connect to $nagiosxi_dbserver:$nagiosxi_dbport with root password supplied." + read -s -r -p "Please enter the MySQL root password: " mysqlpass + echo "" + else + break + fi + if [ $x -eq 5 ]; then + error "ERROR: Aborting restore: Could not connect to MySQL." + error "$db_error" + exit 1 + fi + x=$(($x+1)) + done + + mysql -h "$nagiosxi_dbserver" --port="$nagiosxi_dbport" -u root --password=$mysqlpass < $backupdir/mysql/nagiosxi.sql + res=$? + if [ $res != 0 ]; then + error "Error restoring MySQL database 'nagiosxi' !" + exit 1 + fi +fi + +############################## +# RESTART SERVICES +############################## +verbose "Restarting services..." +sudo $BASEDIR/manage_services.sh restart mysqld +sudo $BASEDIR/manage_services.sh restart httpd +sudo $BASEDIR/manage_services.sh start npcd +sudo $BASEDIR/manage_services.sh start ndo2db +sudo $BASEDIR/manage_services.sh start nagios + +############################## +# DELETE TEMP RESTORE DIRECTORY +############################## +rm -rf $mydir + +echo " " +echo "===============" +echo "RESTORE COMPLETE" +echo "===============" + +verbose "Restarting Nagios XI" +cd /usr/local/nagiosxi/scripts +./reconfigure_nagios.sh +} + +do_secondary() { + [ ! -r "$syncfile" ] && error "No sync file ($syncfile) found." && exit 2 + restore_secondary "$syncfile" + if [ $? -eq 0 ]; then + if [ -r "/usr/local/nagiosxi/html/includes/components/custom-includes/css/header-gradient.css.secondary" -a -w "/usr/local/nagiosxi/html/includes/components/custom-includes/css/header-gradient.css" ]; then + cp /usr/local/nagiosxi/html/includes/components/custom-includes/css/header-gradient.css.secondary /usr/local/nagiosxi/html/includes/components/custom-includes/css/header-gradient.css + fi + rm -f ${syncfile} + fi +} # End of do_secondary + +ping_host() { + $noping && return 0 + /usr/local/nagios/libexec/check_icmp -H $1 >/dev/null 2>&1 +} + +[ -z "$pName" -o -z "$sName" ] && echo "Must specify primary name and secondary name" && exit 0 +[ "$hostname" = "$pName" ] && isP=/bin/true +[ "$hostname" = "$sName" ] && isS=/bin/true +$isP && do_primary +$isS && do_secondary