#!/bin/bash # ============================================================================= # Cleanup da Aula 10 - Remove GitLab # ============================================================================= # # Este script remove: # - GitLab (Helm release) # - PVCs (dados persistentes) # - Secrets # - Namespace gitlab # - cert-manager (se instalado por esta aula) # - Arquivo .env # # NÃO remove (gerenciados pela aula-08): # - NGINX Ingress Controller # - Hetzner CSI Driver # - LoadBalancer # # ATENÇÃO: Todos os dados do GitLab serão perdidos! # # ============================================================================= 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 10 (GitLab)${NC}" echo -e "${CYAN}============================================${NC}" echo "" log_warn "ATENÇÃO: Isso vai remover os recursos da aula 10:" echo " - GitLab e todos os componentes" echo " - Volumes persistentes (PostgreSQL, Redis, Gitaly)" 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 TCP SERVICES DO NGINX # ============================================================================= log_info "=== Removendo configuração TCP do NGINX ===" if kubectl get configmap tcp-services -n ingress-nginx &> /dev/null; then kubectl patch configmap tcp-services \ -n ingress-nginx \ --type json \ -p '[{"op": "remove", "path": "/data/22"}]' 2>/dev/null || true log_success "Configuração TCP removida" else log_info "ConfigMap tcp-services não encontrado" fi # ============================================================================= # 2. DESINSTALAR GITLAB # ============================================================================= log_info "=== Removendo GitLab ===" if helm status gitlab -n gitlab &> /dev/null; then log_info "Desinstalando GitLab via Helm..." helm uninstall gitlab -n gitlab --wait 2>/dev/null || true log_success "GitLab removido" else log_info "GitLab não está instalado" fi # Remover PVCs if kubectl get pvc -n gitlab &> /dev/null 2>&1; then log_info "Removendo PVCs do namespace gitlab..." kubectl delete pvc --all -n gitlab --wait=false 2>/dev/null || true fi # Aguardar PVs serem liberados sleep 5 # Remover secrets restantes log_info "Removendo secrets..." kubectl delete secret --all -n gitlab 2>/dev/null || true # Remover namespace if kubectl get namespace gitlab &> /dev/null; then log_info "Removendo namespace gitlab..." kubectl delete namespace gitlab --wait=false 2>/dev/null || true log_success "Namespace gitlab removido" 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 " - GitLab e todos os componentes" 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 ""