#!/bin/bash # ============================================================================= # Aula 12 - Cleanup (Remove Victoria Metrics) # ============================================================================= set -e 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"; } echo "" echo -e "${CYAN}============================================${NC}" echo -e "${CYAN} Cleanup - Aula 12 (Victoria Metrics)${NC}" echo -e "${CYAN}============================================${NC}" echo "" log_warn "Isso vai remover:" echo " - Victoria Metrics Stack (Helm release)" echo " - Namespace monitoring (dados de métricas serão perdidos)" echo " - Arquivo .env" echo "" read -p "Continuar? (digite 'sim' para confirmar): " confirm if [ "$confirm" != "sim" ]; then log_info "Operação cancelada" exit 0 fi echo "" # Remover Helm release log_info "Removendo Victoria Metrics Stack..." if helm status monitoring -n monitoring &> /dev/null; then helm uninstall monitoring -n monitoring --wait --timeout=120s 2>/dev/null || { log_warn "Helm uninstall falhou, removendo com --no-hooks..." helm uninstall monitoring -n monitoring --no-hooks 2>/dev/null || true } log_success "Helm release removido" else log_info "Helm release não encontrado" fi # Remover finalizers de CRDs do Victoria Metrics (podem prender o namespace) log_info "Limpando finalizers de CRDs..." for crd in vmagents vmalerts vmsingles vmclusters vmnodes vmrules vmauths; do for resource in $(kubectl get $crd.operator.victoriametrics.com -n monitoring -o name 2>/dev/null); do kubectl patch "$resource" -n monitoring --type=json \ -p='[{"op":"remove","path":"/metadata/finalizers"}]' 2>/dev/null || true done done # Remover PVCs log_info "Removendo PVCs..." kubectl delete pvc --all -n monitoring --wait=false 2>/dev/null || true # Remover namespace log_info "Removendo namespace..." if kubectl get namespace monitoring &>/dev/null; then kubectl delete namespace monitoring --timeout=120s 2>/dev/null || { log_warn "Namespace preso em Terminating, forçando remoção..." kubectl get namespace monitoring -o json | \ python3 -c "import sys,json; d=json.load(sys.stdin); d['metadata'].pop('finalizers',None); json.dump(d,sys.stdout)" | \ kubectl replace --raw /api/v1/namespaces/monitoring/finalize -f - 2>/dev/null || true kubectl wait --for=delete namespace monitoring --timeout=60s 2>/dev/null || sleep 5 } fi log_success "Namespace removido" # Remover .env SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" if [[ -f "${SCRIPT_DIR}/.env" ]]; then rm "${SCRIPT_DIR}/.env" log_info ".env removido" fi echo "" log_success "Cleanup concluído!" echo ""