eid-ops/fe-common/overlay/opt/frontend/OLD.scripts/haproxy-start.sh
2019-06-05 11:44:27 +02:00

98 lines
2.8 KiB
Bash
Executable file

#!/bin/bash
#
# Start script for haproxy container, managing startup process and automatic reload
# on config change (detected using inotify events triggering on MOVED_TO).
#
HAPROXYCFG=${HAPROXYCFG-'/etc/haproxy/haproxy.cfg'}
HAPROXYWAITIF=${HAPROXYWAITIF-'20'}
HAPROXYWAITCFG=${HAPROXYWAITCFG-'10'}
HAPROXYWAITCONTAINER=${HAPROXYWAITCONTAINER-'10'}
if [[ $WAIT_FOR_INTERFACE ]]; then
for i in $(seq ${HAPROXYWAITIF}); do
ip link ls dev "$WAIT_FOR_INTERFACE" | grep -q 'state UP' && break
echo "$0: Waiting for interface ${WAIT_FOR_INTERFACE} (${i}/${HAPROXYWAITIF})"
sleep 1
done
if ! ip link ls dev "$WAIT_FOR_INTERFACE" | grep -q 'state UP'; then
echo "$0: Interface ${WAIT_FOR_INTERFACE} not found after ${HAPROXYWAITIF} seconds"
exit 1
fi
echo "$0: Interface ${WAIT_FOR_INTERFACE} is UP:"
ip addr list "$WAIT_FOR_INTERFACE"
fi
for i in $(seq ${HAPROXYWAITCFG}); do
test -f "${HAPROXYCFG}" && break
echo "$0: Waiting for haproxy config file ${HAPROXYCFG} (${i}/${HAPROXYWAITCFG})"
sleep 1
done
if [ ! -f "${HAPROXYCFG}" ]; then
echo "$0: haproxy config not found after ${HAPROXYWAITCFG} seconds: ${HAPROXYCFG}"
exit 1
fi
if [[ $WAIT_FOR_CONTAINER ]]; then
seen=0
for i in $(seq ${HAPROXYWAITCONTAINER}); do
ping -c 1 $WAIT_FOR_CONTAINER > /dev/null 2>&1 && seen=1
test $seen == 1 && break
echo "$0: Waiting for container ${WAIT_FOR_CONTAINER} to appear (${i}/${HAPROXYWAITCONTAINER})"
sleep 1
done
if [[ $seen != 1 ]]; then
echo "$0: Host ${WAIT_FOR_CONTAINER} not present after ${HAPROXYWAITCONTAINER} seconds"
exit 1
fi
fi
echo "$0: Checking config: ${HAPROXYCFG}"
/usr/sbin/haproxy -c -f "${HAPROXYCFG}"
echo "$0: Config ${HAPROXYCFG} checked OK, starting haproxy-systemd-wrapper"
/usr/sbin/haproxy-systemd-wrapper -p /run/haproxy.pid -f "${HAPROXYCFG}" &
pid=$!
pid2=0
term_handler() {
echo "$0: Received SIGTERM, shutting down ${pid}, ${pid2}"
if [ $pid -ne 0 ]; then
kill -SIGTERM "$pid"
wait "$pid"
fi
if [ $pid2 -ne 0 ]; then
kill -SIGTERM "$pid2"
wait "$pid2"
fi
exit 143; # 128 + 15 -- SIGTERM
}
trap 'term_handler' SIGTERM
while [ 1 ]; do
echo "$0: Waiting for ${HAPROXYCFG} to be moved-to"
# Block until an inotify event says that the config file was replaced
inotifywait -q -e moved_to "${HAPROXYCFG}" &
pid2=$!
wait $pid2
echo "$0: Move-to event triggered, checking config: ${HAPROXYCFG}"
config_ok=1
/usr/sbin/haproxy -c -f "${HAPROXYCFG}" || config_ok=0
if [ $config_ok = 1 ]; then
echo "$0: Config ${HAPROXYCFG} checked OK, gracefully restarting haproxy-systemd-wrapper"
/usr/sbin/haproxy $* -p /run/haproxy.pid -f "${HAPROXYCFG}" -sf `cat /run/haproxy.pid`
echo "$0: haproxy gracefully reloaded"
else
echo "$0: Config ${HAPROXYCFG} NOT OK"
fi
sleep 1 # spin control
done