#!/bin/bash

#
# Wrap haproxy to provide LSB compatible behavior for systemd.
#
# The haproxy reload swaps daemon processes which causes systemd
# to behave as though the service has failed.
#

[ -f /etc/sysconfig/openshift-port-proxy ] && \
    source /etc/sysconfig/openshift-port-proxy

HAPROXY_PID=""

function reload {
    if [ "$HAPROXY_PID" ]; then
        /usr/sbin/haproxy -f "$OPENSHIFT_PROXY_CONFIG" $OPTIONS -sf $HAPROXY_PID &
        HAPROXY_PID=$!
        echo "$HAPROXY_PID" > /run/openshift-port-proxy.pid
    else
        exit 127
    fi
}

function redeliver {
    if [ "$HAPROXY_PID" ]; then
        /bin/kill -s "$1" "$HAPROXY_PID"
        rv=$?
        if [ $rv -ne 0 ]; then
            exit $rv
        fi
    else
        exit 127
    fi
}

function cleaner {
    rm -f /run/openshift-port-proxy.pid
}


# Start haproxy
/usr/bin/openshift-port-proxy-cfg fixaddr

/usr/sbin/haproxy -f "$OPENSHIFT_PROXY_CONFIG" $OPTIONS &
HAPROXY_PID=$!
echo "$HAPROXY_PID" > /run/openshift-port-proxy.pid

trap "cleaner" EXIT

trap "reload" USR2

for sig in HUP INT TERM USR1 TTOU TTIN QUIT PIPE; do
    trap "redeliver $sig" "$sig"
done

while true
do
    oldpid=$HAPROXY_PID
    wait $oldpid
    rv=$?
    if [ "$oldpid" == "$HAPROXY_PID" ]; then
        exit $rv
    fi
done
