#!/usr/local/bin/cbsd
#v12.1.12
MYARG=""
MYOPTARG="jname quiet all node"
MYDESC="Return or update node for jail map in ASCII file"
ADDHELP="jname1 [jname2] - return node array\n\
update=1 for re-generate file\n\
quiet=1 - no jailname before node ip\n\
all=1 - list all jails\n\
node= only for this node\n"

. ${subrdir}/nc.subr
all=0
. ${cbsdinit}

[ -z "${1}" ] && err 1 "${N1_COLOR}${CBSD_APP}: give me args${N0_COLOR}"
[ "${update}" = "1" ] && update
ARGS=

# exclude jname= and mode= params from args str
for i in $*; do
	prefix5=$( substr --pos=0 --len=4 --str="${i}" )
	prefix6=$( substr --pos=0 --len=6 --str="${i}" )
	prefix7=$( substr --pos=0 --len=7 --str="${i}" )
	[ "${prefix4}" = "all=" ] && continue
	[ "${prefix6}" = "quiet=" ] && continue
	[ "${prefix6}" = "jname=" ] && continue
	[ "${prefix6}" = "node=" ] && continue
	[ "${prefix7}" = "update=" ] && continue
	if [ -z "${ARGS}" ]; then
		ARGS="${i}"
	else
		ARGS="${ARGS} ${i}"
	fi
done

emulator="jail"
nodelist=$( cbsdsqlro nodes SELECT nodename FROM nodelist 2>/dev/null )

if [ ${all} -eq 1 ]; then
	for node in local ${nodelist}; do
		[ ! -r ${dbdir}/${node}.sqlite ] && continue
		jails=
		jails=$( cbsdsqlro ${node} "SELECT jname FROM jails WHERE emulator=\"${emulator}\"" 2>/dev/null | ${XARGS_CMD} )

		[ -z "${jails}" ] && continue

		if [ "${quiet}" = "1" ]; then
			for i in ${jails}; do
				echo "${i}"
			done
		else
			for i in ${jails}; do
				echo "${i}=\"${node}\""
			done
		fi
	done

	exit 0
fi


for jname in ${ARGS}; do
	jailnode=
	for node in local ${nodelist}; do
		[ ! -r ${dbdir}/${node}.sqlite ] && continue
		exist=
		exist=$( cbsdsqlro ${node} "SELECT jname FROM jails WHERE jname=\"${jname}\" AND emulator=\"${emulator}\" LIMIT 1" 2>/dev/null )
		if [ -n "${exist}" ]; then
			jailnode="${node}"
			break
		fi
		[ -n "${jailnode}" ] && break
	done
	[ -z "${jailnode}" ] && continue
	if [ "${quiet}" = "1" ]; then
		echo "${jailnode}"
	else
		echo "${jname}: ${jailnode}"
	fi
done
