cluster-manager.sh 4.91 KB
#!/bin/bash

# The MIT License (MIT)
#
# Copyright (c) <year> <copyright holders>
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.

#
# DEFAULT OPTIONS
#

SSH_USER=
SSH_PASS=

# MYSQL_HOST=localhost # IGNORED
MYSQL_USER=root
MYSQL_PASS=is15rdc
MYSQL_DB=oxwall

HOSTLIST=(
	'prato'
	'dublin'
	'issy'
	'denhaag'
	'groningen'
)

#
# OPTION PROCESSING
#

OPTIONS=$(getopt -o s: -- $@)
eval set -- $OPTIONS

while true; do
	case "$1" in
		-s)
			SSH_USER="${2}@"
			shift 2
			;;
		--)
			shift
			break
			;;
		*)
			echo "Unknown option: $1"
			shift
			break
			;;
	esac
done

#
# VARIABLES
#

ALLOWEDHOST="spod.routetopa.eu"
MYHOST=$(hostname)

#if [ "$MYHOST" != "$ALLOWEDHOST" ]; then
	#echo "This script can be run only on ${ALLOWEDHOST}. It appears you are running it on ${MYHOST}"
	#echo "Exiting..."
	#exit -1;
#fi

#
# PERFORM SELECTED ACTION
#
ACTION=$1
case "$ACTION" in
	execute)
echo 'NOTE: THIS ACTION HAS NOT BEEN TESTED YET!! JUST ECHOING COMMANDS...'
		ARG_SCRIPT_NAME=$2
		if [ -z $ARG_SCRIPT_NAME ]; then
			echo "ERROR: Please specify the name of the script. e.g.: $0 do_something.sh"
			exit 1
		fi
		if [ ! -f $ARG_SCRIPT_NAME ]; then
			echo "ERROR: File $ARG_SCRIPT_NAME does not exists"
			exit 1
		fi
		for HOST in ${HOSTLIST[@]}; do
			echo scp $ARG_SCRIPT_NAME ${SSH_USER}${HOST}.routetopa.eu:$ARG_SCRIPT_NAME
			echo ssh -t ${SSH_USER}${HOST}.routetopa.eu "source $ARG_SCRIPT_NAME; rm $ARG_SCRIPT_NAME"
		done
		;;
	db-restore)
		ARG_BACKUP_NAME=$2
		if [ -z $ARG_BACKUP_NAME ]; then
			echo "ERROR: Please specify the name of the backup. e.g.: $0 backup.sql"
			exit 1
		fi
		if [ ! -f $ARG_BACKUP_NAME ]; then
			echo "ERROR: File $ARG_BACKUP_NAME does not exists"
			exit 1
		fi
		for HOST in ${HOSTLIST[@]}; do
			scp $ARG_BACKUP_NAME ${SSH_USER}${HOST}.routetopa.eu:$ARG_BACKUP_NAME
			ssh -t ${SSH_USER}${HOST}.routetopa.eu "mysql -u${MYSQL_USER} -p${MYSQL_PASS} ${MYSQL_DB} < ${ARG_BACKUP_NAME}"
		done
	db-backup)
		ARG_BACKUP_NAME=$2
		if [ -z $ARG_BACKUP_NAME ]; then
			ARG_BACKUP_NAME="${MYSQL_DB}-$(date +%Y%m%d-%H%M%S).sql"
			echo "No given backup filename. Using $ARG_BACKUP_NAME"
		fi
		for HOST in ${HOSTLIST[@]}; do
			ssh -t ${SSH_USER}${HOST}.routetopa.eu "mysqldump -u${MYSQL_USER} -p${MYSQL_PASS} ${MYSQL_DB} > ${ARG_BACKUP_NAME}"
			scp ${SSH_USER}${HOST}.routetopa.eu:${ARG_BACKUP_NAME} ./${HOST}-${ARG_BACKUP_NAME}
		done
		;;
	db-sql)
echo 'NOTE: THIS ACTION HAS NOT BEEN TESTED YET!! JUST ECHOING COMMANDS...'
		ARG_SCRIPT_NAME=$2
		if [ -z $ARG_SCRIPT_NAME ]; then
			echo "ERROR: Please specify the name of the sql. e.g.: $0 do_something.sql"
			exit 1
		fi
		if [ ! -f $ARG_SCRIPT_NAME ]; then
			echo "ERROR: File $ARG_SCRIPT_NAME does not exists"
			exit 1
		fi
		for HOST in ${HOSTLIST[@]}; do
			echo scp ${ARG_SCRIPT_NAME} ${SSH_USER}${HOST}.routetopa.eu:${ARG_SCRIPT_NAME}
			echo ssh -t ${SSH_USER}${HOST}.routetopa.eu "mysql -u${MYSQL_USER} -p${MYSQL_PASS} ${MYSQL_DB} < ${ARG_SCRIPT_NAME}; rm ${ARG_SCRIPT_NAME}"
		done
		;;
	update)
echo 'NOTE: THIS ACTION HAS NOT BEEN TESTED YET!! JUST ECHOING COMMANDS...'
		echo "Updating production sites..."
		for HOST in ${HOSTLIST[@]}; do
			echo ssh -t ${SSH_USER}${HOST}.routetopa.eu sudo ./spod-manager.sh -a update -p isisadmin -q isislab.unisa@gmail.com -r is15rdc1 -w http://spod.routetopa.eu/
		done
		;;
	""|help)
		echo "ROUTE-TO-PA PROJECT: CLUSTER-MANAGER.SH"
		echo " "
		echo "Usage: $0 action <options>"
		echo " "
		echo "List of actions:"
		echo "    help                  : Show this screen"
		echo "    execute <script>      : Copy <script> to hosts and execute it"
		echo "    db-backup [filename]  : Perform a database backup"
		echo "    db-restore [filename] : Restore a database backup"
		echo "    db-sql <script>       : Copy <script> to hosts and run with mysql client"
		echo "    update                : Update code using git pull"
		echo " "
		echo "List of options:"
		;;
	*)
		echo "Unknown action: \"$ACTION\". Try calling this script without arguments to get help."
		;;
esac