#!/usr/local/bin/cbsd
#v12.1.11
MYARG=""
MYOPTARG="cbsdfile cur_env cwd jname"
MYDESC=" state of the machines Vagrant is managing"
CBSDMODULE="sys"
ADDHELP="\
 (experimental)\n\
 cbsdfile - alternative path to CBSDfile, could be relative to the\n\
   working directory like: tmp/CBSDfile\n\
"
EXTHELP="wf_cbsdfile"

. ${subrdir}/nc.subr
. ${strings}
cwd=
jname=
CLOUD_URL=
CLOUD_KEY=
. ${cbsdinit}

[ -z "${cur_env}" ] && cur_env=1

# init CBSDfile data
if [ -n "${cwd}" ]; then
	[ ! -r ${cwd}/CBSDfile ] && err 1 "${N1_COLOR}${CBSD_APP}: no such CBSDfile: ${N2_COLOR}${cwd}/CBSDfile${N0_COLOR}"
	cbsdfile="${cwd}/CBSDfile"
	cd ${cwd}
fi
. ${subrdir}/cbsdfile.subr
. ${subrdir}/time.subr

bhyve_status()
{
	local _cid _ssh _ssh_pref _ssh_post _ssh_len _ssh_sudo_args
	[ -z "${jname}" ] && return 1
	# drop privileges to nobody
	${SUDO_CMD} -u nobody ${CURL_CMD} --no-progress-meter -H "cid:${_cid}" ${CLOUD_URL}/api/v1/status/${jname}
	_ret=$?
	return ${_ret}
}

jail_status()
{
	local _cid _ssh _ssh_pref _ssh_post _ssh_len _ssh_sudo_args
	[ -z "${jname}" ] && return 1
	# drop privileges to nobody
	${SUDO_CMD} -u nobody ${CURL_CMD} --no-progress-meter -H "cid:${_cid}" ${CLOUD_URL}/api/v1/status/${jname}
	_ret=$?
	return ${_ret}
}

[ -z "${CLOUD_URL}" ] && err 1 "${N1_COLOR}${CBSD_APP}: empty CLOUD_URL${N0_COLOR}"
[ -z "${CLOUD_KEY}" ] && err 1 "${N1_COLOR}${CBSD_APP}: empty CLOUD_KEY${N0_COLOR}"

CURL_CMD=$( which curl )
[ -z "${CURL_CMD}" ] && err 1 "${N1_COLOR}cloud up requires curl, please install: ${N2_COLOR}pkg install -y curl${N0_COLOR}"

[ -z "${CBSDFILE_RECURSIVE}" ] && ${ECHO} "${N1_COLOR}main cloud api: ${N2_COLOR}${CLOUD_URL}${N0_COLOR}" 1>&2
_cid=$( ${miscdir}/cbsd_md5 "${CLOUD_KEY}" )

# todo: select/multipe when env>1
if [ ${bhyve_num} -eq 0 ]; then
	#${ECHO} "${N1_COLOR}${CBSD_APP}: no such bhyve env${N0_COLOR}"
else
	for jname in ${bhyve_list}; do
		printf "${N1_COLOR}vm ${jname}: ${N2_COLOR}"
		bhyve_status ${jname}
		ret=$?
		printf "${N0_COLOR}"
	done
fi

if [ ${jail_num} -eq 0 ]; then
	#${ECHO} "${N1_COLOR}${CBSD_APP}: no such jail env${N0_COLOR}"
else
	for jname in ${jail_list}; do
		printf "${N1_COLOR}jail ${jname}: ${N2_COLOR}"
		jail_status ${jname}
		ret=$?
		printf "${N0_COLOR}"
	done
fi

exit ${ret}
