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 |