eid-ops/fe-common/overlay/opt/frontend/scripts/generate-haproxy-config
2018-05-03 13:27:47 +02:00

47 lines
1.3 KiB
Bash
Executable file

#!/bin/bash
#
# Generate haproxy configuration whenever a change to one of the inputs for said
# generation is detected.
#
cfgfile='/etc/haproxy/haproxy.cfg'
rm -f "${cfgfile}.new"
pid=0
term_handler() {
echo "$0: Received SIGTERM, shutting down ${pid}"
if [ $pid -ne 0 ]; then
kill -SIGTERM "$pid"
wait "$pid"
fi
exit 143; # 128 + 15 -- SIGTERM
}
trap 'kill ${!}; term_handler' SIGTERM
while [ 1 ]; do
/opt/frontend/scripts/frontend-config $* print_haproxy_config > /etc/haproxy/haproxy.cfg.new
changed=0
if [ -s /etc/haproxy/haproxy.cfg.new ]; then
cmp --quiet "${cfgfile}.new" "${cfgfile}" || changed=1
if [ $changed -ne 0 ]; then
echo "haproxy config changed:";
diff -u "${cfgfile}" "${cfgfile}.new"
# this mv will inotify-trigger the autoreload.sh in the haproxy container to reload haproxy
mv "${cfgfile}.new" "${cfgfile}"
else
echo "haproxy config did not change"
fi
fi
sleep 1 # spin control
# The only things volume-mounted into these directories in the container where this runs
# should be specific to this instance, so we're not triggering off updates to other instances
inotifywait -q -r -e moved_to -e close_write /opt/frontend/api/backends /opt/frontend/config &
pid=${!}
wait $pid
done