#!/usr/bin/env perl
#
# this generates an XML template for libvirt domain specification,
# which is tailored to an instance by the node controller

use diagnostics;
use warnings; 
use sigtrap;
use strict;
use English; # for descriptive predefined var names
use Data::Dumper; # for debugging: print Dumper($var)
use Getopt::Long;
use FindBin;
$OUTPUT_AUTOFLUSH = 1; # no output buffering

our $use_ramdisk = 0;

# deal with command-line parameters
GetOptions('ramdisk'        => sub { $use_ramdisk = 1; },
           'ephemeral'      => sub { }, # option ignored 
		   ) or exit (1);

print <<EOF;
<domain type='kvm'>
    <name>NAME</name>
    <os>
    <type>hvm</type>
        <kernel>BASEPATH/kernel</kernel>
EOF

if ( $use_ramdisk ) {
    print "        <initrd>BASEPATH/ramdisk</initrd>\n";
}

print <<EOF;
        <cmdline>root=/dev/sda1 console=ttyS0</cmdline>
    </os>
    <features>
        <acpi/>
    </features>
    <memory>MEMORY</memory>
    <vcpu>VCPUS</vcpu>
    <devices>
        <emulator>/usr/bin/kvm</emulator>
        <disk type='file'>
            <source file='BASEPATH/disk'/>
            <target dev='sda'/>
        </disk>
        <interface type='bridge'>
            <source bridge='BRIDGEDEV'/>
            <mac address='PRIVMACADDR'/>
        </interface>
        <serial type="file">
            <source path='BASEPATH/console.log'/>
            <target port='1'/>
        </serial>
    </devices>
</domain>
EOF
