homegrown rollout tool for automation
Olaf Bohlen
2022-01-11 ef618741446c1439b4267a8dc579f67531b934e3
commit | author | age
ef6187 1 #!/bin/ksh
OB 2
3 # $Id: roller.ksh 603 2010-12-29 15:37:28Z olbohlen@EWENET.EWE.DE $
4 # hopefully an universal and automagic file and patch deployment tool
5 # written by Olaf 'I am sooo tired of writing a new rollout script for every package' Bohlen
6 # olaf.bohlen@btc-it-services.com 2010-12-27
7
8 usage() {
9     cat <<EOF
10 Usage: $0 [ install | remove | info | run ] [ pkg | patch | tar | script ] [ filename ] [ hostname ]
11
12 EOF
13 }
14
15 prep_workdir() {
16     ${SSHCMD} ${CLIENT} "mkdir -p /var/tmp/roller-work"
17     ${SCPCMD} ${FILENAME} ${CLIENT}:/var/tmp/roller-work
18 }
19
20 clr_workdir() {
21     ${SSHCMD} ${CLIENT} "/usr/bin/rm -f /var/tmp/roller-work/${FILENAME}"
22 }
23
24 pr_status() {
25     typeset rt
26
27     rt=$1
28     echo "I: tried to ${ACTION} ${MODE} ${FILENAME} on ${CLIENT} returned with ${rt}"
29 }
30
31 run_script() {
32     prep_workdir
33
34     ${SSHCMD} ${CLIENT} /var/tmp/roller-work/${FILENAME}
35     rt=$?
36     pr_status ${rt}
37     clr_workdir
38     exit ${rt}
39 }
40
41 rem_pkg() {
42     typeset rt
43
44     prep_workdir
45     cat | ${SSHCMD} ${CLIENT} "cat - >/var/tmp/roller-work/admin" <<EOF
46 mail=
47 instance=unique
48 partial=nocheck
49 runlevel=nocheck
50 idepend=quit
51 rdepend=quit
52 space=quit
53 setuid=nocheck
54 conflict=nocheck
55 action=nocheck
56 networktimeout=60
57 networkretries=3
58 authentication=quit
59 keystore=/var/sadm/security
60 proxy=
61 basedir=default
62 EOF
63
64     ${SSHCMD} ${CLIENT} "/usr/bin/yes y | /usr/sbin/pkgrm -a /var/tmp/roller-work/admin ${FILENAME}"
65     rt=$?
66     pr_status ${rt}
67     clr_workdir
68     exit ${rt}
69     
70 }
71
72 inst_pkg() {
73     typeset pkgflag
74     typeset rt
75     # copy file to server
76     prep_workdir
77     cat | ${SSHCMD} ${CLIENT} "cat - >/var/tmp/roller-work/admin" <<EOF
78 mail=
79 instance=unique
80 partial=nocheck
81 runlevel=nocheck
82 idepend=quit
83 rdepend=quit
84 space=quit
85 setuid=nocheck
86 conflict=nocheck
87 action=nocheck
88 networktimeout=60
89 networkretries=3
90 authentication=quit
91 keystore=/var/sadm/security
92 proxy=
93 basedir=default
94 EOF
95     if [ x$(${SSHCMD} ${CLIENT} "uname -r") == x5.10 ]; then
96     pkgflag=-G
97     else
98     pkgflag=""
99     fi
100     ${SSHCMD} ${CLIENT} "/usr/bin/yes y | /usr/sbin/pkgadd -a /var/tmp/roller-work/admin ${pkgflag} -d /var/tmp/roller-work/${FILENAME} all"
101     rt=$?
102     pr_status ${rt}
103     clr_workdir
104     exit ${rt}
105 }
106
107 inst_patch() {
108     typeset rt
109
110     # copy patch
111     prep_workdir
112
113     # patchadd patch
114     ${SSHCMD} ${CLIENT} "/usr/sbin/patchadd -G /var/tmp/roller-work/${FILENAME}"
115     rt=$?
116     pr_status ${rt}
117     clr_workdir
118     exit ${rt}
119 }
120
121 # MAIN #
122 ########
123
124 SSHCMD="ssh"
125 SCPCMD="scp"
126 TIMEOUT="-o ConnectTimeout=5"
127 #SSHCMD="sshroot"
128 #SCPCMD=scproot
129
130 ACTION=$1   # install, remove, info, run (run filename on remote host)
131 MODE=$2     # pkg, patch, tar, ...
132 FILENAME=$3 # file containing patch, pkg, tar, script, whatever
133 CLIENT=$4   # clients host name
134
135 if [ x${CLIENT} == x ]; then
136     echo "E: missing target clients hostname..."
137     exit 1
138 fi
139
140 # sanity check, is CLIENT reachable? if not, terminate
141 ${SSHCMD} ${CLIENT} "exit 42"
142 if [ $? -ne 42 ]; then
143     # something went wrong...
144     echo "E: host ${CLIENT} not reachable, skipping..."
145     exit 1
146 fi
147
148 case ${ACTION} in
149     install) inst_${MODE}
150     ;;
151
152     remove) rem_${MODE}
153     ;;
154
155     info) info_${MODE}
156     ;;
157
158     run) run_${MODE}
159     ;;
160
161     *) usage
162        exit 1;;
163 esac
164