@@ -35,6 +35,10 @@ CCM_NAME="oci-cloud-controller-manager"
35
35
# downgrade operations.
36
36
CCM_LOCK_LABEL=" ccm-deployment-lock"
37
37
38
+ function ts() {
39
+ local res=$( date ' +%Y-%m-%d %H:%M:%S' )
40
+ echo " ${res} "
41
+ }
38
42
39
43
# Kubernetes Cluster CCM Functions ********************************************
40
44
#
@@ -50,7 +54,7 @@ function get-k8s-master() {
50
54
}
51
55
52
56
function get-ccm-ds-image-version() {
53
- local res=$( kubectl -n kube-system get ds " ${CCM_NAME} " -o=jsonpath=" {.spec.template.spec.containers[0].image}" )
57
+ local res=$( kubectl -n kube-system get ds " ${CCM_NAME} " -o=jsonpath=" {.spec.template.spec.containers[0].image}" 2> /dev/null )
54
58
echo " ${res} "
55
59
}
56
60
@@ -70,13 +74,13 @@ function get-ccm-ds-json() {
70
74
}
71
75
72
76
function get-ccm-pod-name() {
73
- local name=$( kubectl -n kube-system get pods | grep oci-cloud-controller-manager | awk ' {print $1}' )
77
+ local name=$( kubectl -n kube-system get pods 2> /dev/null | grep oci-cloud-controller-manager | awk ' {print $1}' )
74
78
echo " ${name} "
75
79
}
76
80
77
81
function get-ccm-pod-image-version() {
78
82
local name=$( get-ccm-pod-name)
79
- local ready=$( kubectl -n kube-system get pod ${name} -o=jsonpath=' {.status.containerStatuses[0].image}' )
83
+ local ready=$( kubectl -n kube-system get pod ${name} -o=jsonpath=' {.status.containerStatuses[0].image}' 2> /dev/null )
80
84
echo " ${ready} "
81
85
}
82
86
@@ -105,12 +109,13 @@ function is-ccm-pod-version-ready() {
105
109
function wait-for-ccm-pod-version-ready() {
106
110
local version=$1
107
111
local duration=${2:- 60}
108
- local sleep=${3:- 10 }
112
+ local sleep=${3:- 1 }
109
113
local timeout=$(( $(date +% s) + $duration ))
110
114
while [ $( date +%s) -lt $timeout ]; do
111
115
if [ $( is-ccm-pod-version-ready ${version} ) = ' true' ]; then
112
116
return 0
113
117
fi
118
+ echo " $( ts) : Waiting for ccm pod to be ready."
114
119
sleep ${sleep}
115
120
done
116
121
echo " Failed to wait for pod version '${version} ' to be ready."
@@ -144,10 +149,12 @@ function get-ccm-manifest-version() {
144
149
# NB: The date is used to help auto-release a lock that has been placed.
145
150
function lock-ccm-deployment() {
146
151
kubectl -n kube-system annotate ds " ${CCM_NAME} " " ${CCM_LOCK_LABEL} " =$( date +%s)
152
+ echo " $( ts) : Locked ccm deployment."
147
153
}
148
154
149
155
function unlock-ccm-deployment() {
150
156
kubectl -n kube-system annotate ds " ${CCM_NAME} " " ${CCM_LOCK_LABEL} -"
157
+ echo " $( ts) : Unlocked ccm deployment."
151
158
}
152
159
153
160
function get-ccm-deployment-lock() {
@@ -179,16 +186,17 @@ function auto-release-lock() {
179
186
# Wait for the CCM to have no lock present.
180
187
function wait-for-ccm-deployment-permitted() {
181
188
local duration=${1:- 3600}
182
- local sleep=${2:- 60 }
189
+ local sleep=${2:- 10 }
183
190
local timeout=$(( $(date +% s) + $duration ))
184
191
while [ $( date +%s) -lt $timeout ]; do
185
192
auto-release-lock
186
193
if [ $( is-ccm-deployment-locked) = ' false' ]; then
187
194
return 0
188
195
fi
196
+ echo " $( ts) : Waiting for ccm deployment lock."
189
197
sleep ${sleep}
190
198
done
191
- echo " Failed to wait for ccm to finish running existing ci pipeline tests."
199
+ echo " $( ts ) : Failed to wait for ccm to finish running existing ci pipeline tests."
192
200
exit 1
193
201
}
194
202
@@ -205,13 +213,21 @@ function release-ccm-deployment-lock() {
205
213
unlock-ccm-deployment
206
214
}
207
215
216
+ # Get the latest release number of the CCM from github.
217
+ function get_latest_ccm_release() {
218
+ local repo=" oracle/oci-cloud-controller-manager"
219
+ local url=" https://api.github.com/repos/${repo} /releases/latest"
220
+ echo $( curl -s ${url} | grep ' "tag_name":' | sed -E ' s/.*"([^"]+)".*/\1/' )
221
+ }
222
+
208
223
# Test clean-up Functions *****************************************************
209
224
#
210
225
211
226
function ensure-clean-e2e-test-namespace() {
212
- local res=$( kubectl get pods --all-namespaces | grep ' cm-e2e-tests-' | awk ' {print $1}' )
213
- if [ ! -z ${res} ]; then
214
- cat ${res} | xargs kubectl delete ns
227
+ echo " ensuring all 'ccm-e2e-tests' namespaces are terminated."
228
+ local res=$( kubectl get ns | grep ' cm-e2e-tests-' | awk ' {print $1}' )
229
+ if [ ! -z " ${res} " ]; then
230
+ echo ${res} | xargs kubectl delete ns 2> /dev/null
215
231
fi
216
232
}
217
233
@@ -223,23 +239,19 @@ function deploy-build-version-ccm() {
223
239
local hack_dir=$( cd " $( dirname " ${BASH_SOURCE[0]} " ) " > /dev/null && pwd)
224
240
local dist_dir=$( dirname " ${hack_dir} " ) /dist
225
241
local build_version_manifest=" ${dist_dir} /oci-cloud-controller-manager.yaml"
226
- local rollback_manifest=" ${dist_dir} /oci-cloud-controller-manager-rollback.yaml"
227
-
228
- local version=$( cat ${dist_dir} /VERSION.txt)
242
+ if [ ! -f ${build_version_manifest} ]; then
243
+ echo " Error: The CCM deployment manifest '${build_version_manifest} ' did not exist."
244
+ exit 1
245
+ fi
229
246
local build_version_image=$( get-ccm-manifest-image ${build_version_manifest} )
230
247
local build_version=$( get-ccm-manifest-version ${build_version_manifest} )
231
- local rollback_image=$( get-ccm-ds-image)
232
- local rollback_version=$( get-ccm-ds-version)
233
248
234
249
# Wait for there to be no lock on CCM deployment; then take the lock.
235
250
# NB: Not threadsafe, but, better then nothing...
236
251
obtain-ccm-deployment-lock
237
-
238
- # Generate a rollback CCM daemon-set manifest.
239
- sed s#${rollback_image} :.* # ${rollback_image}:${rollback_version}#g < ${build_version_manifest} > ${rollback_manifest}
240
252
241
253
# Apply the build daemon-set manifest.
242
- echo " deploying test '${version } ' CCM '${build_version_image} :${build_version} ' to cluster '$( get-k8s-master) '."
254
+ echo " deploying test build '${build_version } ' CCM '${build_version_image} :${build_version} ' to cluster '$( get-k8s-master) '."
243
255
kubectl apply -f ${build_version_manifest}
244
256
245
257
# Wait for CCM to be ready...
@@ -249,6 +261,8 @@ function deploy-build-version-ccm() {
249
261
echo " currently deployed CCM daemon-set version: $( get-ccm-ds-image-version) "
250
262
echo " currently deployed CCM pod version : $( get-ccm-pod-image-version) "
251
263
echo " currently deployed CCM pod ready state : $( get-ccm-pod-ready) "
264
+ echo " CCM locked? : $( is-ccm-deployment-locked) "
265
+
252
266
}
253
267
254
268
# Rollback to the CCM version the cluster originally used before it was upgraded.
@@ -257,13 +271,12 @@ function rollback-original-ccm() {
257
271
local dist_dir=$( dirname " ${hack_dir} " ) /dist
258
272
local build_version_manifest=" ${dist_dir} /oci-cloud-controller-manager.yaml"
259
273
local rollback_manifest=" ${dist_dir} /oci-cloud-controller-manager-rollback.yaml"
260
- local rollback_image=$( get-ccm-manifest -image ${rollback_manifest} )
261
- local rollback_version=$( get-ccm-manifest-version ${rollback_manifest} )
274
+ local rollback_image=$( get-ccm-ds -image)
275
+ local rollback_version=$( get_latest_ccm_release )
262
276
263
- # Check the rollback manifest exists .
277
+ # Generate a roll-back manifest based on the latest CCM release .
264
278
if [ ! -f ${rollback_manifest} ]; then
265
- echo " the rollback manifest '${rollback_manifest} ' did not exist."
266
- exit 1
279
+ sed s#${rollback_image} :.* # ${rollback_image}:${rollback_version}#g < ${build_version_manifest} > ${rollback_manifest}
267
280
fi
268
281
269
282
# Apply original CCM daemon-set manifest.
@@ -273,13 +286,14 @@ function rollback-original-ccm() {
273
286
# Wait for CCM to be ready after rollback...
274
287
wait-for-ccm-pod-version-ready " ${rollback_version} "
275
288
289
+ # Release the lock on the CCM deployment mechanism.
290
+ release-ccm-deployment-lock
291
+
276
292
# Display Info
277
293
echo " currently deployed CCM daemon-set version: $( get-ccm-ds-image-version) "
278
294
echo " currently deployed CCM pod version : $( get-ccm-pod-image-version) "
279
295
echo " currently deployed CCM pod ready state : $( get-ccm-pod-ready) "
280
-
281
- # Release the lock on the CCM deployment mechanism.
282
- release-ccm-deployment-lock
296
+ echo " CCM locked? : $( is-ccm-deployment-locked) "
283
297
}
284
298
285
299
0 commit comments