#!/usr/bin/env bash set -Eeuo pipefail ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" SRC="${ROOT}/stacks/haproxy" LIVE="/srv/nfs/infra/haproxy" ENV_FILE="${LIVE}/.env" echo "=== HAProxy validation ===" if [[ ! -f "${ENV_FILE}" ]]; then echo "ERROR: ${ENV_FILE} not found" exit 1 fi if [[ ! -f "${SRC}/docker-compose.yml" ]]; then echo "ERROR: docker-compose.yml not found" exit 1 fi if [[ ! -f "${SRC}/conf/haproxy.cfg" ]]; then echo "ERROR: haproxy.cfg not found" exit 1 fi echo echo "--- Validate docker-compose.yml ---" docker compose \ --env-file "${ENV_FILE}" \ -f "${SRC}/docker-compose.yml" \ config >/dev/null echo echo "--- Detect HAProxy image ---" HAPROXY_IMAGE="$( docker compose \ --env-file "${ENV_FILE}" \ -f "${SRC}/docker-compose.yml" \ config --images | grep -m1 -E '(^|/)haproxy:' )" if [[ -z "${HAPROXY_IMAGE}" ]]; then echo "ERROR: HAProxy image not found in compose" exit 1 fi echo "HAProxy image: ${HAPROXY_IMAGE}" echo echo "--- Validate haproxy.cfg ---" TMP_DIR="$(mktemp -d)" cleanup() { rm -rf "${TMP_DIR}" } trap cleanup EXIT mkdir -p "${TMP_DIR}/conf" rsync -a \ "${SRC}/conf/" \ "${TMP_DIR}/conf/" docker run \ --rm \ -v "${TMP_DIR}/conf:/usr/local/etc/haproxy:ro" \ -v "${LIVE}/certs:/etc/haproxy/certs:ro" \ -v "${LIVE}/crowdsec/lua:/usr/lib/crowdsec-haproxy-spoa-bouncer/lua:ro" \ -v "${LIVE}/crowdsec/templates:/var/lib/crowdsec-haproxy-spoa-bouncer/html:ro" \ "${HAPROXY_IMAGE}" \ haproxy \ -c \ -f /usr/local/etc/haproxy/haproxy.cfg echo echo "=== Validation successful ==="