#!/bin/bash
#
# /etc/rc.d/init.d/consul
#
# Daemonize the consul agent.
#
# chkconfig: 2345 95 95
# description: Service discovery and configuration made easy. \
# Distributed, highly available, and datacenter-aware.
# processname: consul
# pidfile: /var/run/consul/pidfile

# Source function library.

# shellcheck disable=SC1091
. /etc/init.d/functions
NAME=consul
CONSUL=/usr/local/bin/consul
CONFIG="/etc/$NAME/conf.d"
PID_FILE="/var/run/$NAME/pidfile"
LOG_FILE="/var/log/$NAME"

# shellcheck disable=SC1090
[ -e "/etc/sysconfig/$NAME" ] && . "/etc/sysconfig/$NAME"
export GOMAXPROCS="${GOMAXPROCS:-2}"

mkdir -p "/var/run/$NAME"
chown consul:consul "/var/run/$NAME"
chmod 2770 "/var/run/$NAME"


start() {
   printf "Starting %s: " "$NAME"
   daemon --user=consul \
      --pidfile="$PID_FILE" \
      "$CONSUL" agent -pid-file="$PID_FILE" -config-dir "$CONFIG" >> "$LOG_FILE" &
   retcode=$?
   touch "/var/lock/subsys/$NAME"
   return "$retcode"
}

stop() {
   printf "Shutting down %s: " "$NAME"
   killproc -p "$PID_FILE" "$NAME"
   retcode=$?
   rm -f "/var/lock/subsys/$NAME"
   return "$retcode"
}

case "$1" in
   start)
      if status -p "$PID_FILE" "$NAME" >/dev/null; then
         echo "$NAME already running"
      else
         start
      fi
   ;;
   stop)
      if status -p "$PID_FILE" "$NAME" >/dev/null; then
         stop
      else
         echo "$NAME not running"
      fi
   ;;
   info)
      "$CONSUL" info
   ;;
   status)
      status -p "$PID_FILE" "$NAME"
      exit $?
   ;;
   restart)
      if status -p "$PID_FILE" "$NAME" >/dev/null; then
         stop
      fi
      start
   ;;
   reload)
      if status -p "$PID_FILE" "$NAME" >/dev/null; then
         kill -HUP "$(cat "$PID_FILE")"
      else
         echo "$NAME not running"
      fi
   ;;
   condrestart)
      if [ -f "/var/lock/subsys/$NAME" ]; then
         if status -p "$PID_FILE" "$NAME" >/dev/null; then
            stop
         fi
         start
      fi
   ;;
   *)
      echo "Usage: $NAME {start|stop|status|reload|restart|condrestart|info}"
      exit 1
   ;;
esac
exit $?
