Files
fission-console/scripts/cleanup_test_namespaces.sh
T

82 lines
2.4 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
set -euo pipefail
SSH_ARGS=(
-i ~/.ssh/naeel_vm_id_ed25519
-o StrictHostKeyChecking=no
-o ConnectTimeout=10
naeel@5.172.178.213
)
kube_exec() {
if [ "${KUBECTL_DIRECT:-0}" = "1" ]; then
kubectl "$@"
else
ssh "${SSH_ARGS[@]}" "kubectl $*"
fi
}
# Зеркало логики Go NamespaceForSub:
# sub начинается с "test-" → "fission-test-" + sha256[:8*2]
# иначе → "fission-" + sha256[:8*2]
namespace_for_sub() {
local sub="$1"
local hash
hash=$(printf '%s' "$sub" | sha256sum | awk '{print substr($1, 1, 16)}')
if [[ "$sub" == test-* ]]; then
echo "fission-test-${hash}"
else
echo "fission-${hash}"
fi
}
# ⛔ АБСОЛЮТНЫЙ GUARD: удалять ТОЛЬКО namespace-ы вида fission-test-*
# Всё остальное — немедленный выход с ошибкой
delete_ns() {
local ns="$1"
[ -n "$ns" ] || return 0
# ЖЁСТКАЯ ЗАЩИТА: только fission-test-* разрешено удалять
if [[ "$ns" != fission-test-* ]]; then
echo "⛔ ОТКАЗ: '$ns' не является тестовым namespace (должно начинаться с 'fission-test-')" >&2
return 1
fi
if [ "${KUBECTL_DIRECT:-0}" = "1" ]; then
kubectl delete namespace "$ns" --wait=false >/dev/null 2>&1 || true
else
ssh "${SSH_ARGS[@]}" "kubectl delete namespace ${ns} --wait=false >/dev/null 2>&1 || true"
fi
echo "cleanup namespace: ${ns}"
}
# --all-test: удалить все namespace-ы с лейблом fission-console/env=test
# (только fission-test-* по определению)
delete_all_test() {
local ns_list
if [ "${KUBECTL_DIRECT:-0}" = "1" ]; then
ns_list=$(kubectl get ns -l 'fission-console/env=test' --no-headers \
-o custom-columns=":metadata.name" 2>/dev/null || true)
else
ns_list=$(ssh "${SSH_ARGS[@]}" \
'kubectl get ns -l "fission-console/env=test" --no-headers -o custom-columns=":metadata.name" 2>/dev/null || true')
fi
printf '%s\n' "$ns_list" | while IFS= read -r ns; do
[ -n "$ns" ] || continue
delete_ns "$ns"
done
}
if [ "$#" -eq 0 ]; then
echo "usage: $0 SUB [SUB ...] | --all-test" >&2
exit 1
fi
if [ "$1" = "--all-test" ]; then
delete_all_test
exit 0
fi
printf '%s\n' "$@" | awk 'NF && !seen[$0]++' | while IFS= read -r sub; do
delete_ns "$(namespace_for_sub "$sub")"
done