#!/usr/local/bin/cbsd
#v11.1.3
MYARG=""
MYOPTARG="default_jailname"
MYDESC="Suggest first available jname"
ADDHELP="default_jailname - prefix for name, e.g: vnet\n"
CBSDMODULE="jail"

. ${subr}
. ${strings}
init $*

[ -z "${default_jailname}" ] && default_jailname="jail"

#find for first jnameX where X is number++
freejname()
{
	local _num _newjname
	local _nodes _i _test _exist _unregister _j

	# also find by remote nodes databases, but local is first
	_nodes=$( cbsdsql nodes SELECT nodename FROM nodelist 2>/dev/null )
	_nodes="local ${_nodes}"

	# check unregister environment too
	_unregister=
	for _j in $( /bin/ls ${jailrcconfdir} ); do
		[ "${_j}" = "dir.id" ] && continue
		jname=
		[ ! -r ${jailrcconfdir}/${_j} ] && continue
		. ${jailrcconfdir}/${_j}
		[ -z "${jname}" ] && continue
		_unregister="${_unregister} ${jname}"
	done

	for _num in $( /usr/bin/jot 10000 ); do
		_newjname="${default_jailname}${_num}"
		_exist=0

		for _i in ${_unregister}; do
			[ "${_newjname}" = "${_i}" ] && _exist=1 && break
		done

		for _i in ${_nodes}; do
			_test=
			_test=$( cbsdsql ${_i} SELECT jname FROM jails WHERE jname=\"${_newjname}\" )
			[ -n "${_test}" ] && _exist=1 && break
		done

		case "${_exist}" in
			0)
				cbsdlogger NOTICE ${CBSD_APP}: found new name: ${_newjname}
				break
				;;
			1)
				cbsdlogger NOTICE ${CBSD_APP}: name already used: ${_newjname}
				continue
				;;
		esac
	done

	echo ${_newjname}
}

freejname
