#!/bin/bash
<% user = p("consul.user") %>
set -e # exit immediately if a simple command exits with a non-zero status
set -u # report the usage of uninitialized variables
set -x

# Setup env vars and folders for the webapp_ctl script
source /var/vcap/jobs/consul/helpers/ctl_setup.sh 'consul'

export LANG=en_US.UTF-8
export GOMAXPROCS=2

case $1 in

  start)
    pid_guard $PIDFILE $JOB_NAME

    ulimit -v unlimited

    setcap cap_net_bind_service=+ep $(readlink -nf /var/vcap/packages/consul/bin/consul)

    <% if p("consul.resolvconf_override") == true %>
    echo "nameserver 127.0.0.1" > /etc/resolv.conf
    <% else %>
    if ! grep -q 127.0.0.1 /etc/resolv.conf; then
      sed -i -e '1i nameserver 127.0.0.1' /etc/resolv.conf
    fi
    <% end %>

    mkdir -p /var/vcap/data/consul
    chown <%= user %>:<%= user %> /var/vcap/data/consul
    config_dir="-config-dir /var/vcap/data/consul "

    rm -f /var/vcap/data/consul/service-*.json
    <% if_p("consul.services") do |services| %>
      <% services.each do |service_name,service| %>
      cat >/var/vcap/data/consul/service-<%= service_name %>.json <<EOF
<%=
{
  "service" => {
    "name" => service_name.tr('_', '-'),
    "check" => {
      "script" => "/bin/true",
      "interval" => "3s"
    },
    "tags" => ["#{name.gsub('_', '-')}-#{spec.index}"]
  }.merge(service)
}.to_json
%>
EOF
      <% end %>
    <% end %>

    # Load any config files in any collocated jobs
    # This also loads the agent's own configuration
    for dir in $(ls -d /var/vcap/jobs/*/consul); do
      export config_dir="${config_dir}-config-dir ${dir} "
    done

    # get list of job names
    for dir in /var/vcap/jobs/*
    do
      dir=${dir%*/}
      jobname=${dir##*/}
      consul_run_dir=/var/vcap/sys/run/consul/$jobname
      mkdir -p $consul_run_dir
      chown <%= user %>:<%= user %> -R $consul_run_dir
      export config_dir="${config_dir}-config-dir ${consul_run_dir} "
    done

    chpst -u <%= user %>:<%= user %> /var/vcap/packages/consul/bin/consul agent $config_dir \
          -pid-file $PIDFILE \
          >>$LOG_DIR/$JOB_NAME.log 2>&1 &

    ;;

  stop)
    <% if_p("consul.ssl_ca", "consul.ssl_cert", "consul.ssl_key") do %>
      <% if !p("consul.http_local") %>
    export CONSUL_HTTP_SSL=true
    export CONSUL_CACERT=$JOB_DIR/consul/ca.cert
    export CONSUL_CLIENT_CERT=$JOB_DIR/consul/consul.cert
    export CONSUL_CLIENT_KEY=$JOB_DIR/consul/consul.key
      <% end %>
    <% end %>
    /var/vcap/packages/consul/bin/consul leave
    ;;

  reload)
    echo "Reloading consul configuration..."
    chpst -u <%= user %>:<%= user %> kill -SIGHUP $(cat $PIDFILE)
    ;;

  *)
    echo "Usage: consul_ctl {start|stop|reload}"

    ;;

esac
exit 0
