82 lines
2.4 KiB
Bash
Executable File
82 lines
2.4 KiB
Bash
Executable File
#!/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 |