fix: cleanup_test_namespaces.sh - удаляет ТОЛЬКО конкретные NS, не по маске
This commit is contained in:
@@ -1,12 +1,18 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# cleanup_test_namespaces.sh — удаляет все тестовые namespace по списку пользователей
|
# cleanup_test_namespaces.sh — удаляет ТОЛЬКО конкретные тестовые namespace
|
||||||
# Использование: cleanup_test_namespaces.sh user1@test.local user2@test.local ...
|
# Использование: cleanup_test_namespaces.sh user1@test.local [user2@test.local ...]
|
||||||
|
#
|
||||||
|
# ВАЖНО: удаляет ТОЛЬКО NS, соответствующие переданным пользователям.
|
||||||
|
# НЕ удаляет NS "по маске test-*" — только по конкретным хэшам.
|
||||||
|
# Это предотвращает случайное удаление тестовых NS от других тестов.
|
||||||
|
#
|
||||||
# Переменная окружения: KUBECTL_DIRECT=1 (если использовать kubectl напрямую, иначе через SSH)
|
# Переменная окружения: KUBECTL_DIRECT=1 (если использовать kubectl напрямую, иначе через SSH)
|
||||||
|
|
||||||
set -uo pipefail
|
set -uo pipefail
|
||||||
|
|
||||||
if [ $# -eq 0 ]; then
|
if [ $# -eq 0 ]; then
|
||||||
echo "Usage: $0 user1@test.local [user2@test.local ...]"
|
echo "Usage: $0 user1@test.local [user2@test.local ...]"
|
||||||
|
echo "Deletes only namespaces for specified test users"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -17,34 +23,27 @@ else
|
|||||||
KUBECTL_CMD="$SSH kubectl"
|
KUBECTL_CMD="$SSH kubectl"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Генерируем хэши namespace для каждого пользователя
|
|
||||||
# Fission console создаёт NS как fission-<hash(email)>
|
|
||||||
declare -a NS_TO_DELETE=()
|
declare -a NS_TO_DELETE=()
|
||||||
|
|
||||||
|
# Вычисляем хэши ТОЛЬКО для переданных пользователей
|
||||||
|
# Fission console создаёт NS как fission-<hash(email)>
|
||||||
for user in "$@"; do
|
for user in "$@"; do
|
||||||
# Вычисляем хэш email (console использует sha256sum и берёт первые 16 символов)
|
# Вычисляем хэш email (console использует sha256sum и берёт первые 16 символов)
|
||||||
ns_hash=$(printf '%s' "$user" | sha256sum | head -c 16)
|
ns_hash=$(printf '%s' "$user" | sha256sum | head -c 16)
|
||||||
ns_name="fission-${ns_hash}"
|
ns_name="fission-${ns_hash}"
|
||||||
NS_TO_DELETE+=("$ns_name")
|
NS_TO_DELETE+=("$ns_name")
|
||||||
|
echo " [DEBUG] user='$user' → ns='$ns_name'"
|
||||||
done
|
done
|
||||||
|
|
||||||
# Также удаляем все NS явно с префиксом test- (тестовые)
|
# Удаляем ТОЛЬКО те NS, которые явно переданы в параметрах
|
||||||
if [ "${KUBECTL_DIRECT:-0}" = "1" ]; then
|
# (не удаляем NS "по маске" — только по конкретным хэшам)
|
||||||
EXTRA_NS=$(kubectl get ns --no-headers 2>/dev/null | awk '{print $1}' | grep '^test-' || true)
|
|
||||||
else
|
|
||||||
EXTRA_NS=$($SSH "kubectl get ns --no-headers 2>/dev/null | awk '{print \$1}' | grep '^test-' || true")
|
|
||||||
fi
|
|
||||||
|
|
||||||
for ns in $EXTRA_NS; do
|
|
||||||
NS_TO_DELETE+=("$ns")
|
|
||||||
done
|
|
||||||
|
|
||||||
# Удаляем все найденные namespace
|
|
||||||
if [ ${#NS_TO_DELETE[@]} -gt 0 ]; then
|
if [ ${#NS_TO_DELETE[@]} -gt 0 ]; then
|
||||||
for ns in "${NS_TO_DELETE[@]}"; do
|
for ns in "${NS_TO_DELETE[@]}"; do
|
||||||
if $KUBECTL_CMD get ns "$ns" &>/dev/null 2>&1; then
|
if $KUBECTL_CMD get ns "$ns" &>/dev/null 2>&1; then
|
||||||
echo " Deleting namespace: $ns"
|
echo " Deleting namespace: $ns"
|
||||||
$KUBECTL_CMD delete ns "$ns" --wait=false 2>/dev/null || true
|
$KUBECTL_CMD delete ns "$ns" --wait=false 2>/dev/null || true
|
||||||
|
else
|
||||||
|
echo " Namespace not found or already deleted: $ns"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
else
|
else
|
||||||
|
|||||||
Reference in New Issue
Block a user