Move libvirt XML generation to separate module.
authorRichard W.M. Jones <rjones@redhat.com>
Fri, 9 May 2014 11:40:17 +0000 (12:40 +0100)
committerRichard W.M. Jones <rjones@redhat.com>
Fri, 9 May 2014 11:40:17 +0000 (12:40 +0100)
Code refactoring.

Makefile.am
libvirt_xml.py [new file with mode: 0644]
mclu_build.py

index a1ae11d..1d9c8bc 100644 (file)
@@ -28,6 +28,7 @@ bin_SCRIPTS = mclu
 pkgdata_SCRIPTS = \
        config.py \
        lib.py \
+       libvirt_xml.py \
        mclu.py \
        mclu_build.py \
        mclu_console.py \
diff --git a/libvirt_xml.py b/libvirt_xml.py
new file mode 100644 (file)
index 0000000..a2f082d
--- /dev/null
@@ -0,0 +1,95 @@
+#!/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
index ce077a6..97b3ade 100644 (file)
@@ -25,6 +25,7 @@ import libvirt
 
 import config
 import lib
+import libvirt_xml
 
 def cmdline (subparsers):
     p = subparsers.add_parser (
@@ -105,75 +106,11 @@ def run (c, args, nodes):
 
     # Generate the XML.  Would be nice to use virt-install here, but
     # it doesn't work: RHBZ#1095789
-    network_model = "virtio"
-    if not args.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, args.memory, args.memory, args.vcpus, network_model)
-
-    # virtio-scsi or IDE disk:
-    if args.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>
-"""
+    xml = libvirt_xml.generate_libvirt_xml (vm_name,
+                                            args.memory,
+                                            args.vcpus,
+                                            args.virtio,
+                                            output)
 
     # Write the XML to the xmls_dir.
     fp = open ("%s/%s.xml" % (c['xmls_dir'], vm_name), "w")