On Wed, Apr 12, 2017 at 03:16:31PM +0200, Conrad Hoffmann wrote: > Hi Olivier, > > I was very eager to try out your patch set, thanks a lot! However, after > applying all of them (including the last three), it seems that using > environment variables in the config is broken (i.e. ${VARNAME} does not get > replaced with the value of the environment variable anymore). I am using > the systemd-wrapper, but not systemd. > > Just from looking at the patches I couldn't make out what exactly might be > the problem. I guess it could be either the wrapper not passing on its > environment properly or haproxy not using it properly anymore. If you have > any immediate ideas, let me know. I'll try to fully debug this when I can > spare the time. > > Thanks a lot, > Conrad >
Hi Conrad, You're right, that was just me being an idiot :) Please replace 0007-MINOR-systemd-wrapper-add-support-for-passing-the-x-.patch with the one attached, or just replace in src/haproxy-systemd-wrapper.c : argv = calloc(4 + main_argc + nb_pid + 1 + stats_socket != NULL ? 2 : 0, sizeof(char *)); by : argv = calloc(4 + main_argc + nb_pid + 1 + (stats_socket != NULL ? 2 : 0), sizeof(char *)); Regards, Olivier
>From 526dca943b9cc89732c54bc43a6ce36e17b67890 Mon Sep 17 00:00:00 2001 From: Olivier Houchard <ohouch...@haproxy.com> Date: Sun, 9 Apr 2017 16:28:10 +0200 Subject: [PATCH 7/9] MINOR: systemd wrapper: add support for passing the -x option. Make the systemd wrapper chech if HAPROXY_STATS_SOCKET if set. If set, it will use it as an argument to the "-x" option, which makes haproxy asks for any listening socket, on the stats socket, in order to achieve reloads with no new connection lost. --- contrib/systemd/haproxy.service.in | 2 ++ src/haproxy-systemd-wrapper.c | 10 +++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/contrib/systemd/haproxy.service.in b/contrib/systemd/haproxy.service.in index dca81a2..05bb716 100644 --- a/contrib/systemd/haproxy.service.in +++ b/contrib/systemd/haproxy.service.in @@ -3,6 +3,8 @@ Description=HAProxy Load Balancer After=network.target [Service] +# You can point the environment variable HAPROXY_STATS_SOCKET to a stats +# socket if you want seamless reloads. Environment="CONFIG=/etc/haproxy/haproxy.cfg" "PIDFILE=/run/haproxy.pid" ExecStartPre=@SBINDIR@/haproxy -f $CONFIG -c -q ExecStart=@SBINDIR@/haproxy-systemd-wrapper -f $CONFIG -p $PIDFILE diff --git a/src/haproxy-systemd-wrapper.c b/src/haproxy-systemd-wrapper.c index f6a9c85..457f5bd 100644 --- a/src/haproxy-systemd-wrapper.c +++ b/src/haproxy-systemd-wrapper.c @@ -92,11 +92,15 @@ static void spawn_haproxy(char **pid_strv, int nb_pid) pid = fork(); if (!pid) { char **argv; + char *stats_socket = NULL; int i; int argno = 0; /* 3 for "haproxy -Ds -sf" */ - argv = calloc(4 + main_argc + nb_pid + 1, sizeof(char *)); + if (nb_pid > 0) + stats_socket = getenv("HAPROXY_STATS_SOCKET"); + argv = calloc(4 + main_argc + nb_pid + 1 + + (stats_socket != NULL ? 2 : 0), sizeof(char *)); if (!argv) { fprintf(stderr, SD_NOTICE "haproxy-systemd-wrapper: failed to calloc(), please try again later.\n"); exit(1); @@ -121,6 +125,10 @@ static void spawn_haproxy(char **pid_strv, int nb_pid) argv[argno++] = "-sf"; for (i = 0; i < nb_pid; ++i) argv[argno++] = pid_strv[i]; + if (stats_socket != NULL) { + argv[argno++] = "-x"; + argv[argno++] = stats_socket; + } } argv[argno] = NULL; -- 2.9.3