95 lines
2.5 KiB
Bash
95 lines
2.5 KiB
Bash
|
#!/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
|