#!/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