#!/bin/bash

set -e
#set the DEBUG env variable to turn on debugging
[[ -n "$DEBUG" ]] && set -x

# Environment
export HAPROXY_DOMAIN=${HAPROXY_DOMAIN:-router.local}

export CONSUL_LOGLEVEL=${CONSUL_LOGLEVEL:-warn}
export CONSUL_MINWAIT=${CONSUL_MINWAIT:-2s}
export CONSUL_MAXWAIT=${CONSUL_MAXWAIT:-10s}
export CONSUL_MAXSTALE=${CONSUL_MAXSTALE:-1s}
export CONSUL_URL=${CONSUL_URL:-consul:8500}

function usage {
cat <<USAGE
  router                  Start a router container built on haproxy,
                          dnsmasq, and consul-template

  Configure using the following environment variables:

  haproxy variables:

    HAPROXY_DOMAIN        Domain for HAProxy routing
                          (default router.local)

  consul-template variables:

    CONSUL_URL            The consul connection
                          (default consul:8500)

    CONSUL_LOGLEVEL       Valid values are "debug", "info", "warn", and "err".
                          (default is "warn")

    CONSUL_MINWAIT        Minimum value to wait for consul
                          (default is "2s")

    CONSUL_MAXWAIT        Maximum value to wait for consul
                          (default is "10s")

    CONSUL_MAXSTALE       Maximum data age for consul followers to answer queries with
                          (default is "1s")

    CONSUL_USERNAME       Consul basic auth username
                          (default is not set)

    CONSUL_PASSWORD       Consul basic auth password
                          (default is not set)

  More detailed configuration can be achieved by overwriting any of
  the default configuration files/templates located at:

    - /router/dnsmasq.cfg
    - /router/dnsmasq.hosts.tmpl
    - /router/dnsmasq.servers.tmpl
    - /router/consul.cfg
    - /router/haproxy.cfg.tmpl

  Additional arguments passed in will be forwarded directly to consul-template

USAGE
}

if [[ "$(ls -A /usr/local/share/ca-certificates)" ]]; then
  cat /usr/local/share/ca-certificates/* >> /etc/ssl/certs/ca-certificates.crt
fi

if [[ -n "${CONSUL_USERNAME}" ]]; then
  export CONSUL_AUTH_ENABLED="true"
else
  export CONSUL_AUTH_ENABLED="false"
fi

export CONSUL_EXTRA_ARGS="$@"

cat /router/error.http.tmpl | envsubst > /router/error.http
cat /router/consul.cfg.tmpl | envsubst > /router/consul.cfg

rsyslogd
/usr/sbin/haproxy -D -p /var/run/haproxy.pid -f /router/haproxy.cfg -sf $(ps -ef | grep haproxy | grep -v true | awk '{ print $1 }' | tr '\n' ' ') || true
/usr/sbin/dnsmasq -C /router/dnsmasq.cfg

supervisord -c /supervisord.conf
