From fcd90fbc359e89397a152252325178229d15059d Mon Sep 17 00:00:00 2001 From: lucvic Date: Wed, 14 Oct 2015 13:09:51 +0200 Subject: [PATCH] First commit. Action 'db-backup' tested and working. --- cluster-manager.sh | 155 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 155 insertions(+), 0 deletions(-) create mode 100644 cluster-manager.sh diff --git a/cluster-manager.sh b/cluster-manager.sh new file mode 100644 index 0000000..84a3591 --- /dev/null +++ b/cluster-manager.sh @@ -0,0 +1,155 @@ +#!/bin/bash + +# The MIT License (MIT) +# +# Copyright (c) +# +# 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-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 " + echo " " + echo "List of actions:" + echo " help : Show this screen" + echo " execute