#!/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