Files
workshop/aula-08/cleanup.sh
Allyson de Paula aa2bcfce46 aula-07 e aula-08: Cluster Talos HA na Hetzner com Autoscaler
aula-07: Criação de imagem Talos customizada na Hetzner Cloud
- Usa Talos Factory para gerar imagem ARM64/AMD64
- Inclui extensões: qemu-guest-agent, hcloud

aula-08: Provisionamento de cluster Kubernetes Talos via OpenTofu
- 3 Control Planes em HA (CAX11 ARM64)
- 1 Worker Node (CAX11 ARM64)
- Rede privada, Floating IP, Firewall
- Cluster Autoscaler para Hetzner (0-5 workers extras)
- Setup interativo com validação de pré-requisitos
- Custo estimado: ~€18/mês (base)

Também inclui:
- .gitignore para ignorar arquivos sensíveis
- CLAUDE.md com instruções do projeto
2025-12-27 07:12:58 -03:00

133 lines
3.9 KiB
Bash
Executable File

#!/bin/bash
############################################################
# Aula 08 - Cleanup
# Destrói a infraestrutura provisionada
############################################################
set -e
# Cores para output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR"
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"; }
echo ""
echo "============================================"
echo " Cleanup - Destruir Infraestrutura"
echo "============================================"
echo ""
# Verificar se tofu está instalado
if ! command -v tofu &> /dev/null; then
log_error "OpenTofu não encontrado!"
exit 1
fi
# Verificar se há state
if [ ! -f "terraform.tfstate" ] && [ ! -d ".terraform" ]; then
log_warn "Nenhuma infraestrutura encontrada para destruir."
exit 0
fi
# Verificar workers do autoscaler (criados fora do OpenTofu)
if [ -f "kubeconfig" ]; then
export KUBECONFIG="$SCRIPT_DIR/kubeconfig"
AUTOSCALER_WORKERS=$(kubectl get nodes -l node.kubernetes.io/instance-type=cax11 \
--no-headers 2>/dev/null | wc -l | tr -d ' ' || echo "0")
if [ "$AUTOSCALER_WORKERS" -gt "1" ]; then
log_warn "Detectados $AUTOSCALER_WORKERS workers (incluindo os do autoscaler)"
log_warn "Workers criados pelo autoscaler serão removidos via API Hetzner"
echo ""
fi
fi
log_warn "ATENÇÃO: Esta operação irá DESTRUIR todos os recursos!"
echo ""
echo "Recursos que serão removidos:"
echo " - 3x Control Plane nodes"
echo " - Workers (incluindo os criados pelo autoscaler)"
echo " - Rede privada"
echo " - Floating IP"
echo " - Firewall"
echo " - Placement Group"
echo ""
read -p "Tem certeza que deseja continuar? (digite 'sim' para confirmar): " confirm
if [ "$confirm" != "sim" ]; then
log_info "Operação cancelada"
exit 0
fi
echo ""
# Remover workers do autoscaler primeiro (se existirem)
if [ -f "terraform.tfvars" ]; then
HCLOUD_TOKEN=$(grep 'hcloud_token' terraform.tfvars | cut -d'"' -f2)
CLUSTER_NAME=$(tofu output -raw cluster_name 2>/dev/null || echo "")
if [ -n "$HCLOUD_TOKEN" ] && [ -n "$CLUSTER_NAME" ]; then
log_info "Verificando workers do autoscaler..."
# Listar servers com label do cluster que NÃO são gerenciados pelo tofu
AUTOSCALER_SERVERS=$(HCLOUD_TOKEN="$HCLOUD_TOKEN" hcloud server list \
-l cluster="$CLUSTER_NAME" \
-o noheader -o columns=id,name 2>/dev/null | \
grep -E "worker-pool" || true)
if [ -n "$AUTOSCALER_SERVERS" ]; then
log_warn "Removendo workers criados pelo autoscaler..."
echo "$AUTOSCALER_SERVERS" | while read -r server_id server_name; do
log_info " Removendo $server_name (ID: $server_id)..."
HCLOUD_TOKEN="$HCLOUD_TOKEN" hcloud server delete "$server_id" --quiet 2>/dev/null || true
done
log_success "Workers do autoscaler removidos"
fi
fi
fi
echo ""
log_info "Destruindo infraestrutura via OpenTofu..."
echo ""
tofu destroy -auto-approve
echo ""
log_success "Infraestrutura destruída!"
echo ""
# Limpar arquivos locais (manter .terraform para re-deploy rápido)
log_info "Limpando arquivos gerados..."
rm -f kubeconfig talosconfig tfplan terraform.tfstate terraform.tfstate.backup
log_success "Arquivos removidos"
echo ""
# Perguntar sobre terraform.tfvars
if [ -f "terraform.tfvars" ]; then
read -p "Remover terraform.tfvars também? (s/N): " remove_tfvars
if [[ "$remove_tfvars" =~ ^[Ss]$ ]]; then
rm -f terraform.tfvars
log_success "terraform.tfvars removido"
else
log_info "terraform.tfvars mantido (útil para re-deploy)"
fi
fi
echo ""
log_success "Cleanup concluído!"