#!/usr/local/bin/cbsd
#v11.0.6
CBSDMODULE="bhyve"
MYARG=""
MYOPTARG="jname"
MYDESC="bhyve bstop bstart sequence"
ADDHELP="jname1 [jname2 ..]\n"

. ${subrdir}/nc.subr
. ${strings}
. ${tools}

if [ -z "$1" ]; then
	select_jail_by_list -s "List of online jail" -a "On" -e bls -r ${sqlreplica}
	jname="${jname}"
else
	jname="$*"
fi
. ${cbsdinit}

[ -z "${jname}" ] && return 0
jlist="${jname}"

if [ "${mod_cbsd_queue_enabled}" = "YES" -a -z "${MOD_CBSD_QUEUE_DISABLED}" ]; then
	readconf cbsd_queue.conf
	[ -z "${cbsd_queue_backend}" ] && MOD_CBSD_QUEUE_DISABLED="1"
fi

for jname in ${jlist}; do
	. ${subrdir}/rcconf.subr

	if [ $? -eq 1 ]; then
		$ECHO "${N1_COLOR}No such jail: ${N2_COLOR}${jname}${N0_COLOR}"
		continue
	fi

	# CBSD QUEUE
	if [ "${mod_cbsd_queue_enabled}" = "YES" -a -z "${MOD_CBSD_QUEUE_DISABLED}" ]; then
		[ -n "${cbsd_jail_queue_name}" ] && ${cbsd_queue_backend} cbsd_queue_name=${cbsd_bhyve_queue_name} id=${jname} cmd=brestart status=1
	fi

	cbsdlogger NOTICE ${CBSD_APP}: restarting ${jname}

	# restart atomic operation for high-level app, disable queue in jstop/jstart command
	env MOD_CBSD_QUEUE_DISABLED=1  bstop inter=0 ${jname}
	if [ "${mod_cbsd_queue_enabled}" = "YES" -a -z "${MOD_CBSD_QUEUE_DISABLED}" ]; then
		[ -n "${cbsd_jail_queue_name}" ] && ${cbsd_queue_backend} cbsd_queue_name=${cbsd_bhyve_queue_name} id="${jname}" cmd=brestart status=1 data_status=1
	fi
	sleep 1
	env MOD_CBSD_QUEUE_DISABLED=1 bstart inter=0 ${jname}

	if [ "${mod_cbsd_queue_enabled}" = "YES" -a -z "${MOD_CBSD_QUEUE_DISABLED}" ]; then
		[ -n "${cbsd_jail_queue_name}" ] && ${cbsd_queue_backend} cbsd_queue_name=${cbsd_bhyve_queue_name} id="${jname}" cmd=brestart status=2 data_status=1
	fi

done
