#!/bin/bash cd /docker/keepalived # 1. MANUAL VARIABLE EXTRACTION (No more sourcing!) get_env_val() { # Greps the key, gets the value after =, and strips surrounding quotes grep "^${1}=" .env | cut -d'=' -f2- | sed 's/^"//;s/"$//' } LXC_NUM=$(get_env_val "LXC_NUM") SLOT_DEFINITIONS=$(get_env_val "SLOT_DEFINITIONS") BASE_PASSWORD=$(get_env_val "BASE_PASSWORD") # Debug check echo "Generator started for LXC: $LXC_NUM" # 2. PATHS CONFIG_DIR="./config" HEADER_TPL="./keepalived_header.tpl" SLOT_TPL="./keepalived_slot.tpl" CONFIG_FILE="${CONFIG_DIR}/keepalived.conf" mkdir -p "$CONFIG_DIR" "./checks" # 3. BUILD HEADER cp "$HEADER_TPL" "$CONFIG_FILE" sed -i "s/{{LXC_NUM}}/${LXC_NUM}/g" "$CONFIG_FILE" # 4. PARSE SLOTS echo "$SLOT_DEFINITIONS" | while IFS=',' read -r s_num s_name s_dep s_state s_prio s_peer s_vip junk do [[ -z "$s_num" ]] && continue echo "Processing Slot $s_num: $s_name" TEMP_SLOT="/tmp/slot_${s_num}.conf" cp "$SLOT_TPL" "$TEMP_SLOT" AUTH_PASS="${BASE_PASSWORD:0:7}-${s_num}" sed -i "s/{{SLOT_NUM}}/${s_num}/g" "$TEMP_SLOT" sed -i "s/{{LXC_NUM}}/${LXC_NUM}/g" "$TEMP_SLOT" sed -i "s/{{SVC_NAME}}/${s_name}/g" "$TEMP_SLOT" sed -i "s/{{SVC_DEP}}/${s_dep}/g" "$TEMP_SLOT" sed -i "s/{{STATE}}/${s_state}/g" "$TEMP_SLOT" sed -i "s/{{PRIORITY}}/${s_prio}/g" "$TEMP_SLOT" sed -i "s/{{PEER}}/${s_peer}/g" "$TEMP_SLOT" sed -i "s/{{SVC_VIP}}/${s_vip}/g" "$TEMP_SLOT" sed -i "s/{{AUTH_PASS}}/${AUTH_PASS}/g" "$TEMP_SLOT" cat "$TEMP_SLOT" >> "$CONFIG_FILE" rm "$TEMP_SLOT" done # 5. PERMS cp ./check_services.sh ./checks/check_services.sh chmod +x ./checks/check_services.sh