]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/support-scripts/brick_ctl.sh
created an external brick configuration file
[working/Evergreen.git] / Open-ILS / src / support-scripts / brick_ctl.sh
1 #!/bin/bash
2 # ---------------------------------------------------------------
3 # Copyright (C) 2007-2008  Georgia Public Library Service
4 #
5 # This program is free software; you can redistribute it and/or
6 # modify it under the terms of the GNU General Public License
7 # as published by the Free Software Foundation; either version 2
8 # of the License, or (at your option) any later version.
9
10 # This program is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 # GNU General Public License for more details.
14 # ---------------------------------------------------------------
15
16 # -------------------------------------------------------------------
17 # This script is used to manage "bricks", which are collections of
18 # servers all serving a single OpenSRF domain.  There will be 1
19 # master machine, which will typcically run this script, and 1 or more
20 # drones, which respond to this script.
21 # -------------------------------------------------------------------
22
23 # TODO finish the download and build functionality
24
25
26 [ -f /etc/profile ] && . /etc/profile
27 [ -f ~/.bashrc ] && . ~/.bashrc
28
29 DEFAULT_CONFIG=~/.oils_brick.cfg
30 LOCAL_BASE="osrf_ctl.sh -d $OSRF_PID_DIR -c $OSRF_CONFIG";
31 DRONE_BASE=". /etc/profile && osrf_ctl.sh -d $OSRF_PID_DIR -c $OSRF_CONFIG";
32
33
34 # -------------------------------------------------------------------
35 # Make sure we're the opensrf user
36 # -------------------------------------------------------------------
37 [ $(whoami) != 'opensrf' ] && echo 'Must run as user "opensrf"' && exit;
38
39
40 function usage {
41     echo "";    
42     echo "usage: $0 -a <action>"
43     echo "  -u <base_url> : host + path URL where the download file lives";
44     echo "  -f <build_file> : the name of the bundle to fetch";
45     echo "  -x <xul_dir> : staff client build directory";
46     echo "  -i <xul_build_id> : staff client build ID";
47     echo "Actions:";    
48     echo "  fetch";
49     echo "  start_perl";
50     echo "  start_c";
51     echo "  start_osrf";
52     echo "  start_all";
53     echo "  stop_perl";
54     echo "  stop_c";
55     echo "  stop_osrf";
56     echo "  stop_all";
57     echo "  restart_perl";
58     echo "  restart_c";
59     echo "  restart_osrf";
60     echo "  restart_all";
61     echo "  build";
62     echo "  build_xul";
63     echo "  detach_brick";
64     echo "  attach_brick";
65     exit 0;
66 }
67
68
69 # -------------------------------------------------------------------
70 # Load the config opts
71 # -------------------------------------------------------------------
72 while getopts  "a:x:bf:hu:c:i:" flag; do
73     case $flag in   
74         "a") OPT_ACTION="$OPTARG";;
75         "u") OPT_FETCH_BASE_URL="$OPTARG";;
76         "f") OPT_FETCH_FILE="$OPTARG";;
77         "x") OPT_XUL_BUILD_DIR="$OPTARG";;
78         "i") OPT_XUL_BUILD_ID="$OPTARG";;
79         "c") OPT_CONFIG_FILE="$OPTARG";;
80         "h"|*) usage;;
81     esac;
82 done
83
84 # -------------------------------------------------------------------
85 # Load the config file
86 # -------------------------------------------------------------------
87 if [ -e "$OPT_CONFIG_FILE" ]; then
88     . $OPT_CONFIG_FILE;
89 else
90     if [ -e ~/.oils_brick.cfg ]; then
91         . $DEFAULT_CONFIG; 
92     else
93         echo "Please specify a valid config file or create one at $DEFAULT_CONFIG";
94     fi;
95 fi;
96
97
98 # make sure an action was specified
99 [ -z "$OPT_ACTION" ] && usage;
100
101
102 # -------------------------------------------------------------------
103 # Runs DRONE_ACT on the drones, then LOCAL_ACT on the local machine
104 # -------------------------------------------------------------------
105 function drone_first {
106     LOCAL_ACT=$1
107     DRONE_ACT=$2
108     echo "drone_first(): $LOCAL_ACT";
109     for drone in ${DRONES[@]:0}; do
110         echo "* $drone"
111         ssh "$drone" "$DRONE_ACT";
112     done;   
113     $LOCAL_ACT;
114 }
115
116 # -------------------------------------------------------------------
117 # Runs LOCAL_ACT on the local machine then DRONE_ACT on the drones
118 # -------------------------------------------------------------------
119 function local_first {
120     LOCAL_ACT=$1
121     DRONE_ACT=$2
122     echo  "local_first(): $LOCAL_ACT";
123     $LOCAL_ACT;
124     for drone in ${DRONES[@]:0}; do
125         echo "* $drone"
126         ssh "$drone" "$DRONE_ACT";
127     done;   
128 }
129
130 function make_xul {
131     DIR="$XUL_BASE/$OPT_XUL_BUILD_DIR";
132     echo "Building XUL and copying to $DIR";
133     cd "$OILS_SRC_DIR/Open-ILS/xul/staff_client" 
134     make clean;
135     make STAFF_CLIENT_BUILD_ID="$OPT_XUL_BUILD_ID";
136     cd "$XUL_BASE";
137     mkdir -p "$DIR";
138     cd "$DIR/..";
139     cp -r "$OILS_SRC_DIR/Open-ILS/xul/staff_client/build/server" "$DIR";
140     echo -e "\nLinking to new build directory: $OPT_XUL_BUILD_ID -> $DIR\n";
141     rm -f "$OPT_XUL_BUILD_ID";
142     rm -f current;
143     ln -s "$OPT_XUL_BUILD_DIR" current;
144     ln -s current "$OPT_XUL_BUILD_ID";
145 }
146
147 function detach_brick {
148     echo -n "Detaching brick...";
149
150     [ ! -f "$LDIRECTOR_FILE" ] && \
151         echo "ping file already moved, skipping ..." && return 0;
152
153     mv -f "$LDIRECTOR_FILE" "$LDIRECTOR_FILE-"
154     x=10;
155     while(sleep 1); do
156         x=$(expr $x - 1);
157         echo -n " $x ";
158         [ $x == 0 ] && break;
159     done;
160     echo "";
161 }
162
163 function fetch_build {
164
165     [ -z "$OPT_FETCH_BASE_URL" -o -z "$OPT_FETCH_FILE" ] && \
166         echo "I need a build URL and a bundle file..." && exit;
167     
168     NEW_DIR=${OPT_FETCH_FILE:0:$(expr ${#OPT_FETCH_FILE} - 7)};
169
170     if [ ! -d "$NEW_DIR" ]; then
171     
172         echo "Fetching archive...  $OPT_FETCH_BASE_URL$OPT_FETCH_FILE";
173         wget -q "$OPT_FETCH_BASE_URL$OPT_FETCH_FILE";
174     
175         [ ! -f "$OPT_FETCH_FILE" ] && \
176             echo "Unable to fetch $OPT_FETCH_FILE!" && exit;
177         
178         # unpack the new build
179         echo "Unpacking archive..."
180         tar -zxf $OPT_FETCH_FILE;
181         cp "current/install.conf" "$NEW_DIR/"
182         rm $OPT_FETCH_FILE;
183     fi;
184
185     rm current;
186     ln -s $NEW_DIR current;
187 }
188
189 case $OPT_ACTION in
190
191     "start_osrf") local_first "$LOCAL_BASE -a start_perl && $LOCAL_BASE -a start_c" \
192         "$DRONE_BASE -a start_perl && $DRONE_BASE -a start_c";;
193
194     "stop_osrf") drone_first "$LOCAL_BASE -a stop_perl && $LOCAL_BASE -a stop_c" \
195         "$DRONE_BASE -a stop_perl && $DRONE_BASE -a stop_c";;
196
197     "restart_osrf") local_first "$LOCAL_BASE -a restart_perl && $LOCAL_BASE -a restart_c" \
198         "$DRONE_BASE -a restart_perl && $DRONE_BASE -a restart_c";;
199
200     "start_perl") local_first "$LOCAL_BASE -a start_perl" "$DRONE_BASE -a start_perl";;
201     "stop_perl") drone_first "$LOCAL_BASE -a stop_perl" "$DRONE_BASE -a stop_perl";;
202     "restart_perl") local_first "$LOCAL_BASE -a restart_perl" "$DRONE_BASE -a restart_perl";;
203     "start_c") local_first "$LOCAL_BASE -a start_c" "$DRONE_BASE -a start_c";;
204     "stop_c") drone_first "$LOCAL_BASE -a stop_c" "$DRONE_BASE -a stop_c";;
205     "restart_c") local_first "$LOCAL_BASE -a restart_c" "$DRONE_BASE -a restart_c";;
206
207     "start_all") local_first "$LOCAL_BASE -a start_all" \
208         "$DRONE_BASE -a start_perl && $DRONE_BASE -a start_c";;
209
210     "stop_all") drone_first "$LOCAL_BASE -a stop_all" \
211         "$DRONE_BASE -a stop_perl && $DRONE_BASE -a stop_c";;
212
213     "restart_all") $0 -a stop_all; $0 -a start_all;;
214     "build") cd ~/ILS/ && make clean default_config all;;
215     "build_xul") make_xul;;
216     "detach_brick") detach_brick;;
217     "attach_brick") mv "$LDIRECTOR_FILE-" "$LDIRECTOR_FILE";;
218     "fetch") fetch_build;;
219 esac;
220
221