#!/bin/bash # ============================================================================= # Cleanup da Aula 09 - Remove n8n e clientes # ============================================================================= # # Este script remove: # - n8n principal (namespace n8n) # - Todos os clientes (namespaces *-n8n) # - cert-manager (se instalado por esta aula) # - Arquivo .env # # NÃO remove (gerenciados pela aula-08): # - NGINX Ingress Controller # - Hetzner CSI Driver # - LoadBalancer # # ============================================================================= set -e # Cores para output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' CYAN='\033[0;36m' NC='\033[0m' log_info() { echo -e "${BLUE}[INFO]${NC} $1"; } log_success() { echo -e "${GREEN}[OK]${NC} $1"; } log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; } log_error() { echo -e "${RED}[ERRO]${NC} $1"; } SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" echo "" echo -e "${CYAN}============================================${NC}" echo -e "${CYAN} Cleanup - Aula 09 (n8n)${NC}" echo -e "${CYAN}============================================${NC}" echo "" log_warn "ATENÇÃO: Isso vai remover os recursos da aula 09:" echo " - n8n principal e todos os clientes" echo " - Volumes persistentes (PostgreSQL, Redis, n8n)" echo " - cert-manager (se instalado)" echo " - Arquivo .env" echo "" echo "Mantido (aula-08):" echo " - NGINX Ingress Controller" echo " - Hetzner CSI Driver" echo " - LoadBalancer" echo "" read -p "Continuar? (digite 'sim' para confirmar): " confirm if [ "$confirm" != "sim" ]; then log_info "Operação cancelada" exit 0 fi echo "" # ============================================================================= # 1. REMOVER n8n PRINCIPAL # ============================================================================= log_info "=== Removendo n8n principal ===" if helm status n8n -n n8n &> /dev/null; then log_info "Removendo Helm release n8n..." helm uninstall n8n -n n8n --wait 2>/dev/null || true log_success "n8n removido" else log_info "n8n não está instalado" fi # Remover PVCs if kubectl get pvc -n n8n &> /dev/null 2>&1; then log_info "Removendo PVCs do namespace n8n..." kubectl delete pvc --all -n n8n --wait=false 2>/dev/null || true fi # Remover namespace if kubectl get namespace n8n &> /dev/null; then log_info "Removendo namespace n8n..." kubectl delete namespace n8n --wait=false 2>/dev/null || true log_success "Namespace n8n removido" fi # ============================================================================= # 2. REMOVER CLIENTES (namespaces *-n8n) # ============================================================================= log_info "=== Removendo clientes ===" CLIENT_NAMESPACES=$(kubectl get namespaces -o name 2>/dev/null | grep -E ".*-n8n$" | sed 's/namespace\///' || true) if [ -n "$CLIENT_NAMESPACES" ]; then for ns in $CLIENT_NAMESPACES; do log_info "Removendo cliente: $ns" # Remover helm release RELEASE_NAME=$(echo "$ns" | sed 's/-n8n$//') helm uninstall "${RELEASE_NAME}-n8n" -n "$ns" --wait 2>/dev/null || true # Remover PVCs kubectl delete pvc --all -n "$ns" --wait=false 2>/dev/null || true # Remover namespace kubectl delete namespace "$ns" --wait=false 2>/dev/null || true log_success "Cliente $ns removido" done else log_info "Nenhum cliente encontrado" fi # ============================================================================= # 3. REMOVER CERT-MANAGER (se instalado) # ============================================================================= log_info "=== Verificando cert-manager ===" if helm status cert-manager -n cert-manager &> /dev/null; then log_info "Removendo cert-manager..." # Remover ClusterIssuer primeiro kubectl delete clusterissuer --all 2>/dev/null || true # Remover helm release helm uninstall cert-manager -n cert-manager --wait 2>/dev/null || true # Remover CRDs kubectl delete crd \ certificates.cert-manager.io \ certificaterequests.cert-manager.io \ challenges.acme.cert-manager.io \ clusterissuers.cert-manager.io \ issuers.cert-manager.io \ orders.acme.cert-manager.io \ 2>/dev/null || true # Remover namespace kubectl delete namespace cert-manager --wait=false 2>/dev/null || true log_success "cert-manager removido" else log_info "cert-manager não está instalado" fi # ============================================================================= # 4. REMOVER ARQUIVO .env # ============================================================================= log_info "=== Removendo arquivo de configuração ===" if [ -f "$SCRIPT_DIR/.env" ]; then rm -f "$SCRIPT_DIR/.env" log_success "Arquivo .env removido" else log_info "Arquivo .env não existe" fi # ============================================================================= # RESUMO # ============================================================================= echo "" echo -e "${CYAN}============================================${NC}" echo -e "${GREEN} Cleanup Concluído!${NC}" echo -e "${CYAN}============================================${NC}" echo "" echo "Removido:" echo " - n8n principal e clientes" echo " - cert-manager (se existia)" echo " - Arquivo .env" echo "" echo "Mantido (aula-08):" echo " - NGINX Ingress Controller" echo " - Hetzner CSI Driver" echo " - LoadBalancer" echo " - Cluster Kubernetes" echo "" log_warn "Volumes Hetzner podem demorar alguns minutos para serem" log_warn "completamente removidos. Verifique no painel da Hetzner." echo ""