39 lines
1.2 KiB
Bash
39 lines
1.2 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
# Blue-Green deployment switch for Veza production
|
||
|
|
# Usage: ./scripts/deploy-blue-green.sh [blue|green]
|
||
|
|
# Requires: docker, config/haproxy/ directory, veza_haproxy container running
|
||
|
|
set -euo pipefail
|
||
|
|
|
||
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
|
|
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||
|
|
HAPROXY_DIR="$REPO_ROOT/config/haproxy"
|
||
|
|
TARGET="${1:-}"
|
||
|
|
|
||
|
|
if [[ "$TARGET" != "blue" && "$TARGET" != "green" ]]; then
|
||
|
|
echo "Usage: $0 [blue|green]"
|
||
|
|
echo " blue - Route traffic to blue stack (default)"
|
||
|
|
echo " green - Route traffic to green stack"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
CONFIG_SOURCE="$HAPROXY_DIR/haproxy-$TARGET.cfg"
|
||
|
|
CONFIG_DEST="$HAPROXY_DIR/haproxy.cfg"
|
||
|
|
|
||
|
|
if [[ ! -f "$CONFIG_SOURCE" ]]; then
|
||
|
|
echo "Error: Config file not found: $CONFIG_SOURCE"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo "Switching to $TARGET stack..."
|
||
|
|
cp "$CONFIG_SOURCE" "$CONFIG_DEST"
|
||
|
|
|
||
|
|
# Reload HAProxy (graceful, no connection drop)
|
||
|
|
if docker ps --format '{{.Names}}' | grep -q '^veza_haproxy$'; then
|
||
|
|
docker kill -s HUP veza_haproxy 2>/dev/null || {
|
||
|
|
echo "Warning: Could not send HUP to HAProxy. Try: docker restart veza_haproxy"
|
||
|
|
}
|
||
|
|
echo "HAProxy reloaded. Active stack: $TARGET"
|
||
|
|
else
|
||
|
|
echo "Warning: veza_haproxy container not running. Config updated; start stack to apply."
|
||
|
|
fi
|