#! /bin/bash

##- Renames a vServer
##: source destination
##+ source       Original name of the vServer
##+ destination  New name for the vServer

[ "${__vsa_bindir}" ] || exec "$(dirname "$0")/vserver-admin" rename "$@"
[[ $# -eq 2 ]] || __vsa_usage_and_exit

__vsa_run_locked
__vsa_config "$1" old
__vsa_config "$2" new


if [ "${old_lvm_volume}" ] ; then
	[[ ${new_lvm_group} = ${old_lvm_group} ]] || \
		__vsa_die "Cannot change LVM group name from '${old_lvm_group}' to '${new_lvm_group}'"
fi


modify-fstab-entry ()
{
	sed -i -e "s!${old_lvm_group}/${old_lvm_volume}!${new_lvm_group}/${new_lvm_volume}!g" \
	       -e "s!${__vsa_vdir}/${old_vserver}!${__vsa_vdir}/${new_vserver}!g" \
	          "${new_lvm_fstab}"
}

[[ ${old_vserver} = ${old_vserver// /} ]] || __vsa_die "Source vServer name contains spaces"
[[ ${new_vserver} = ${new_vserver// /} ]] || __vsa_die "Destination vServer name contains spaces"

if vserver --silent "${old_vserver}" status &> /dev/null ; then
	running=true
else
	running=false
fi

${running} && __vsa_do vserver --silent "${old_vserver}" stop


set_vserver_name ()
{
	echo "${new_vserver}" > uts/nodename
	echo "${new_vserver}" > name
}

# Modify stuff under /etc/vserver
#
__vsa_do cd /etc/vservers/${old_vserver}
__vsa_do rm cache vdir run
__vsa_do ln -s /etc/vservers/.defaults/cachebase/${new_vserver} cache
__vsa_do ln -s /etc/vservers/.defaults/vdirbase/${new_vserver} vdir
__vsa_do ln -s /var/run/vservers/${new_vserver} run
__vsa_do set_vserver_name
__vsa_do mv /etc/vservers/${old_vserver} /etc/vservers/${new_vserver}

# Modify logical volume name, mount point
#
if [ "${old_lvm_group}" ] ; then
	__vsa_do umount "${__vsa_vdir}/${old_vserver}"
	__vsa_do mv "${__vsa_vdir}/${old_vserver}" "${__vsa_vdir}/${new_vserver}"
	__vsa_do modify-fstab-entry
	__vsa_do lvrename "${old_lvm_group}" "${old_lvm_volume}" "${new_lvm_volume}"
	__vsa_do mount "${__vsa_vdir}/${new_vserver}"
else
	__vsa_do mv "${__vsa_vdir}/${old_vserver}" "${__vsa_vdir}/${new_vserver}"
fi

${running} && __vsa_do vserver --silent "${new_vserver}" start

