#!/usr/bin/env bash echo "=========================================" echo " Keepalived HA Full Stack Generator" echo " (Configs + Systemd + Diagram)" echo "=========================================" echo "" read -p "Service name (e.g. DNS / API / Nginx): " SERVICE read -p "MASTER Router ID: " MASTER_ID read -p "MASTER node IP: " MASTER_IP echo "" read -p "How many BACKUP nodes? " BACKUP_COUNT declare -a BACKUP_IDS declare -a BACKUP_IPS for ((i=1; i<=BACKUP_COUNT; i++)) do echo "-----------------------------------" echo "Backup #$i" read -p "Router ID: " RID read -p "Node IP: " IP BACKUP_IDS[$i]=$RID BACKUP_IPS[$i]=$IP done echo "" read -p "How many VIP instances? " INSTANCE_COUNT echo "" read -p "Use health check script? (y/n): " USE_SCRIPT if [[ "$USE_SCRIPT" == "y" ]]; then read -p "Health check script path: " HEALTH_SCRIPT else HEALTH_SCRIPT="" fi MASTER_CONF="keepalived-${SERVICE}-${MASTER_ID}.conf" BACKUP_PREFIX="keepalived-${SERVICE}-backup" SYSTEMD_DIR="systemd-${SERVICE}" DIAGRAM_FILE="${SERVICE}-ha-diagram.md" mkdir -p "$SYSTEMD_DIR" # ---------------- SYSTEMD ---------------- cat > "$SYSTEMD_DIR/keepalived.service" < "$DIAGRAM_FILE" < MASTER EOF for ((b=1; b<=BACKUP_COUNT; b++)) do cat >> "$DIAGRAM_FILE" < B$b EOF done cat >> "$DIAGRAM_FILE" < "$MASTER_CONF" write_script >> "$MASTER_CONF" # BACKUP base files for ((b=1; b<=BACKUP_COUNT; b++)) do write_global "${BACKUP_IDS[$b]}" > "$BACKUP_PREFIX$b.conf" write_script >> "$BACKUP_PREFIX$b.conf" done # ---------------- INSTANCES ---------------- for ((i=1; i<=INSTANCE_COUNT; i++)) do echo "-----------------------------------" echo "Instance #$i" read -p "Name (e.g. VLAN10 / APP1): " NAME read -p "Interface (e.g. eth0.10): " IFACE read -p "VIP (e.g. 192.168.10.3/24): " VIP read -p "VRID: " VRID read -p "Auth password: " PASS PEERS="" for ((b=1; b<=BACKUP_COUNT; b++)) do PEERS="$PEERS ${BACKUP_IPS[$b]}" done # MASTER cat >> "$MASTER_CONF" <> "$MASTER_CONF" <> "$MASTER_CONF" <> "$BACKUP_PREFIX$b.conf" <> "$BACKUP_PREFIX$b.conf" <> "$BACKUP_PREFIX$b.conf" <