#! /bin/sh
#
# Copyright 2015 VMware, Inc. All rights reserved.
# vmware-imagebuilder Start/Stop the VMware Image Builder Service
#
# chkconfig: 345 80 05
# description: VMware Image Builder Server

### BEGIN INIT INFO
# Provides: vmware-imagebuilder
# Required-Start: $network $local_fs $remote_fs vmware-cm
# Required-Stop:
# Default-Start: 3 5
# Default-Stop: 0 1 2 6
# Description: VMware Image Builder Service
### END INIT INFO

# If the '/etc/profile' file exists source it, since it contains CIS related
# variables that were provided during CIS deployment.
[ -f /etc/profile ] && source /etc/profile

export PYTHONPATH="/usr/lib/vmware-imagebuilder/site-packages:/usr/lib/python2.7/site-packages/"
prog="/usr/lib/vmware-imagebuilder/bin/main.py"

IMAGEBUILDER_TAG=imagebuilder
WATCHDOG="/usr/bin/vmware-watchdog"
LOCKFILE="/tmp/vmware-imagebuilder.lock"

. /etc/rc.status
rc_reset

# there is only one instance running
function singleton_instance() {
  lockfile -5 -r 1 ${LOCKFILE}
  trap "[ -f ${LOCKFILE}  ] && rm -f ${LOCKFILE} > /dev/null 2>&1;" INT TERM EXIT
}
singleton_instance

function setProgramName() {
  local VMWARE_PYTHON_DIR=$(dirname $VMWARE_PYTHON_BIN)
  IMAGEBUILDER_BIN="$VMWARE_PYTHON_DIR"/vmware-imagebuilder
  if [ ! -f $IMAGEBUILDER_BIN ]; then
    ln -s $VMWARE_PYTHON_BIN $IMAGEBUILDER_BIN
  fi
}

function start_service() {
  setProgramName
  $WATCHDOG -s $IMAGEBUILDER_TAG -u 300 -q 2 $prog > /dev/null 2>&1 &
}

function stop_service() {
  $WATCHDOG -k $IMAGEBUILDER_TAG > /dev/null 2>&1
  kill -15 `pidof vmware-imagebuilder`
}

function query_service() {
  $WATCHDOG -r $IMAGEBUILDER_TAG
}

function query_service_silent() {
  $WATCHDOG -r $IMAGEBUILDER_TAG > /dev/null
}

case "$1" in
    start)
    if ! query_service_silent; then
      start_service
      sleep 0.5
      if ! query_service_silent; then
        rc_failed
      fi
    else
      logger -s -t ImageBuilder "ImageBuilder is already running."
      rc_failed
    fi
    rc_status -v
    ;;

    stop)
    if query_service; then
      stop_service
    else
      logger -s -t ImageBuilder "ImageBuilder is already stopped."
      rc_failed
    fi
    rc_status -v
    ;;

    status)
    if query_service_silent; then
      rc_status -v
    else
      rc_status -u
    fi
    ;;

    restart)
    stop_service
    start_service
    rc_status -v
    ;;

    *)
    echo "usage: $0 {start|stop|restart|status}"
    exit 1
esac

rc_exit
