-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathmclaunch.sh
executable file
·214 lines (175 loc) · 6.19 KB
/
mclaunch.sh
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
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
#!/bin/bash
shopt -s expand_aliases
# Source the variables and functions in utilities.sh
. utilities.sh
function client_only_deployment() {
local cluster=$1
# In Client-Only mode, pin the Server label to the same node
# as the Gateway (as indicated by the node label FT_MC_CO_SERVER_LABEL),
# so in Multi-Cluster Deployment:
# * "Same Node" implies same node as Gateway
# * "Different Node" implies different node from Gateway
LCL_SERVER_NODE=
if [ ! -z "$FT_MC_CO_SERVER_LABEL" ] ; then
LCL_SERVER_NODE=$(kubectl get nodes --no-headers -l ${FT_MC_CO_SERVER_LABEL} -o custom-columns=":metadata.name")
fi
echo "FT_NAMESPACE=${FT_NAMESPACE}"
echo "FT_MC_CO_SERVER_LABEL=${FT_MC_CO_SERVER_LABEL}"
echo "LCL_SERVER_NODE=${LCL_SERVER_NODE}"
echo " Adding Client-Only Deployment to ${cluster}"
echo "----------"
FT_NAMESPACE=${FT_NAMESPACE} FT_EXPORT_SVC=false FT_CLIENTONLY=true FT_REQ_SERVER_NODE=${LCL_SERVER_NODE} ./launch.sh
echo "----------"
}
# Save Context to restore when done.
ORIG_CONTEXT=$(kubectl config current-context)
#
# Default values (possible to override)
#
FT_NAMESPACE=${FT_NAMESPACE:-flow-test}
FT_MC_CO_SERVER_LABEL=${FT_MC_CO_SERVER_LABEL:-submariner.io/gateway=true}
FULL_CLUSTERS="all"
CO_CLUSTERS="all"
if [ ! -z "$FT_FULL_CLUSTERS" ] ; then
FULL_CLUSTERS=($FT_FULL_CLUSTERS)
fi
if [ ! -z "$FT_CO_CLUSTERS" ] ; then
CO_CLUSTERS=($FT_CO_CLUSTERS)
fi
echo "Dumping FULL_CLUSTERS array:"
for j in "${!FULL_CLUSTERS[@]}"
do
echo " FULL_CLUSTERS $j: ${FULL_CLUSTERS[$j]}"
done
echo "Dumping CO_CLUSTERS array:"
for k in "${!CO_CLUSTERS[@]}"
do
echo " CO_CLUSTERS $k: ${CO_CLUSTERS[$k]}"
done
echo
# Retrieve all the managed clusters
CLUSTER_ARRAY=($(kubectl config get-contexts --no-headers=true | awk -F' ' '{print $3}'))
CLUSTER_LEN=${#CLUSTER_ARRAY[@]}
# Loop through all the Clusters and add normal Flow-Test deployment (Server Pods and Services)
# to the desired clusters
FULL_DEPLOYMENT=false
CO_DEPLOYMENT=false
EMPTY_CLUSTER1=
EMPTY_CLUSTER2=
echo "Looping through Cluster List ($CLUSTER_LEN entries):"
for i in "${!CLUSTER_ARRAY[@]}"
do
echo " Analyzing Cluster $i: ${CLUSTER_ARRAY[$i]}"
FOUND=false
FULL_ALL_FOUND=false
CO_ALL_FOUND=false
kubectl config use-context ${CLUSTER_ARRAY[$i]} &>/dev/null
# If it is the last Cluster in the list, and no Client Only has been
# deployed, and Full Deployment has been deployed, then use it as a
# Client Only (default case of FULL_CLUSTERS="all" and CO_CLUSTERS="all").
if [ "$i" == "$(($CLUSTER_LEN-1))" ] && [ "${CO_DEPLOYMENT}" == false ] && [ "${FULL_DEPLOYMENT}" == true ] ; then
echo " Last Cluster and CO Deployment not found and Full Deployment deployed."
client_only_deployment ${CLUSTER_ARRAY[$i]}
CO_DEPLOYMENT=true
FOUND=true
else
# Loop through all requested Full Deployments
for j in "${!FULL_CLUSTERS[@]}"
do
echo " Testing FULL $j: ${FULL_CLUSTERS[$j]}"
# Remember "all" was requested and apply later if not Client Only
# not requested on this specific cluster
if [ "${FULL_CLUSTERS[$j]}" == "all" ] ; then
FULL_ALL_FOUND=true
fi
# If this Cluster has been requested for Full Deployment, then
# deploy Full Deploymenr
if [ "${FULL_CLUSTERS[$j]}" == "${CLUSTER_ARRAY[$i]}" ] ; then
echo " Adding Full Deployment to ${CLUSTER_ARRAY[$i]}"
echo "----------"
FT_NAMESPACE=${FT_NAMESPACE} FT_EXPORT_SVC=true FT_CLIENTONLY=false ./launch.sh
echo "----------"
FULL_DEPLOYMENT=true
FOUND=true
break
fi
done
if [ "$FOUND" == false ] ; then
# Loop through all requested CO Deployments
for k in "${!CO_CLUSTERS[@]}"
do
echo " Testing CO $k: ${CO_CLUSTERS[$k]}"
# Remember "all" was requested and apply later if not Full Mode
# did not request "all".
if [ "${CO_CLUSTERS[$k]}" == "all" ] ; then
CO_ALL_FOUND=true
fi
if [ "${CO_CLUSTERS[$k]}" == "${CLUSTER_ARRAY[$i]}" ] ; then
client_only_deployment ${CLUSTER_ARRAY[$i]}
CO_DEPLOYMENT=true
FOUND=true
break
fi
done
fi
if [ "$FOUND" == false ] ; then
if [ "$FULL_ALL_FOUND" == true ] ; then
echo " Adding Full Deployment to ${CLUSTER_ARRAY[$i]}"
echo "----------"
FT_NAMESPACE=${FT_NAMESPACE} FT_EXPORT_SVC=true FT_CLIENTONLY=false ./launch.sh
echo "----------"
FULL_DEPLOYMENT=true
FOUND=true
elif [ "$CO_ALL_FOUND" == true ] ; then
client_only_deployment ${CLUSTER_ARRAY[$i]}
CO_DEPLOYMENT=true
FOUND=true
elif [ -z "$EMPTY_CLUSTER1" ] ; then
EMPTY_CLUSTER1=${CLUSTER_ARRAY[$i]}
elif [ -z "$EMPTY_CLUSTER2" ] ; then
EMPTY_CLUSTER2=${CLUSTER_ARRAY[$i]}
fi
fi
fi
done
if [ "$FULL_DEPLOYMENT" == false ] ; then
if [ ! -z "$EMPTY_CLUSTER1" ] ; then
EMPTY_CLUSTER=$EMPTY_CLUSTER1
EMPTY_CLUSTER1=
elif [ ! -z "$EMPTY_CLUSTER2" ] ; then
EMPTY_CLUSTER=$EMPTY_CLUSTER2
EMPTY_CLUSTER2=
fi
if [ ! -z "$EMPTY_CLUSTER" ] ; then
echo "Full Deployment not found so using a random cluster Flow-Test was not deployed on."
echo " Adding Full Deployment to ${EMPTY_CLUSTER}"
echo "----------"
kubectl config use-context ${EMPTY_CLUSTER} &>/dev/null
FT_NAMESPACE=${FT_NAMESPACE} FT_EXPORT_SVC=true FT_CLIENTONLY=false ./launch.sh
echo "----------"
FULL_DEPLOYMENT=true
EMPTY_CLUSTER=
else
echo "ERROR: Full Deployment not found and no empty Clusters detected."
fi
fi
if [ "$CO_DEPLOYMENT" == false ] ; then
if [ ! -z "$EMPTY_CLUSTER1" ] ; then
EMPTY_CLUSTER=$EMPTY_CLUSTER1
EMPTY_CLUSTER1=
elif [ ! -z "$EMPTY_CLUSTER2" ] ; then
EMPTY_CLUSTER=$EMPTY_CLUSTER2
EMPTY_CLUSTER2=
fi
if [ ! -z "$EMPTY_CLUSTER" ] ; then
kubectl config use-context ${EMPTY_CLUSTER} &>/dev/null
echo "CO Deployment not found so using a random cluster Flow-Test was not deployed on."
client_only_deployment ${EMPTY_CLUSTER}
CO_DEPLOYMENT=true
EMPTY_CLUSTER=
else
echo "ERROR: CO Deployment not found and no empty Clusters detected."
fi
fi
# Restore context to original.
kubectl config use-context ${ORIG_CONTEXT}