#!/bin/sh

set -e

USAGE="Usage: $0 <xen id> <ram size> <allipaddrs> <vncpassword> <howtoboot>
Where allipaddrs is of the form '1.2.3.4 1.2.3.5' (eg: separated by space),
and howtoboot is 'name.iso' in /var/lib/dtc-xen/ttyssh_home/xenXX or 'hdd'"
if [ $# -lt 5 ]; then 
	echo $USAGE
fi

# Source the configuration in the config file!
if [ -f /etc/dtc-xen/dtc-xen.conf ] ; then
	. /etc/dtc-xen/dtc-xen.conf
fi

# Figure out the LVM name from dtc-xen.conf
LVMNAME=`dtc-xen-volgroup`
[ -z "$LVMNAME" ] && {
	echo "Could not determine volume group from which to provision the volume" 1>&2
	echo "You might want to set provisioning_volgroup in dtc-xen.conf" 1>&2
	exit 78
}
FSTAB_LVMNAME=`echo ${LVMNAME} | sed -e 's/-/--/g'`

# Figure out the VPS mount point
if [ -n "$provisioning_mount_point" ]
then
	VPSGLOBPATH="$provisioning_mount_point"
else
	VPSGLOBPATH="$VPS_MOUNTPOINT"
fi

INSTALL_KERNELPATH="/boot/netbsd-INSTALL_XENU"
NORMAL_KERNELPATH="/boot/netbsd-XENU"

# Get parameters from command line
VPSNUM=$1
VPSNAME=xen${VPSNUM}
VPSHOSTNAME=xen${NODE_NUM}${VPSNUM}
RAMSIZE=$2
ALL_IPADDRS=$3
VNC_PASSWORD=$4
HOW_TO_BOOT=$5

MAC_ADDR=${vps_mac_prefix}:${VPSNUM}
if [ ! -z "${MAC_ADDR}" ] ; then
	XEN_WRITE_MAC="mac=${MAC_ADDR}, "
else
	XEN_WRITE_MAC=""
fi

XEN_BR=${bridge}
if [ ! -z "${XEN_BR}" ] ; then
        BRIDGE_DIRECTIVE=", bridge=${XEN_BR}"
else
        BRIDGE_DIRECTIVE=""
fi
if [ ! -z "${VCPUS}" ] ; then
	VCPUSSET="vcpus=${VCPUS}"
else
	VCPUSSET="vcpus=1"
fi
if [ ! -z "${MAXMEM}" ] ; then
	MAXMEMSET="maxmem=${MAXMEM}"
else
	MAXMEMSET=""
fi
if [ ! -z "${PAE}" ] ; then
	PAESET="pae=${PAE}"
else
	PAESET=""
fi
if [ ! -z "${ACPI}" ] ; then
	ACPISET="acpi=${ACPI}"
else
	ACPISET=""
fi
if [ ! -z "${APIC}" ] ; then
	APICSET="apic=${APIC}"
else
	APICSET=""
fi
if [ ! -z "${KEYMAP}" ] ; then
	KEYMAPSET="keymap='${KEYMAP}'"
else
	KEYMAPSET=""
fi
if [ ! -z "${CPUS}" ] ; then
	CPUSSET="cpus=${CPUS}"
else
	CPUSSET=""
fi
if [ ! -z "${CPUCAP}" ] ; then
	CPUCAPSET="cpu_cap=${CPUCAP}"
else
	CPUCAPSET=""
fi
if [ ! -z "${CPUWEIGHT}" ] ; then
	CPUWEIGHTSET="cpu_weight=${CPUWEIGHT}"
else
	CPUWEIGHTSET=""
fi
if [ -f /usr/lib/xen-default/boot/hvmloader ] ; then
	HVMLOADER=/usr/lib/xen-default/boot/hvmloader
elif [ -f /usr/lib/xen/boot/hvmloader ] ; then
	HVMLOADER=/usr/lib/xen/boot/hvmloader
fi

echo -n "kernel = \"${HVMLOADER}\"
builder = 'hvm'
memory = ${RAMSIZE}
name = \"${VPSNAME}\"
${CPUSSET}
${CPUCAPSET}
${CPUWEIGHTSET}
${VCPUSSET}
${MAXMEMSET}
${PAESET}
${ACPISET}
${APICSET}
${KEYMAPSET}
vif = [ 'type=ioemu, ${XEN_WRITE_MAC}ip=${ALL_IPADDRS}${BRIDGE_DIRECTIVE}' ]
disk=[ 'phy:/dev/mapper/${FSTAB_LVMNAME}-xen${VPSNUM},ioemu:hda,w'" >/etc/xen/${VPSNAME}
# Set the additional cdrom drives: add all *.iso files to the config file
HDDLIST="bcdefghijklmnopqrstuvwxyz"
INCREMENT=2
for i in `find /var/lib/dtc-xen/ttyssh_home/xen${VPSNUM}/ -mindepth 1 -maxdepth 1 -iname '*.iso' | cut -d'/' -f7 | tr \\\r\\\n ,\ ` ; do
	DRIVE_LETTER=`echo ${HDDLIST} | awk '{print substr($0,'${INCREMENT}',1)}'`
	INCREMENT=$(( $INCREMENT + 1))
	echo -n ,\'file:/var/lib/dtc-xen/ttyssh_home/xen${VPSNUM}/$i,hd${DRIVE_LETTER}:cdrom,r\' >>/etc/xen/${VPSNAME}
done
echo " ]" >>/etc/xen/${VPSNAME}

# Set the VNC configuration
if [ -z "${VNC_PASSWORD}" -o "${VNC_PASSWORD}" = "no_vnc" ] ; then
	echo "nographic=1
vnc=0" >>/etc/xen/${VPSNAME}
else
	echo "vfb = [ \"type=vnc,vncdisplay=${VPSNUM},vncpasswd=${VNC_PASSWORD}\" ]
nographic=0
vnc=1
stdvga=1" >>/etc/xen/${VPSNAME}
fi

# Set the boot device
if [ ! "${HOW_TO_BOOT}" = "hdd" -a -e /var/lib/dtc-xen/ttyssh_home/xen${VPSNUM}/${HOW_TO_BOOT} ] ; then
	echo "cdrom=\"/var/lib/dtc-xen/ttyssh_home/xen${VPSNUM}/${HOW_TO_BOOT}\"
boot=\"d\"" >>/etc/xen/${VPSNAME}
else
	echo "boot=\"c\"" >>/etc/xen/${VPSNAME}
fi
echo "serial='pty'" >>/etc/xen/${VPSNAME}
