From ce81071d863579261ccd7956bfa331462b3ea50f Mon Sep 17 00:00:00 2001
From: salty <salty@salty.dk>
Date: Thu, 1 Feb 2024 10:53:56 +0100
Subject: [PATCH] add config templating

---
 Dockerfile           |  4 +++-
 docker-entrypoint.sh | 33 +++++++++++++++++++++++++++++++++
 haproxy.cfg          |  2 +-
 3 files changed, 37 insertions(+), 2 deletions(-)
 create mode 100755 docker-entrypoint.sh

diff --git a/Dockerfile b/Dockerfile
index afdc46f..6e8ec04 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -9,6 +9,7 @@ ENV ALLOW_RESTARTS=0 \
     COMMIT=0 \
     CONFIGS=0 \
     CONTAINERS=0 \
+    DISABLE_IPV6=0 \
     DISTRIBUTION=0 \
     EVENTS=1 \
     EXEC=0 \
@@ -30,4 +31,5 @@ ENV ALLOW_RESTARTS=0 \
     TASKS=0 \
     VERSION=1 \
     VOLUMES=0
-COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg
+COPY docker-entrypoint.sh /usr/local/bin/
+COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg.template
diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh
new file mode 100755
index 0000000..c328d3a
--- /dev/null
+++ b/docker-entrypoint.sh
@@ -0,0 +1,33 @@
+#!/bin/sh
+set -e
+
+# Normalize the input for DISABLE_IPV6 to lowercase
+DISABLE_IPV6_LOWER=$(echo "$DISABLE_IPV6" | tr '[:upper:]' '[:lower:]')
+
+# Check for different representations of 'true' and set BIND_CONFIG
+case "$DISABLE_IPV6_LOWER" in
+    1|true|yes)
+        BIND_CONFIG=":2375"
+        ;;
+    *)
+        BIND_CONFIG="[::]:2375 v4v6"
+        ;;
+esac
+
+# Process the HAProxy configuration template using sed
+sed "s/\${BIND_CONFIG}/$BIND_CONFIG/g" /usr/local/etc/haproxy/haproxy.cfg.template > /usr/local/etc/haproxy/haproxy.cfg
+
+# first arg is `-f` or `--some-option`
+if [ "${1#-}" != "$1" ]; then
+	set -- haproxy "$@"
+fi
+
+if [ "$1" = 'haproxy' ]; then
+	shift # "haproxy"
+	# if the user wants "haproxy", let's add a couple useful flags
+	#   -W  -- "master-worker mode" (similar to the old "haproxy-systemd-wrapper"; allows for reload via "SIGUSR2")
+	#   -db -- disables background mode
+	set -- haproxy -W -db "$@"
+fi
+
+exec "$@"
diff --git a/haproxy.cfg b/haproxy.cfg
index c87c8d8..43e3526 100644
--- a/haproxy.cfg
+++ b/haproxy.cfg
@@ -44,7 +44,7 @@ backend docker-events
     timeout server 0
 
 frontend dockerfrontend
-    bind :::2375 v4v6
+    bind ${BIND_CONFIG}
     http-request deny unless METH_GET || { env(POST) -m bool }
     http-request allow if { path,url_dec -m reg -i ^(/v[\d\.]+)?/containers/[a-zA-Z0-9_.-]+/((stop)|(restart)|(kill)) } { env(ALLOW_RESTARTS) -m bool }
     http-request allow if { path,url_dec -m reg -i ^(/v[\d\.]+)?/containers/[a-zA-Z0-9_.-]+/start } { env(ALLOW_START) -m bool }
-- 
GitLab