Commit fcd90fbc359e89397a152252325178229d15059d

Authored by lucvic
1 parent fa36e4ba

First commit. Action 'db-backup' tested and working.

Showing 1 changed file with 155 additions and 0 deletions
cluster-manager.sh 0 → 100644
  1 +#!/bin/bash
  2 +
  3 +# The MIT License (MIT)
  4 +#
  5 +# Copyright (c) <year> <copyright holders>
  6 +#
  7 +# Permission is hereby granted, free of charge, to any person obtaining a copy
  8 +# of this software and associated documentation files (the "Software"), to deal
  9 +# in the Software without restriction, including without limitation the rights
  10 +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  11 +# copies of the Software, and to permit persons to whom the Software is
  12 +# furnished to do so, subject to the following conditions:
  13 +#
  14 +# The above copyright notice and this permission notice shall be included in
  15 +# all copies or substantial portions of the Software.
  16 +#
  17 +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  18 +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  19 +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  20 +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  21 +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  22 +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  23 +# THE SOFTWARE.
  24 +
  25 +#
  26 +# DEFAULT OPTIONS
  27 +#
  28 +
  29 +SSH_USER=
  30 +SSH_PASS=
  31 +
  32 +# MYSQL_HOST=localhost # IGNORED
  33 +MYSQL_USER=root
  34 +MYSQL_PASS=is15rdc
  35 +MYSQL_DB=oxwall
  36 +
  37 +HOSTLIST=(
  38 + 'prato'
  39 + 'dublin'
  40 + 'issy'
  41 + 'denhaag'
  42 + 'groningen'
  43 +)
  44 +
  45 +#
  46 +# OPTION PROCESSING
  47 +#
  48 +
  49 +OPTIONS=$(getopt -o s: -- $@)
  50 +eval set -- $OPTIONS
  51 +
  52 +while true; do
  53 + case "$1" in
  54 + -s)
  55 + SSH_USER="${2}@"
  56 + shift 2
  57 + ;;
  58 + --)
  59 + shift
  60 + break
  61 + ;;
  62 + *)
  63 + echo "Unknown option: $1"
  64 + shift
  65 + break
  66 + ;;
  67 + esac
  68 +done
  69 +
  70 +#
  71 +# VARIABLES
  72 +#
  73 +
  74 +ALLOWEDHOST="spod.routetopa.eu"
  75 +MYHOST=$(hostname)
  76 +
  77 +#if [ "$MYHOST" != "$ALLOWEDHOST" ]; then
  78 + #echo "This script can be run only on ${ALLOWEDHOST}. It appears you are running it on ${MYHOST}"
  79 + #echo "Exiting..."
  80 + #exit -1;
  81 +#fi
  82 +
  83 +#
  84 +# PERFORM SELECTED ACTION
  85 +#
  86 +ACTION=$1
  87 +case "$ACTION" in
  88 + execute)
  89 +echo 'NOTE: THIS ACTION HAS NOT BEEN TESTED YET!! JUST ECHOING COMMANDS...'
  90 + ARG_SCRIPT_NAME=$2
  91 + if [ -z $ARG_SCRIPT_NAME ]; then
  92 + echo "ERROR: Please specify the name of the script. e.g.: $0 do_something.sh"
  93 + exit 1
  94 + fi
  95 + if [ ! -f $ARG_SCRIPT_NAME ]; then
  96 + echo "ERROR: File $ARG_SCRIPT_NAME does not exists"
  97 + exit 1
  98 + fi
  99 + for HOST in ${HOSTLIST[@]}; do
  100 + echo scp $ARG_SCRIPT_NAME ${SSH_USER}${HOST}.routetopa.eu:$ARG_SCRIPT_NAME
  101 + echo ssh -t ${SSH_USER}${HOST}.routetopa.eu "source $ARG_SCRIPT_NAME; rm $ARG_SCRIPT_NAME"
  102 + done
  103 + ;;
  104 + db-backup)
  105 + ARG_BACKUP_NAME=$2
  106 + if [ -z $ARG_BACKUP_NAME ]; then
  107 + ARG_BACKUP_NAME="${MYSQL_DB}-$(date +%Y%m%d-%H%M%S).sql"
  108 + echo "No given backup filename. Using $ARG_BACKUP_NAME"
  109 + fi
  110 + for HOST in ${HOSTLIST[@]}; do
  111 + ssh -t ${SSH_USER}${HOST}.routetopa.eu "mysqldump -u${MYSQL_USER} -p${MYSQL_PASS} ${MYSQL_DB} > ${ARG_BACKUP_NAME}"
  112 + scp ${SSH_USER}${HOST}.routetopa.eu:${ARG_BACKUP_NAME} ./${HOST}-${ARG_BACKUP_NAME}
  113 + done
  114 + ;;
  115 + db-sql)
  116 +echo 'NOTE: THIS ACTION HAS NOT BEEN TESTED YET!! JUST ECHOING COMMANDS...'
  117 + ARG_SCRIPT_NAME=$2
  118 + if [ -z $ARG_SCRIPT_NAME ]; then
  119 + echo "ERROR: Please specify the name of the sql. e.g.: $0 do_something.sql"
  120 + exit 1
  121 + fi
  122 + if [ ! -f $ARG_SCRIPT_NAME ]; then
  123 + echo "ERROR: File $ARG_SCRIPT_NAME does not exists"
  124 + exit 1
  125 + fi
  126 + for HOST in ${HOSTLIST[@]}; do
  127 + echo scp ${ARG_SCRIPT_NAME} ${SSH_USER}${HOST}.routetopa.eu:${ARG_SCRIPT_NAME}
  128 + echo ssh -t ${SSH_USER}${HOST}.routetopa.eu "mysql -u${MYSQL_USER} -p${MYSQL_PASS} ${MYSQL_DB} < ${ARG_SCRIPT_NAME}; rm ${ARG_SCRIPT_NAME}"
  129 + done
  130 + ;;
  131 + update)
  132 +echo 'NOTE: THIS ACTION HAS NOT BEEN TESTED YET!! JUST ECHOING COMMANDS...'
  133 + echo "Updating production sites..."
  134 + for HOST in ${HOSTLIST[@]}; do
  135 + 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/
  136 + done
  137 + ;;
  138 + ""|help)
  139 + echo "ROUTE-TO-PA PROJECT: CLUSTER-MANAGER.SH"
  140 + echo " "
  141 + echo "Usage: $0 action <options>"
  142 + echo " "
  143 + echo "List of actions:"
  144 + echo " help : Show this screen"
  145 + echo " execute <script> : Copy <script> to hosts and execute it"
  146 + echo " db-backup [filename] : Perform a database backup"
  147 + echo " db-sql <script> : Copy <script> to hosts and run with mysql client"
  148 + echo " update : Update code using git pull"
  149 + echo " "
  150 + echo "List of options:"
  151 + ;;
  152 + *)
  153 + echo "Unknown action: \"$ACTION\". Try calling this script without arguments to get help."
  154 + ;;
  155 +esac