install-eg.sh: install production branch
[sitka/sitka-tools.git] / deployment / deployfile.sh
1 #!/bin/bash
2
3 _ProdServers=" app4 app5 app6 stanns sip2 bibc-prod"
4
5 usage()
6 {
7   cat <<EOF
8 USAGE:
9 ./deployfile.sh -f filename -p /path/to/destination/ [ -u remoteuser ] [ -b ] host1 [ host2 ... ]
10 ./deployfile.sh -f evergreen.git/Open-ILS/something/something -d [ -u remoteuser ] [ -b ] host1 [ host2 ... ]
11
12 OPTIONS:
13   -f    Name of file to be deployed
14   -p    Path on remote server where file should be deployed to (overrides -d)
15   -d    Determine remote path automatically (experimental; ignored if a path is specified with -p)
16   -u    Username to use when logging into remote server; if not provided, defaults to current user
17   -b    Backup flag (optional); creates a backup instead of overwriting file on remote server
18   -P    Auto add all production machines to host list
19   -h    Print this message and exit
20   -v    Verbose output - echo parameters to stdout
21 EOF
22 }
23
24 while getopts ":f:p:u:bdPvh" opt
25 do
26   case $opt in
27     f ) FILE=$OPTARG;;
28     p ) DEST=$OPTARG;;
29     d ) AUTOPATH="d";;
30     u ) USER=$OPTARG;;
31     b ) BACKUP="-b --suffix=.`date +%Y%m%d%H%M`";;
32     P ) PROD="P";;
33     v ) VERBOSE="v";;
34     h ) usage && exit 0;;
35   esac
36 done
37 shift $(($OPTIND - 1))
38
39 if [[ -z "$FILE" ]] || ([[ -z "$DEST" ]] && [[ -z "$AUTOPATH" ]]) | ([[ $# -lt 1 ]] && [[ -z "$PROD" ]])
40 then
41   usage
42   exit 1
43 fi
44
45 # attempt to determine the remote destination path automatically
46 if [[ -n "$AUTOPATH" ]] && [[ -z "$DEST" ]]
47 then
48
49   AUTODEST=$FILE
50
51   # TPAC
52   if [ "$FILE" == "$AUTODEST" ]; then
53     AUTODEST=$(printf '%s' "$FILE" | sed 's|^.*Open-ILS/src/templates/\(.*\)$|/srv/openils/var/templates/\1|')
54   fi
55
56   # perl
57   if [ "$FILE" == "$AUTODEST" ]; then
58     AUTODEST=$(printf '%s' "$FILE" | sed 's|^.*Open-ILS/src/perlmods/lib/\(.*\)$|/usr/local/share/perl/5.14.2/\1|')
59   fi
60
61   # web
62   if [ "$FILE" == "$AUTODEST" ]; then
63     AUTODEST=$(printf '%s' "$FILE" | sed 's|^.*Open-ILS/web/\(.*\)$|/srv/openils/var/web/\1|')
64   fi
65
66   # xul
67   if [ "$FILE" == "$AUTODEST" ]; then
68     AUTODEST=$(printf '%s' "$FILE" | sed 's|^.*Open-ILS/xul/staff_client/server/\(.*\)$|/srv/openils/var/web/xul/server/\1|')
69   fi
70
71   if [ "$FILE" == "$AUTODEST" ]; then
72     echo "Destination path could not be determined.\n"
73     exit 1
74   fi
75
76   DEST=$AUTODEST
77
78 fi
79
80 if [[ -z "$USER" ]]
81 then
82   SSH="ssh"
83 else
84   SSH="ssh -l${USER}"
85 fi
86
87 if [[ -z "$PROD" ]]
88 then
89     _hosts="$@"
90 else
91   echo "adding ${_ProdServers} to hosts"
92   _hosts="$@$_ProdServers"
93 fi
94
95 for HOST in $_hosts
96 do
97   RSYNC_DEST="${HOST}:${DEST}"
98   if [[ -z "$VERBOSE" ]]; then
99     echo -e "$HOST:\n\tFILE=$FILE\n\tDEST=$DEST\n\tUSER=$USER\n\tBACKUP=$BACKUP\n\tSSH=$SSH\n\tRSYNC_DEST=$RSYNC_DEST\n\tAUTOPATH=$AUTOPATH\n\tAUTODEST=$AUTODEST\n"
100   fi
101   rsync -e"${SSH}" $BACKUP -avz $FILE $RSYNC_DEST
102 done