forked from ClusterLabs/pacemaker
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathcluster_test
executable file
·184 lines (157 loc) · 5.22 KB
/
cluster_test
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
#!/bin/bash
anyAsked=0
if [ -e ~/.cts ]; then
. ~/.cts
fi
CTS_master=`uname -n`
CTS_numtests=$1
if [ "x$CTS_master" = "x" ]; then
anyAsked=1
printf "This script should only be executed on the test master.\n"
printf "The test master will remotely execute the actions required by the tests and should not be part of the cluster itself.\n"
read -p "Is this host intended to be the test master? (yN)" CTS_master
if [ "x$CTS_master" != "xy" ]; then
printf "This script must be executed on the test master\n"
exit 1
fi
fi
if [ "x$CTS_node_list" = "x" ]; then
anyAsked=1
read -p "Please list your cluster nodes (eg. node1 node2 node3): " CTS_node_list
else
printf "Beginning test of cluster: $CTS_node_list\n"
fi
if [ "x$CTS_stack" = "x" ]; then
anyAsked=1
read -p "Which cluster stack are you using? ([corosync], openais, or heartbeat): " CTS_stack
if [ -z $CTS_stack ]; then
CTS_stack=corosync
fi
else
printf "Using the $CTS_stack cluster stack\n"
fi
tmp=`echo ${CTS_node_list} | sed s/$HOSTNAME//`
if [ "x${CTS_node_list}" != "x${tmp}" ]; then
printf "This script must be executed on the test master and the test master cannot be part of the cluster\n"
exit 1
fi
printf "+ Bootstraping ssh... "
if [ -z $SSH_AUTH_SOCK ]; then
printf "\n + Initializing SSH "
agent_tmp=/tmp/.$$.ssh
ssh-agent > $agent_tmp
. $agent_tmp
rm $agent_tmp
printf " + Adding identities...\n"
ssh-add
rc=$?
if [ $rc != 0 ]; then
printf " -- No identities added\n"
printf "\nThe ability to open key-based 'ssh' connections (as the user 'root') is required to use CTS.\n"
read -p " - Do you want this program to help you create one? (yN)" auto_fix
if [ "x$auto_fix" = "xy" ]; then
ssh-keygen -t dsa
ssh-add
else
printf "Please run 'ssh-keygen -t dsa' to create a new key\n"
exit 1
fi
fi
else
printf "OK\n"
fi
test_ok=1
printf "+ Testing ssh configuration... "
for n in $CTS_node_list; do
ssh -l root -o PasswordAuthentication=no -o ConnectTimeout=5 $n /bin/true
rc=$?
if [ $rc != 0 ]; then
printf "\n - connection to $n failed"
test_ok=0
fi
done
if [ $test_ok = 0 ]; then
printf "\n\nThe ability to open key-based 'ssh' connections (as the user 'root') is required to use CTS.\n"
printf " Please install one of your SSH public keys to root's account on all cluster nodes\n"
# todo - look for identities and guide the installation of one
exit 1
fi
printf "OK\n"
if [ -z $CTS_logfile ]; then
anyAsked=1
read -p " + Where does/should syslog store logs from remote hosts? (/var/log/messages) " CTS_logfile
if [ "x$CTS_logfile" = "x" ]; then
CTS_logfile=/var/log/messages
fi
fi
if [ ! -e $CTS_logfile ]; then
printf "$CTS_logfile doesn't exist\n"
exit 1
fi
if [ -z $CTS_logfacility ]; then
anyAsked=1
read -p " + Which log facility does the cluster use? (daemon) " CTS_logfacility
if [ "x$CTS_logfacility" = "x" ]; then
CTS_logfacility=daemon
fi
fi
if [ -z $CTS_boot ]; then
read -p "+ Is the cluster software started automatically when a node boots? [yN] " CTS_boot
if [ -z $CTS_boot ]; then
CTS_boot=0
else
case $CTS_boot in
1|y|Y) CTS_boot=1;;
*) CTS_boot=0;;
esac
fi
fi
if [ -z $CTS_numtests ]; then
read -p "+ How many test iterations should be performed? (500) " CTS_numtests
if [ -z $CTS_numtests ]; then
CTS_numtests=500
fi
fi
if [ -z $CTS_asked_once ]; then
anyAsked=1
read -p "+ What type of STONITH agent do you use? (none) " CTS_stonith
if [ "x$CTS_stonith" != "x" ]; then
read -p "+ List any STONITH agent parameters (eq. device_host=switch.power.com): " CTS_stonith_args
fi
if [ -z $CTS_adv ]; then
read -p "+ (Advanced) Any extra CTS parameters? (none) " CTS_adv
fi
fi
if [ $anyAsked = 1 ]; then
read -p "+ Save values to ~/.cts for next time? (yN) " doSave
fi
if [ "x$doSave" = "xy" ]; then
echo "# CTS Test data" > ~/.cts
echo CTS_master=\"$CTS_master\" >> ~/.cts
echo CTS_stack=\"$CTS_stack\" >> ~/.cts
echo CTS_node_list=\"$CTS_node_list\" >> ~/.cts
echo CTS_logfile=\"$CTS_logfile\" >> ~/.cts
echo CTS_logport=$CTS_logport >> ~/.cts
echo CTS_logfacility=$CTS_logfacility >> ~/.cts
echo CTS_asked_once=1 >> ~/.cts
echo CTS_adv=\"$CTS_adv\" >> ~/.cts
echo CTS_stonith=$CTS_stonith >> ~/.cts
echo CTS_stonith_args=\"$CTS_stonith_args\" >> ~/.cts
echo CTS_boot=\"$CTS_boot\" >> ~/.cts
fi
cts_extra=""
if [ "x$CTS_stonith" != "x" ]; then
cts_extra="$cts_extra --stonith-type $CTS_stonith"
if [ "x$CTS_stonith_args" != "x" ]; then
cts_extra="$cts_extra --stonitha-params \"$CTS_stonith_args\""
fi
else
cts_extra="$cts_extra --stonith 0"
printf " - Testing a cluster without STONITH is like a blunt pencil... pointless\n"
fi
printf "\nAll set to go for $CTS_numtests iterations!\n"
if [ $anyAsked = 0 ]; then
printf "+ To use a different configuration, remove ~/.cts and re-run cts (or edit it manually).\n"
fi
echo Now paste the following command into this shell:
echo python "`dirname "$0"`"/CTSlab.py -L $CTS_logfile --syslog-facility $CTS_logfacility --no-unsafe-tests --stack $CTS_stack $CTS_adv --at-boot $CTS_boot $cts_extra $CTS_numtests --nodes \"$CTS_node_list\"