+#!/usr/bin/python
+# mclu (mini cluster)
+# Copyright (C) 2014 Red Hat Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+import os
+import sys
+
+# Generate libvirt XML. Would be nice to use virt-install here, but
+# it doesn't work: RHBZ#1095789
+def generate_libvirt_xml (vm_name, memory, vcpus, virtio, output):
+ network_model = "virtio"
+ if not virtio:
+ network_model = "e1000"
+
+ # XXX Quoting, and we should use a real XML generator.
+ xml = """
+<domain type='kvm'>
+ <name>%s</name>
+ <memory unit='MiB'>%d</memory>
+ <currentMemory unit='MiB'>%d</currentMemory>
+ <vcpu>%d</vcpu>
+ <os>
+ <type>hvm</type>
+ <boot dev='hd'/>
+ </os>
+ <features>
+ <acpi/>
+ <apic/>
+ <pae/>
+ </features>
+ <cpu mode='host-model' fallback='allow' />
+ <clock offset='utc'>
+ <timer name='rtc' tickpolicy='catchup'/>
+ <timer name='pit' tickpolicy='delay'/>
+ <timer name='hpet' present='no'/>
+ </clock>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>restart</on_reboot>
+ <on_crash>restart</on_crash>
+ <devices>
+ <interface type='bridge'>
+ <source bridge='br0'/>
+ <model type='%s'/>
+ </interface>
+ <console type='pty'>
+ <target type='virtio' port='0'/>
+ </console>
+ <input type='tablet' bus='usb'/>
+ <input type='mouse' bus='ps2'/>
+ <!-- <input type='keyboard' bus='ps2'/> -->
+ <graphics type='vnc' autoport='yes'/>
+ <video>
+ <model type='cirrus' vram='9216' heads='1'/>
+ </video>
+""" % (vm_name, memory, memory, vcpus, network_model)
+
+ # virtio-scsi or IDE disk:
+ if virtio:
+ xml += """
+ <controller type="scsi" index="0" model="virtio-scsi"/>
+ <disk type='file' device='disk'>
+ <driver name='qemu' type='qcow2' cache='none' io='native'/>
+ <source file='%s'/>
+ <target dev='sda' bus='scsi'/>
+ </disk>
+""" % output
+ else:
+ xml += """
+ <disk type='file' device='disk'>
+ <driver name='qemu' type='qcow2' cache='none' io='native'/>
+ <source file='%s'/>
+ <target dev='sda' bus='ide'/>
+ </disk>
+""" % output
+
+ xml += """
+ </devices>
+</domain>
+"""
+
+ return xml