#!/bin/bash

set -e

usage () {
    echo "usage:"
    echo "invirt-admin create-sysvm {options}"
    echo "  required options: --name, --fs-size, --swap-size, --memory,"
    echo "    --hostname, --ip, --mac, --arch, --dist, --mirror"
    echo
    echo "  fs-size, swap-size, memory in MiB"
    echo "  fs-size + swap-size will be total disk-image size"
    exit 2
}

if [ create-sysvm != "$1" ]; then
    usage
fi
shift

vg=xenvg
while [ $# -gt 0 ]; do
    case "$1" in
	--vg)        vg=$2;        shift 2;;
	--name)      name=$2;      shift 2;;
	--fs-size)   fs_size=$2;   shift 2;;
	--swap-size) swap_size=$2; shift 2;;
	--memory)    memory=$2;    shift 2;;
	--hostname)  hostname=$2;  shift 2;;
	--ip)        ip=$2;        shift 2;;
	--mac)       mac=$2;       shift 2;;
	--arch)      arch=$2;      shift 2;;
	--dist)      dist=$2;      shift 2;;
	--mirror)    mirror=$2;    shift 2;;
    esac
done
if [ -z "$name" ]; then
    usage
fi
disk_size=$(( $fs_size + $swap_size ))


lvcreate "$vg" --name "s_${name}_hda" --size "$disk_size"m

# XXX breaks if $name has dashes
TARGET=/dev/mapper/$vg-s_${name}_hda FSSIZE=$fs_size \
ARCH=$arch DIST=$dist MIRROR=$mirror \
HOSTNAME=$hostname IP=$ip \
 invirt-create-image 

cat >/etc/xen/sysvms/s_$name <<EOF
import os

release     = os.uname()[2]
kernel      = '/boot/vmlinuz-%s' % release
ramdisk     = '/boot/initrd.img-%s' % release
memory      = '$memory'

disk        = ['phy:$vg/s_${name}_hda,hda,w']

name        = 's_$name'

vif         = [ 'ip=$ip,mac=$mac' ]

on_poweroff = 'destroy'
on_reboot   = 'restart'
on_crash    = 'restart'

root = "/dev/hda1 ro"
extra = '2 console=xvc0'
EOF

echo
echo "Configuration written to /etc/xen/sysvms/s_$name."
echo "To boot:"
echo "  xm create sysvms/s_$name"