diff --git a/scripts/force_delete_ns.sh b/scripts/force_delete_ns.sh new file mode 100755 index 0000000..ea4082d --- /dev/null +++ b/scripts/force_delete_ns.sh @@ -0,0 +1,72 @@ +#!/bin/bash +############################################################################### +# Remove all api-resources in namespace and then remove the namespace +# +# Query all api-resources in namespace, remove the finalizers and +# then remove the resource. Finally remove the finalizers on the Namespace and +# finally remove the namespace. +# +# Oracle Consulting Netherlands +# +# History +# ------- +# 2024-05-11, M. van den Akker, Initial Creation +# +############################################################################### + +export NS=$1 + +function count_apiresources() { + resource=$1 + ROWS=$(kubectl get $resource -n $NS -o name |wc -l); + echo $ROWS + return $ROWS +} + +function patch_apiresources(){ + resource=$1 + for resource_name in $(kubectl get $resource -n $NS -o name); do + echo "Patch $resource $resource_name" + kubectl -n $NS patch $resource_name -p '{"metadata":{"finalizers":null}}' --type=merge + done +} + +function delete_apiresources(){ + resource=$1 + for resource_name in $(kubectl get $resource -n $NS -o name); do + echo "Delete $resource $resource_name" + kubectl -n $NS delete $resource_name --force + done +} + +function patch_delete_apiresources(){ + API_RESOURCE=$1 + ROWS=$(count_apiresources $API_RESOURCE) + if [ $ROWS -gt 0 ]; then + echo Patch $ROWS occurrences of api-resource $API_RESOURCE for $NS to remove finalizers + patch_apiresources $API_RESOURCE + ROWS=$(count_apiresources $API_RESOURCE) + if [ $ROWS -gt 0 ]; then + echo Delete $ROWS occurrences of api-resource $API_RESOURCE for $NS + delete_apiresources $API_RESOURCE + else + echo No occurrences of api-resource $API_RESOURCE left. + fi + else + echo No occurrences of api-resource $API_RESOURCE found... + fi +} + +for API_RESOURCE in $(kubectl api-resources --no-headers --verbs=list --namespaced -o name); do + patch_delete_apiresources $API_RESOURCE +done + + +echo Patch namespace $NS to clear metadata.finalizers +kubectl patch ns $NS -p '{"metadata":{"finalizers":null}}' +echo Patch namespace $NS to clear spec.finalizers +kubectl patch ns $NS -p '{"spec":{"finalizers":null}}' +echo Patch namespace $NS to clear metadata.annotations +kubectl patch ns $NS -p '{"metadata":{"annotations":null}}' +echo Force delete namespace $NS +kubectl delete ns $NS --grace-period=0 --force