#!/usr/local/bin/cbsd
#v11.1.3
CBSDMODULE="jail"
MYARG="node jname mkdatadir"
MYOPTARG="verbose sharedfs"
MYDESC="Prepare remote node for accepting jail via j2slave"
ADDHELP="mkdatadir - 0 or 1: create data directory. 1 - create, by default\n"

. ${subr}
. ${strings}

sharedfs=0
mkdatadir=1

init $*

[ -z "${node}" ] && log_err 1 "${MAGENTA}Give me node${NORMAL}"
[ -z "${jname}" ] && log_err 1 "${MAGENTA}Give me jname${NORMAL}"

SECFILE="${workdir}/etc/${jname}.secrets"

. ${jrcconf}
[ $? -eq 1 ] && log_err 1 "${MAGENTA}No such jail: ${GREEN}${jname}${NORMAL}"

printf "${MAGENTA}Preparing.${NORMAL}"

JAILRCCONF="${ftmpdir}/rc.conf_${jname}"
RJAILRCCONF="jails-rcconf/rc.conf_${jname}"

JAILDIR="${jaildatadir}/${jname}-${jaildatapref}"
JAILFSTAB="${jailfstabdir}/${jailfstabpref}${jname}"

RJAILDIR="${jaildatadir}/${jname}-${jaildatapref}"
RJAILFSTAB="jails-fstab/${jailfstabpref}${jname}"

[ ! -d ${JAILDIR} ] && err 1 "No jail data for ${jname}"

not_sharedfs_action()
{
	cbsdlogger NOTICE ${CBSD_APP}: generate secrets for ${jname}
	jgensecrets jname=${jname} mode=force > ${DEBLOG} 2>&1
	dot "jgensecrets"

	[ ! -f "${SECFILE}" ] && log_err 1 "${MAGENTA}No such secrets${NORMAL}"

	NODEDATA=$( cbsdsql nodes select ip,port,keyfile from nodelist where nodename=\"${node}\" )

	[ -z "${NODEDATA}" ] && log_err 1 "${MAGENTA}: No such node. Please execute ${GREEN}cbsd add node=${node} ${MAGENTA}first${NORMAL}"
	sqllist "${NODEDATA}" myip myport mykey

	SSHOP="-oBatchMode=yes -oStrictHostKeyChecking=no -oConnectTimeout=5 -q -oPort=${myport} -i ${mykey} ${myip}"

	cbsdlogger NOTICE ${CBSD_APP}: register secrets for ${jname} on remote node: ${node}
	rexe node=${node} cbsd secretsfile jname=${jname} mode=off > ${DEBLOG} 2>&1
	dot "rexe"
	cbsdlogger NOTICE ${CBSD_APP}: copy secrets for ${jname} to remote node: ${node}
	nodescp ${SECFILE} ${node}:etc > ${DEBLOG} 2>&1
	dot "scp_secfile"
	imgpart mode=pack jname=${jname} part=sysdata out=${tmpdir}/${jname}-sysdata.tgz > ${DEBLOG} 2>&1
	trap "/bin/rm -f ${tmpdir}/${jname}-sysdata.tgz" 0 1 2 3 4
	cbsdlogger NOTICE ${CBSD_APP}: copy sysdata for ${jname} to ${node}
	nodescp ${tmpdir}/${jname}-sysdata.tgz ${node}:jails-system > ${DEBLOG} 2>&1
	dot "scp_sysdata"
	rexe node=${node} cbsd secretsfile jname=${jname} mode=on > ${DEBLOG} 2>&1
	dot "rexe_2"
	RDIR="${jname}-data"
	if [ "${mkdatadir}" = "1" ]; then
		cbsdlogger NOTICE ${CBSD_APP}: create datadir for ${jname} on ${node}
		rexe node=${node} cbsd mkdatadir jname=${jname} > ${DEBLOG} 2>&1
		dot "rexe_3"
	fi

	if [ -f ${JAILFSTAB} ]; then
		cbsdlogger NOTICE ${CBSD_APP}: copy fstabs for ${jname} to ${node}
		nodescp ${JAILFSTAB} ${node}:${RJAILFSTAB} > ${DEBLOG} 2>&1
		dot "scp fstab"
	fi

	cbsdlogger NOTICE ${CBSD_APP}: extract sysdata for ${jname} on ${node}
	rexe node=${node} cbsd imgpart mode=extract jname=jails-system/${jname}-sysdata.tgz part=sysdata out=jails-system > ${DEBLOG} 2>&1
	dot "rexe_img_extract_sysdata"

	rexe node=${node} rm -f jails-system/${jname}-sysdata.tgz > ${DEBLOG} 2>&1
	dot "rexe_rm-f-sysdata"
}

if [ ${sharedfs} -eq 0 ]; then
	cbsdlogger NOTICE ${CBSD_APP}: not shared fs with ${node}, perform not_sharedfs_action
	not_sharedfs_action
fi

jmkrcconf jname=${jname} > ${JAILRCCONF}
cbsdlogger NOTICE ${CBSD_APP}: copy rcconf for ${jname} to ${node}
nodescp ${JAILRCCONF} ${node}:${RJAILRCCONF} > ${DEBLOG} 2>&1
dot "scp rcconf"
/bin/rm -f ${JAILRCCONF}

cbsdlogger NOTICE ${CBSD_APP}: jrsyncconf for ${jname} on ${node}
rexe node=${node} /usr/local/bin/cbsd jrsyncconf jname=${jname} > ${DEBLOG} 2>&1
dot "rexe_jrsyncconf"

cbsdlogger NOTICE ${CBSD_APP}: replacewdir for ${jname} on ${node}
rexe node=${node} cbsd replacewdir old=${workdir} file0=${RJAILRCCONF} file1=${RJAILFSTAB} > ${DEBLOG} 2>&1
dot "rexe_4"
err 0 "${GREEN}ok${NORMAL}"
