#!/bin/bash

#####################################################
#
#    Create Xen VM from template
#
#     -only Linux guest OS are supported
#     -Xen VM are paravirtualized and share the same Linux kernel and initrd file
#     -Xen VMs use file-backed images stored in directory /var/xen/images 
#     -guest Linux OS must use the following disk partition layout:
#        /dev/sda1  mounted as root (/)
#        /dev/sda2  mounted as /swap
#
#####################################################


KERNEL=/boot/vmlinuz-2.6.18.8-xen
INITRD=/boot/initrd-2.6.18.8-xen



usage() {
cat << EOF
usage: $0 options <vm label> 

OPTIONS:
  -d disk size in Mbytes
  -t image template filename
  -c number of VCPUs
  -u VM uuid
EOF
}


diskSizeMB=
templateFile=
memoryMB=
numVCPU=1
uuid=

while getopts “d:t:m:c:u:” OPTION
do
     case $OPTION in
         d)
             diskSizeMB=$OPTARG
             ;;
         t)
             templateFile=$OPTARG
             ;;
         m)
             memoryMB=$OPTARG
             ;;
         c)
             numVCPU=$OPTARG
             ;;
         u)
             uuid=$OPTARG
             ;;
         ?)
             usage
             exit
             ;;
     esac
done


shift $((OPTIND-1))
vmName=$1

if [[ -z $diskSizeMB ]] || [[ -z $vmName ]] || [[ -z $templateFile ]] || [[ -z $memoryMB ]] || [[ -z $numVCPU ]] || [[ -z $uuid ]]
then
     usage
     exit 1
fi


#swap space set to twice the memoryMB size
swapSize=$(( $memoryMB * 2 ))

if $VMM_HOME/bin/createVMDiskImages $vmName $diskSizeMB $templateFile $swapSize ; then 
	vmConfigFile=/etc/xen/auto/$1.cfg

	echo kernel=\"$KERNEL\" > $vmConfigFile
	echo ramdisk=\"$INITRD\" >> $vmConfigFile
	echo memory=$memoryMB >> $vmConfigFile
	echo vcpus=$numVCPU >> $vmConfigFile
	echo name=\"${vmName}\" >> $vmConfigFile
	echo vif=\[\' \'\] >> $vmConfigFile  
	echo disk=\[\'tap:aio:/var/xen/images/vm-$vmName.img,sda1,w\',\'tap:aio:/var/xen/images/vmsw-$vmName.img,sda2,w\'\] >> $vmConfigFile
	echo root=\"/dev/sda1 ro console=ttyS0\" >> $vmConfigFile
	echo extra=\"xencons=tty\"  >> $vmConfigFile
	echo uuid=\"${uuid}\"  >> $vmConfigFile

	if  ! xm new $vmConfigFile ; then
		if [ -f $vmConfigFile ]; then rm $vmConfigFile ; fi
		$VMM_HOME/bin/deleteVMDiskImages $vmName
		exit 1
	fi
	xm start ${vmName}
fi
