#!/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