Skip to content

Commit a9dadd1

Browse files
committed
Improvements to deploy and rollback functions.
1 parent 5fa7ae2 commit a9dadd1

File tree

3 files changed

+50
-34
lines changed

3 files changed

+50
-34
lines changed

hack/deploy.sh

+40-26
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@ CCM_NAME="oci-cloud-controller-manager"
3535
# downgrade operations.
3636
CCM_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

5256
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)
5458
echo "${res}"
5559
}
5660

@@ -70,13 +74,13 @@ function get-ccm-ds-json() {
7074
}
7175

7276
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}')
7478
echo "${name}"
7579
}
7680

7781
function 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() {
105109
function 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.
145150
function 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

149155
function unlock-ccm-deployment() {
150156
kubectl -n kube-system annotate ds "${CCM_NAME}" "${CCM_LOCK_LABEL}-"
157+
echo "$(ts) : Unlocked ccm deployment."
151158
}
152159

153160
function get-ccm-deployment-lock() {
@@ -179,16 +186,17 @@ function auto-release-lock() {
179186
# Wait for the CCM to have no lock present.
180187
function 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

211226
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
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

hack/test-canary.sh

+2-2
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ EOF
6767

6868
# A set of test_matcher strings that must match the appropriate gingko test
6969
# descriptions. These are used to extract the required test results.
70-
CREATE_LB_TEST="\[It\] \[Canary\] should be possible to create and mutate a Service type:LoadBalancer"
70+
CREATE_LB_TEST="\[It\] should be possible to create and mutate a Service type:LoadBalancer \[Canary\]"
7171
# Creates a JSON result file for the specified [Canary] tests to be extracted.
7272
function create_results() {
7373
local metrics_dir="$(dirname ${METRICS_FILE})"
@@ -76,7 +76,7 @@ function create_results() {
7676
cat > "${METRICS_FILE}" <<EOF
7777
{
7878
"start_time": "${START}"
79-
"create_lb": "$(_extract_result ${CREATE_LB_TEST})"
79+
"create_lb": "$(extract_result ${CREATE_LB_TEST})"
8080
"end_time": "$(now)"
8181
}
8282
EOF

wercker.yml

+8-6
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
box: golang:1.9
2+
no-response-timeout: 30
3+
command-timeout: 30
24
dev:
35
steps:
46
- internal/shell
@@ -8,7 +10,7 @@ build:
810
- script:
911
name: check boilerplate
1012
code: ./hack/verify-boilerplate.sh
11-
13+
1214
- script:
1315
name: go fmt
1416
code: make gofmt
@@ -48,7 +50,7 @@ copy:
4850
name: copy output
4951
code: |
5052
cp -a dist/* ${WERCKER_OUTPUT_DIR}
51-
53+
5254
- script:
5355
name: copy e2e test artifacts
5456
code: |
@@ -140,7 +142,7 @@ e2e-test:
140142
- script:
141143
name: deploy latest CCM
142144
code: make upgrade
143-
145+
144146
- script:
145147
name: e2e default tests
146148
code: make e2e
@@ -169,7 +171,7 @@ push-canary:
169171
- internal/docker-push:
170172
repository: iad.ocir.io/oracle/oci-cloud-controller-manager-canary
171173
tag: $VERSION
172-
working-dir: /go/src/github.com/oracle/oci-cloud-controller-manager/
174+
working-dir: /go/src/github.com/oracle/oci-cloud-controller-manager/
173175
entrypoint: make canary
174176
registry: https://iad.ocir.io/v2
175177
username: $OCIRUSERNAME
@@ -192,11 +194,11 @@ validate-canary:
192194
- script:
193195
name: deploy latest CCM
194196
code: make upgrade
195-
197+
196198
- script:
197199
name: validate canary tests
198200
code: make validate-canary
199-
201+
200202
after-steps:
201203
- script:
202204
name: rollback original CCM

0 commit comments

Comments
 (0)