#!/bin/sh

# PROVIDE: slurmd
# REQUIRE: DAEMON munge
# BEFORE: LOGIN
# KEYWORD: shutdown
#
# Add the following lines to /etc/rc.conf.local or /etc/rc.conf
# to enable this service:
#
# slurmd_enable (bool):       Set to NO by default.
#                             Set it to YES to enable slurmd.
#
# Common knobs (honoured by slurmd and slurmctld):
#   slurm_user (str):         User to run Slurm daemons as (default: slurm)
#   slurm_group (str):        Group to run Slurm daemons as (default: slurm)
#   slurm_conf (str):         Path to slurm.conf, exported as SLURM_CONF
#                             (default: /usr/local/etc/slurm/slurm.conf)
#   slurm_logdir (str):       Log directory (default: /var/log/slurm)
#   slurm_rundir (str):       Runtime directory (default: /var/run/slurm)
#
# Service-specific knobs:
#   slurmd_flags (str):       Extra arguments passed to slurmd.
#   slurmd_pidfile (str):     PID file path
#                             (default: ${slurm_rundir}/slurmd.pid)
#   slurmd_logfile (str):     Log file path
#                             (default: ${slurm_logdir}/slurmd.log)
#

. /etc/rc.subr

name="slurmd"
rcvar="slurmd_enable"

load_rc_config $name

# Common defaults (shared conceptual contract with slurmctld)
: ${slurm_user:="slurm"}
: ${slurm_group:="slurm"}
: ${slurm_conf:="/usr/local/etc/slurm/slurm.conf"}
: ${slurm_logdir:="/var/log/slurm"}
: ${slurm_rundir:="/var/run/slurm"}

# Service defaults
: ${slurmd_enable:="NO"}
: ${slurmd_flags:=""}
: ${slurmd_pidfile:="${slurm_rundir}/slurmd.pid"}
: ${slurmd_logfile:="${slurm_logdir}/slurmd.log"}

pidfile="${slurmd_pidfile}"

command="/usr/sbin/daemon"
procname="/usr/local/sbin/${name}"
command_args="-P ${pidfile} -o ${slurmd_logfile} ${procname} -D ${slurmd_flags}"

extra_commands="reload"
start_precmd="${name}_prestart"
reload_cmd="${name}_reload"
status_cmd="${name}_status"
stop_cmd="${name}_stop"

slurmd_prestart()
{
	# Ensure log and run directories exist with correct ownership/modes.
	/usr/bin/install -d -o "${slurm_user}" -g "${slurm_group}" -m 0750 "${slurm_logdir}" || return 1
	/usr/bin/install -d -o "root" -g "wheel" -m 0755 "${slurm_rundir}" || return 1

	# Export SLURM_CONF if not already provided in the environment.
	if [ -z "${SLURM_CONF}" ]; then
		export SLURM_CONF="${slurm_conf}"
	fi
}

slurmd_reload()
{
	if [ ! -r "${pidfile}" ]; then
		echo "${name} not running? (pidfile not found)"
		return 1
	fi
	echo "Reloading ${name} configuration."
	kill -HUP "$(cat "${pidfile}")"
}

slurmd_status()
{
	if [ ! -r "${pidfile}" ]; then
		echo "${name} is not running (no pidfile)."
		return 1
	fi
	if ! check_pidfile "${pidfile}" "${procname}"; then
		echo "${name} is not running (stale pidfile)."
		return 1
	fi
	echo "${name} is running as pid $(cat "${pidfile}")."
}

slurmd_stop()
{
	if [ ! -r "${pidfile}" ]; then
		echo "${name} not running? (no pidfile)."
		return 1
	fi

	if ! check_pidfile "${pidfile}" "${procname}"; then
		echo "${name} not running? (stale pidfile: ${pidfile})."
		rm -f "${pidfile}"
		return 1
	fi

	echo "Stopping ${name}."
	kill -TERM "$(cat "${pidfile}")" 2>/dev/null || true

	if check_pidfile "${pidfile}" "${procname}"; then
		rm -f "${pidfile}"
	fi
}

run_rc_command "$1"
