linkerd2/bin/test-cleanup

97 lines
4.1 KiB
Bash
Executable File

#!/usr/bin/env bash
set -eu
k8s_context=${1:-""}
populate_array() {
[ $# -ge 3 ] || {
echo "function ${FUNCNAME[0]} expects 3 mandatory inparameters but got $#
Usage: ${FUNCNAME[0]} TARGET_ARRAY RESOURCE_TYPE LINKERD_LABEL (FRIENDLY_NAME)" >&2
return
}
# We are using the variable i even if shellsheck does not see it
# shellcheck disable=SC2034
local i=0
unset -v "$1"
while IFS= read -r "$1[i++]"; do :; done <<< "$(kubectl --context="$k8s_context" get -A "$2" -oname -l "linkerd.io/$3")"
# ensure that the last element isn't empty
eval "[[ \${$1[--i]} ]]" || unset "$1[i]" # ensures last element isn't empty
# inform user if no results were returned from command
[ -z "$(eval "[[ \${$1[0]} ]]")" ] && echo "no ${4:-$2} found" >&2
}
# Initialize empty arrays
namespaces_controlplane=()
namespaces_helm=()
namespaces_cni=()
namespaces_dataplane=()
clusterrolebindings=()
clusterrolebindings_helm=()
clusterroles=()
webhookconfigs=()
validatingconfigs=()
podsecuritypolicies=()
customresourcedefinitions=()
apiservices=()
rolebindings=()
echo "cleaning up control-plane namespaces in k8s-context [${k8s_context}]"
populate_array namespaces_controlplane ns is-control-plane 'control-plane namespaces'
populate_array namespaces_helm ns is-test-helm 'helm namespaces'
echo "cleaning up CNI namespaces in k8s-context [${k8s_context}]"
populate_array namespaces_cni ns cni-resource 'CNI namespaces'
echo "cleaning up data-plane namespaces in k8s-context [${k8s_context}]"
populate_array namespaces_dataplane ns is-test-data-plane 'data-plane namespaces'
populate_array clusterrolebindings clusterrolebindings control-plane-ns
populate_array clusterrolebindings_helm clusterrolebindings is-test-helm 'helm clusterrolebindings'
populate_array clusterroles clusterroles control-plane-ns
populate_array webhookconfigs mutatingwebhookconfigurations control-plane-ns
populate_array validatingconfigs validatingwebhookconfigurations control-plane-ns
populate_array podsecuritypolicies podsecuritypolicies control-plane-ns
populate_array customresourcedefinitions customresourcedefinitions control-plane-ns
populate_array apiservices apiservices control-plane-ns
# No action if all arrays are empty
if [[ ${namespaces_controlplane[*]} || \
${namespaces_cni[*]} || \
${namespaces_helm[*]} || \
${namespaces_dataplane[*]} || \
${clusterrolebindings[*]} || \
${clusterrolebindings_helm[*]} || \
${clusterroles[*]} || \
${webhookconfigs[*]} || \
${validatingconfigs[*]} || \
${podsecuritypolicies[*]} || \
${customresourcedefinitions[*]} || \
${apiservices[*]} ]]; then
kubectl --context="$k8s_context" delete \
${namespaces_controlplane:+"${namespaces_controlplane[@]}"} \
${namespaces_cni:+"${namespaces_cni[@]}"} \
${namespaces_helm:+"${namespaces_helm[@]}"} \
${namespaces_dataplane:+"${namespaces_dataplane[@]}"} \
${clusterrolebindings:+"${clusterrolebindings[@]}"} \
${clusterrolebindings_helm:+"${clusterrolebindings_helm[@]}"} \
${clusterroles:+"${clusterroles[@]}"} \
${webhookconfigs:+"${webhookconfigs[@]}"} \
${validatingconfigs:+"${validatingconfigs[@]}"} \
${podsecuritypolicies:+"${podsecuritypolicies[@]}"} \
${customresourcedefinitions:+"${customresourcedefinitions[@]}"} \
${apiservices:+"${apiservices[@]}"}
fi
echo "cleaning up rolebindings in kube-system namespace in k8s-context [${k8s_context}]"
populate_array rolebindings rolebindings control-plane-ns
# No action if array is empty
if [[ ${rolebindings[*]} ]]; then
kubectl --context="$k8s_context" delete "${rolebindings[@]}" -n kube-system
fi