@@ -35,6 +35,10 @@ CCM_NAME="oci-cloud-controller-manager"
3535# downgrade operations.
3636CCM_LOCK_LABEL=" ccm-deployment-lock"
3737
38+ function ts() {
39+ local res=$( date ' +%Y-%m-%d %H:%M:%S' )
40+ echo " ${res} "
41+ }
3842
3943# Kubernetes Cluster CCM Functions ********************************************
4044#
@@ -50,7 +54,7 @@ function get-k8s-master() {
5054}
5155
5256function 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 )
5458 echo " ${res} "
5559}
5660
@@ -70,13 +74,13 @@ function get-ccm-ds-json() {
7074}
7175
7276function 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}' )
7478 echo " ${name} "
7579}
7680
7781function get-ccm-pod-image-version() {
7882 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 )
8084 echo " ${ready} "
8185}
8286
@@ -105,12 +109,13 @@ function is-ccm-pod-version-ready() {
105109function wait-for-ccm-pod-version-ready() {
106110 local version=$1
107111 local duration=${2:- 60}
108- local sleep=${3:- 10 }
112+ local sleep=${3:- 1 }
109113 local timeout=$(( $(date +% s) + $duration ))
110114 while [ $( date +%s) -lt $timeout ]; do
111115 if [ $( is-ccm-pod-version-ready ${version} ) = ' true' ]; then
112116 return 0
113117 fi
118+ echo " $( ts) : Waiting for ccm pod to be ready."
114119 sleep ${sleep}
115120 done
116121 echo " Failed to wait for pod version '${version} ' to be ready."
@@ -144,10 +149,12 @@ function get-ccm-manifest-version() {
144149# NB: The date is used to help auto-release a lock that has been placed.
145150function lock-ccm-deployment() {
146151 kubectl -n kube-system annotate ds " ${CCM_NAME} " " ${CCM_LOCK_LABEL} " =$( date +%s)
152+ echo " $( ts) : Locked ccm deployment."
147153}
148154
149155function unlock-ccm-deployment() {
150156 kubectl -n kube-system annotate ds " ${CCM_NAME} " " ${CCM_LOCK_LABEL} -"
157+ echo " $( ts) : Unlocked ccm deployment."
151158}
152159
153160function get-ccm-deployment-lock() {
@@ -179,16 +186,17 @@ function auto-release-lock() {
179186# Wait for the CCM to have no lock present.
180187function wait-for-ccm-deployment-permitted() {
181188 local duration=${1:- 3600}
182- local sleep=${2:- 60 }
189+ local sleep=${2:- 10 }
183190 local timeout=$(( $(date +% s) + $duration ))
184191 while [ $( date +%s) -lt $timeout ]; do
185192 auto-release-lock
186193 if [ $( is-ccm-deployment-locked) = ' false' ]; then
187194 return 0
188195 fi
196+ echo " $( ts) : Waiting for ccm deployment lock."
189197 sleep ${sleep}
190198 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."
192200 exit 1
193201}
194202
@@ -205,13 +213,21 @@ function release-ccm-deployment-lock() {
205213 unlock-ccm-deployment
206214}
207215
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+
208223# Test clean-up Functions *****************************************************
209224#
210225
211226function 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
215231 fi
216232}
217233
@@ -223,23 +239,19 @@ function deploy-build-version-ccm() {
223239 local hack_dir=$( cd " $( dirname " ${BASH_SOURCE[0]} " ) " > /dev/null && pwd)
224240 local dist_dir=$( dirname " ${hack_dir} " ) /dist
225241 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
229246 local build_version_image=$( get-ccm-manifest-image ${build_version_manifest} )
230247 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)
233248
234249 # Wait for there to be no lock on CCM deployment; then take the lock.
235250 # NB: Not threadsafe, but, better then nothing...
236251 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}
240252
241253 # 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) '."
243255 kubectl apply -f ${build_version_manifest}
244256
245257 # Wait for CCM to be ready...
@@ -249,6 +261,8 @@ function deploy-build-version-ccm() {
249261 echo " currently deployed CCM daemon-set version: $( get-ccm-ds-image-version) "
250262 echo " currently deployed CCM pod version : $( get-ccm-pod-image-version) "
251263 echo " currently deployed CCM pod ready state : $( get-ccm-pod-ready) "
264+ echo " CCM locked? : $( is-ccm-deployment-locked) "
265+
252266}
253267
254268# Rollback to the CCM version the cluster originally used before it was upgraded.
@@ -257,13 +271,12 @@ function rollback-original-ccm() {
257271 local dist_dir=$( dirname " ${hack_dir} " ) /dist
258272 local build_version_manifest=" ${dist_dir} /oci-cloud-controller-manager.yaml"
259273 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 )
262276
263- # Check the rollback manifest exists .
277+ # Generate a roll-back manifest based on the latest CCM release .
264278 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}
267280 fi
268281
269282 # Apply original CCM daemon-set manifest.
@@ -273,13 +286,14 @@ function rollback-original-ccm() {
273286 # Wait for CCM to be ready after rollback...
274287 wait-for-ccm-pod-version-ready " ${rollback_version} "
275288
289+ # Release the lock on the CCM deployment mechanism.
290+ release-ccm-deployment-lock
291+
276292 # Display Info
277293 echo " currently deployed CCM daemon-set version: $( get-ccm-ds-image-version) "
278294 echo " currently deployed CCM pod version : $( get-ccm-pod-image-version) "
279295 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) "
283297}
284298
285299
0 commit comments