Commit 5bff5f1ad48cedc971ab59fd78ee5b09bfab5a7f
1 parent
45b6b00a
Locality abstraction for db-backup and db-restore
Showing
1 changed file
with
77 additions
and
16 deletions
cluster-manager.sh
| @@ -2,7 +2,7 @@ | @@ -2,7 +2,7 @@ | ||
| 2 | 2 | ||
| 3 | # The MIT License (MIT) | 3 | # The MIT License (MIT) |
| 4 | # | 4 | # |
| 5 | -# Copyright (c) <year> <copyright holders> | 5 | +# Copyright (c) 2015 ISISLab, Università degli Studi di Salerno |
| 6 | # | 6 | # |
| 7 | # Permission is hereby granted, free of charge, to any person obtaining a copy | 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 | 8 | # of this software and associated documentation files (the "Software"), to deal |
| @@ -23,6 +23,62 @@ | @@ -23,6 +23,62 @@ | ||
| 23 | # THE SOFTWARE. | 23 | # THE SOFTWARE. |
| 24 | 24 | ||
| 25 | # | 25 | # |
| 26 | +# FUNCTIONS DEFINITIONS | ||
| 27 | +# | ||
| 28 | + | ||
| 29 | +# host_exec_cmd | ||
| 30 | +# | ||
| 31 | +# Description: | ||
| 32 | +# Calls a command on a host, abstracting the locality of the host. | ||
| 33 | +# | ||
| 34 | +# Parameters: | ||
| 35 | +# $1 hostname where to perform the command | ||
| 36 | +# $2 the command to execute | ||
| 37 | +function host_exec_cmd { | ||
| 38 | + if [ "$MYHOST" == "$1" ]; then | ||
| 39 | + "$2" | ||
| 40 | + else | ||
| 41 | + ssh -t ${SSH_USER}${1}.routetopa.eu "$2" | ||
| 42 | + fi | ||
| 43 | +} | ||
| 44 | + | ||
| 45 | +# host_send_file | ||
| 46 | +# | ||
| 47 | +# Description: | ||
| 48 | +# Send a local file to remote host. If the copy is issued on the local host | ||
| 49 | +# itself, the command is ignored. | ||
| 50 | +# | ||
| 51 | +# Parameters: | ||
| 52 | +# $1 hostname to copy the file to | ||
| 53 | +# $2 local filename | ||
| 54 | +# $3 remote localhost | ||
| 55 | +function host_send_file { | ||
| 56 | + if [ "$MYHOST" == "$1" ]; then | ||
| 57 | + mv ${2} ${3} | ||
| 58 | + else | ||
| 59 | + scp ${2} ${SSH_USER}${1}.routetopa.eu:${2} | ||
| 60 | + fi | ||
| 61 | +} | ||
| 62 | + | ||
| 63 | +# host_recv_file | ||
| 64 | +# | ||
| 65 | +# Description: | ||
| 66 | +# Receive a remote file to localhost host. If the copy is issued on the local host | ||
| 67 | +# itself, the command is ignored. | ||
| 68 | +# | ||
| 69 | +# Parameters: | ||
| 70 | +# $1 hostname to copy the file from | ||
| 71 | +# $2 remote filename | ||
| 72 | +# $3 local filename | ||
| 73 | +function host_recv_file { | ||
| 74 | + if [ "$MYHOST" == "$1" ]; then | ||
| 75 | + mv ${2} ${3} | ||
| 76 | + else | ||
| 77 | + scp ${SSH_USER}${1}.routetopa.eu:${2} ./${3} | ||
| 78 | + fi | ||
| 79 | +} | ||
| 80 | + | ||
| 81 | +# | ||
| 26 | # DEFAULT OPTIONS | 82 | # DEFAULT OPTIONS |
| 27 | # | 83 | # |
| 28 | 84 | ||
| @@ -35,6 +91,7 @@ MYSQL_PASS=is15rdc | @@ -35,6 +91,7 @@ MYSQL_PASS=is15rdc | ||
| 35 | MYSQL_DB=oxwall | 91 | MYSQL_DB=oxwall |
| 36 | 92 | ||
| 37 | HOSTLIST=( | 93 | HOSTLIST=( |
| 94 | + 'spod' | ||
| 38 | 'prato' | 95 | 'prato' |
| 39 | 'dublin' | 96 | 'dublin' |
| 40 | 'issy' | 97 | 'issy' |
| @@ -101,31 +158,35 @@ echo 'NOTE: THIS ACTION HAS NOT BEEN TESTED YET!! JUST ECHOING COMMANDS...' | @@ -101,31 +158,35 @@ echo 'NOTE: THIS ACTION HAS NOT BEEN TESTED YET!! JUST ECHOING COMMANDS...' | ||
| 101 | echo ssh -t ${SSH_USER}${HOST}.routetopa.eu "source $ARG_SCRIPT_NAME; rm $ARG_SCRIPT_NAME" | 158 | echo ssh -t ${SSH_USER}${HOST}.routetopa.eu "source $ARG_SCRIPT_NAME; rm $ARG_SCRIPT_NAME" |
| 102 | done | 159 | done |
| 103 | ;; | 160 | ;; |
| 104 | - db-restore) | 161 | + db-backup) |
| 105 | ARG_BACKUP_NAME=$2 | 162 | ARG_BACKUP_NAME=$2 |
| 106 | if [ -z $ARG_BACKUP_NAME ]; then | 163 | if [ -z $ARG_BACKUP_NAME ]; then |
| 107 | - echo "ERROR: Please specify the name of the backup. e.g.: $0 backup.sql" | ||
| 108 | - exit 1 | ||
| 109 | - fi | ||
| 110 | - if [ ! -f $ARG_BACKUP_NAME ]; then | ||
| 111 | - echo "ERROR: File $ARG_BACKUP_NAME does not exists" | ||
| 112 | - exit 1 | 164 | + ARG_BACKUP_NAME="${MYSQL_DB}-$(date +%Y%m%d-%H%M%S).sql" |
| 165 | + echo "No given backup filename. Using $ARG_BACKUP_NAME" | ||
| 113 | fi | 166 | fi |
| 114 | for HOST in ${HOSTLIST[@]}; do | 167 | for HOST in ${HOSTLIST[@]}; do |
| 115 | - scp $ARG_BACKUP_NAME ${SSH_USER}${HOST}.routetopa.eu:$ARG_BACKUP_NAME | ||
| 116 | - ssh -t ${SSH_USER}${HOST}.routetopa.eu "mysql -u${MYSQL_USER} -p${MYSQL_PASS} ${MYSQL_DB} < ${ARG_BACKUP_NAME}" | 168 | + host_exec_cmd ${HOST} "mysqldump -u${MYSQL_USER} -p${MYSQL_PASS} ${MYSQL_DB} > ${ARG_BACKUP_NAME}" |
| 169 | + host_recv_file ${HOST} ${ARG_BACKUP_NAME} ${HOST}-${ARG_BACKUP_NAME} | ||
| 117 | done | 170 | done |
| 118 | - db-backup) | 171 | + ;; |
| 172 | + db-restore) | ||
| 119 | ARG_BACKUP_NAME=$2 | 173 | ARG_BACKUP_NAME=$2 |
| 120 | - if [ -z $ARG_BACKUP_NAME ]; then | ||
| 121 | - ARG_BACKUP_NAME="${MYSQL_DB}-$(date +%Y%m%d-%H%M%S).sql" | ||
| 122 | - echo "No given backup filename. Using $ARG_BACKUP_NAME" | 174 | + if [ -z ${ARG_BACKUP_NAME} ]; then |
| 175 | + echo "ERROR: Please specify the name of the backup. e.g.: $0 backup.sql" | ||
| 176 | + exit 1 | ||
| 123 | fi | 177 | fi |
| 124 | for HOST in ${HOSTLIST[@]}; do | 178 | for HOST in ${HOSTLIST[@]}; do |
| 125 | - ssh -t ${SSH_USER}${HOST}.routetopa.eu "mysqldump -u${MYSQL_USER} -p${MYSQL_PASS} ${MYSQL_DB} > ${ARG_BACKUP_NAME}" | ||
| 126 | - scp ${SSH_USER}${HOST}.routetopa.eu:${ARG_BACKUP_NAME} ./${HOST}-${ARG_BACKUP_NAME} | 179 | + if [ ! -f "${HOST}-${ARG_BACKUP_NAME}" ]; then |
| 180 | + echo "ERROR: File ${HOST}-${ARG_BACKUP_NAME} does not exists" | ||
| 181 | + exit 1 | ||
| 182 | + fi | ||
| 183 | + done | ||
| 184 | + for HOST in ${HOSTLIST[@]}; do | ||
| 185 | + host_send_file ${HOST} "${HOST}-${ARG_BACKUP_NAME}" "${ARG_BACKUP_NAME}" | ||
| 186 | + host_exec_cmd ${HOST} "mysql -u${MYSQL_USER} -p${MYSQL_PASS} ${MYSQL_DB} < ${ARG_BACKUP_NAME}" | ||
| 127 | done | 187 | done |
| 128 | ;; | 188 | ;; |
| 189 | + | ||
| 129 | db-sql) | 190 | db-sql) |
| 130 | echo 'NOTE: THIS ACTION HAS NOT BEEN TESTED YET!! JUST ECHOING COMMANDS...' | 191 | echo 'NOTE: THIS ACTION HAS NOT BEEN TESTED YET!! JUST ECHOING COMMANDS...' |
| 131 | ARG_SCRIPT_NAME=$2 | 192 | ARG_SCRIPT_NAME=$2 |