#!/bin/bash # ============================================================================== # CREATE-NETWORKS.SH - Script para crear redes Docker del workspace # ============================================================================== # Proposito: Crea todas las redes Docker definidas en networks.yml # Mantenido por: DevOps-Agent # Actualizado: 2025-12-18 # # USO: # ./create-networks.sh # Crear todas las redes # ./create-networks.sh gamilit # Crear solo redes de un proyecto # ./create-networks.sh --clean # Eliminar todas las redes # ============================================================================== set -e # Colores RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # ------------------------------------------------------------------------------ # CONFIGURACION # ------------------------------------------------------------------------------ # Red de infraestructura compartida INFRA_NETWORK="infra_shared" # Proyectos y ambientes declare -A PROJECTS PROJECTS["gamilit"]="local dev staging prod" PROJECTS["erp_core"]="local dev staging prod" PROJECTS["erp_construccion"]="local dev" PROJECTS["erp_mecanicas"]="local dev" PROJECTS["trading"]="local dev staging prod" PROJECTS["betting"]="local dev" # ------------------------------------------------------------------------------ # FUNCIONES # ------------------------------------------------------------------------------ print_header() { echo "" echo -e "${BLUE}========================================${NC}" echo -e "${BLUE}$1${NC}" echo -e "${BLUE}========================================${NC}" echo "" } create_network() { local network_name=$1 local description=$2 if docker network inspect "$network_name" >/dev/null 2>&1; then echo -e " ${YELLOW}[EXISTE]${NC} $network_name" else docker network create "$network_name" --driver bridge >/dev/null 2>&1 echo -e " ${GREEN}[CREADA]${NC} $network_name ${description:+- $description}" fi } remove_network() { local network_name=$1 if docker network inspect "$network_name" >/dev/null 2>&1; then # Verificar si tiene contenedores conectados local containers=$(docker network inspect "$network_name" -f '{{range .Containers}}{{.Name}} {{end}}') if [ -n "$containers" ]; then echo -e " ${YELLOW}[EN USO]${NC} $network_name - Contenedores: $containers" else docker network rm "$network_name" >/dev/null 2>&1 echo -e " ${RED}[ELIMINADA]${NC} $network_name" fi else echo -e " ${YELLOW}[NO EXISTE]${NC} $network_name" fi } create_infra_network() { print_header "Creando red de infraestructura" create_network "$INFRA_NETWORK" "Red compartida para servicios de infraestructura" } create_project_networks() { local project=$1 if [ -n "$project" ]; then # Crear redes para un proyecto especifico if [ -z "${PROJECTS[$project]}" ]; then echo -e "${RED}Error: Proyecto '$project' no encontrado${NC}" echo "Proyectos disponibles: ${!PROJECTS[@]}" exit 1 fi print_header "Creando redes para: $project" for env in ${PROJECTS[$project]}; do create_network "${project}_${env}" done else # Crear redes para todos los proyectos for proj in "${!PROJECTS[@]}"; do print_header "Creando redes para: $proj" for env in ${PROJECTS[$proj]}; do create_network "${proj}_${env}" done done fi } clean_networks() { print_header "Eliminando red de infraestructura" remove_network "$INFRA_NETWORK" for proj in "${!PROJECTS[@]}"; do print_header "Eliminando redes de: $proj" for env in ${PROJECTS[$proj]}; do remove_network "${proj}_${env}" done done } list_networks() { print_header "Redes del Workspace" echo -e "${BLUE}Red de Infraestructura:${NC}" if docker network inspect "$INFRA_NETWORK" >/dev/null 2>&1; then echo -e " ${GREEN}[OK]${NC} $INFRA_NETWORK" else echo -e " ${RED}[NO EXISTE]${NC} $INFRA_NETWORK" fi for proj in "${!PROJECTS[@]}"; do echo "" echo -e "${BLUE}Proyecto: $proj${NC}" for env in ${PROJECTS[$proj]}; do local net="${proj}_${env}" if docker network inspect "$net" >/dev/null 2>&1; then echo -e " ${GREEN}[OK]${NC} $net" else echo -e " ${RED}[NO EXISTE]${NC} $net" fi done done } show_usage() { echo "Uso: $0 [OPCION] [PROYECTO]" echo "" echo "Opciones:" echo " (sin opcion) Crear todas las redes" echo " --list Listar estado de redes" echo " --clean Eliminar todas las redes" echo " --help Mostrar esta ayuda" echo "" echo "Proyectos disponibles:" for proj in "${!PROJECTS[@]}"; do echo " - $proj" done echo "" echo "Ejemplos:" echo " $0 # Crear todas las redes" echo " $0 gamilit # Crear redes de gamilit" echo " $0 --list # Ver estado de redes" echo " $0 --clean # Eliminar todas las redes" } # ------------------------------------------------------------------------------ # MAIN # ------------------------------------------------------------------------------ case "${1:-}" in --help|-h) show_usage ;; --list|-l) list_networks ;; --clean|-c) echo -e "${YELLOW}ADVERTENCIA: Esto eliminara todas las redes del workspace${NC}" read -p "Continuar? (y/N): " confirm if [ "$confirm" = "y" ] || [ "$confirm" = "Y" ]; then clean_networks echo "" echo -e "${GREEN}Limpieza completada${NC}" else echo "Operacion cancelada" fi ;; "") create_infra_network create_project_networks echo "" echo -e "${GREEN}Todas las redes creadas exitosamente${NC}" ;; *) create_infra_network create_project_networks "$1" echo "" echo -e "${GREEN}Redes creadas para: $1${NC}" ;; esac