diff --git a/keepalived-generator.sh b/keepalived-generator.sh new file mode 100644 index 0000000..26e540a --- /dev/null +++ b/keepalived-generator.sh @@ -0,0 +1,262 @@ +#!/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" <