12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- #!/bin/bash
- set -e
- namespaces="${NAMESPACES}"
- rancher_namespace="${RANCHER_NAMESPACE}"
- timeout="${TIMEOUT}"
- ignoreTimeoutError="${IGNORETIMEOUTERROR}"
- if [[ -z ${namespaces} ]]; then
- echo "No namespace is provided."
- exit 1
- fi
- if [[ -z ${rancher_namespace} ]]; then
- echo "No rancher namespace is provided."
- exit 1
- fi
- if [[ -z ${timeout} ]]; then
- echo "No timeout value is provided."
- exit 1
- fi
- if [[ -z ${ignoreTimeoutError} ]]; then
- echo "No ignoreTimeoutError value is provided."
- exit 1
- fi
- succeeded=()
- failed=()
- get_pod_count() {
- kubectl get pods --selector app="${1}" -n "${2}" -o json | jq '.items | length'
- }
- echo "Uninstalling Rancher resources in the following namespaces: ${namespaces}"
- for namespace in ${namespaces}; do
- for app in $(helm list -n "${namespace}" -q); do
- if [[ ${app} =~ .crd$ ]]; then
- echo "--- Skip the app [${app}] in the namespace [${namespace}]"
- continue
- fi
- echo "--- Deleting the app [${app}] in the namespace [${namespace}]"
- if [[ ! $(helm uninstall "${app}" -n "${namespace}") ]]; then
- failed=("${failed[@]}" "${app}")
- continue
- fi
- t=0
- while true; do
- if [[ $(get_pod_count "${app}" "${namespace}") -eq 0 ]]; then
- echo "successfully uninstalled [${app}] in the namespace [${namespace}]"
- succeeded=("${succeeded[@]}" "${app}")
- break
- fi
- if [[ ${t} -ge ${timeout} ]]; then
- echo "timeout uninstalling [${app}] in the namespace [${namespace}]"
- failed=("${failed[@]}" "${app}")
- break
- fi
- # by default, wait 120 seconds in total for an app to be uninstalled
- echo "waiting 5 seconds for pods of [${app}] to be terminated ..."
- sleep 5
- t=$((t + 5))
- done
- done
- # delete the helm operator pods
- for pod in $(kubectl get pods -n "${namespace}" -o name); do
- if [[ ${pod} =~ ^pod\/helm-operation-* ]]; then
- echo "--- Deleting the pod [${pod}] in the namespace [${namespace}]"
- kubectl delete "${pod}" -n "${namespace}"
- fi
- done
- done
- echo "Removing Rancher bootstrap secret in the following namespace: ${rancher_namespace}"
- kubectl --ignore-not-found=true delete secret bootstrap-secret -n "${rancher_namespace}"
- echo "------ Summary ------"
- if [[ ${#succeeded[@]} -ne 0 ]]; then
- echo "Succeeded to uninstall the following apps:" "${succeeded[@]}"
- fi
- if [[ ${#failed[@]} -ne 0 ]]; then
- echo "Failed to uninstall the following apps:" "${failed[@]}"
- if [[ "${ignoreTimeoutError}" == "false" ]]; then
- exit 2
- fi
- else
- echo "Cleanup finished successfully."
- fi
|