#!/bin/bash # ============================================================================= # Aula 12 - Cleanup Victoria Metrics # ============================================================================= # # Remove Victoria Metrics stack via ArgoCD # # ============================================================================= set -e # Cores para output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # Funções de log 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}[ERROR]${NC} $1"; } # Diretório do script SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" ENV_FILE="${SCRIPT_DIR}/.env" # Carregar configuração if [[ -f "$ENV_FILE" ]]; then source "$ENV_FILE" fi echo "" echo "==========================================" echo " Cleanup Victoria Metrics" echo "==========================================" echo "" echo "Este script irá remover:" echo " - ArgoCD Application 'monitoring'" echo " - Todos os recursos no namespace 'monitoring'" echo " - Secret do repositório no ArgoCD" echo "" echo "ATENÇÃO: Dados de métricas serão PERDIDOS!" echo "" read -p "Continuar? [y/N]: " CONFIRM if [[ "$CONFIRM" != "y" && "$CONFIRM" != "Y" ]]; then log_info "Cancelado pelo usuário" exit 0 fi # ============================================================================= # REMOVER ARGOCD APPLICATION # ============================================================================= log_info "Removendo ArgoCD Application..." if kubectl get application monitoring -n argocd &> /dev/null; then # Remover finalizers para permitir deleção kubectl patch application monitoring -n argocd \ --type json \ --patch='[{"op": "remove", "path": "/metadata/finalizers"}]' 2>/dev/null || true kubectl delete application monitoring -n argocd --wait=false log_success "ArgoCD Application removida" else log_info "ArgoCD Application já não existe" fi # Aguardar recursos serem deletados pelo ArgoCD log_info "Aguardando ArgoCD deletar recursos..." sleep 5 # ============================================================================= # REMOVER NAMESPACE # ============================================================================= log_info "Removendo namespace 'monitoring'..." if kubectl get namespace monitoring &> /dev/null; then # Forçar remoção de recursos se necessário kubectl delete all --all -n monitoring --timeout=60s 2>/dev/null || true kubectl delete pvc --all -n monitoring --timeout=60s 2>/dev/null || true kubectl delete configmap --all -n monitoring --timeout=60s 2>/dev/null || true kubectl delete secret --all -n monitoring --timeout=60s 2>/dev/null || true kubectl delete namespace monitoring --timeout=120s 2>/dev/null || { log_warn "Timeout deletando namespace, forçando..." kubectl get namespace monitoring -o json | \ jq '.spec.finalizers = []' | \ kubectl replace --raw "/api/v1/namespaces/monitoring/finalize" -f - 2>/dev/null || true } log_success "Namespace 'monitoring' removido" else log_info "Namespace 'monitoring' já não existe" fi # ============================================================================= # REMOVER SECRET DO REPOSITÓRIO # ============================================================================= log_info "Removendo secret do repositório..." if kubectl get secret factory-monitoring-repo -n argocd &> /dev/null; then kubectl delete secret factory-monitoring-repo -n argocd log_success "Secret do repositório removido" else log_info "Secret do repositório já não existe" fi # ============================================================================= # REMOVER PROJETO GITLAB (OPCIONAL) # ============================================================================= if [[ -n "$GITLAB_HOST" && -n "$GITLAB_TOKEN" ]]; then echo "" read -p "Remover projeto 'factory/monitoring' do GitLab? [y/N]: " REMOVE_PROJECT if [[ "$REMOVE_PROJECT" == "y" || "$REMOVE_PROJECT" == "Y" ]]; then log_info "Removendo projeto do GitLab..." # Obter ID do projeto PROJECT_RESPONSE=$(curl -s --header "PRIVATE-TOKEN: ${GITLAB_TOKEN}" \ "https://${GITLAB_HOST}/api/v4/projects/factory%2Fmonitoring") PROJECT_ID=$(echo "$PROJECT_RESPONSE" | grep -o '"id":[0-9]*' | head -1 | cut -d: -f2) if [[ -n "$PROJECT_ID" ]]; then curl -s --request DELETE --header "PRIVATE-TOKEN: ${GITLAB_TOKEN}" \ "https://${GITLAB_HOST}/api/v4/projects/${PROJECT_ID}" log_success "Projeto removido do GitLab" else log_info "Projeto não encontrado no GitLab" fi fi fi # ============================================================================= # LIMPAR ARQUIVO .ENV # ============================================================================= echo "" read -p "Remover arquivo de configuração local (.env)? [y/N]: " REMOVE_ENV if [[ "$REMOVE_ENV" == "y" || "$REMOVE_ENV" == "Y" ]]; then rm -f "$ENV_FILE" log_success "Arquivo .env removido" fi # ============================================================================= # FINALIZAÇÃO # ============================================================================= echo "" echo "==========================================" echo " Cleanup Concluído!" echo "==========================================" echo "" echo "Recursos removidos:" echo " - ArgoCD Application 'monitoring'" echo " - Namespace 'monitoring'" echo " - Secret do repositório no ArgoCD" echo "" echo "Para reinstalar:" echo " ./setup.sh" echo ""