summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--nova/virt/libvirt.qemu.xml.template (renamed from nova/virt/libvirt.xml.template)0
-rw-r--r--nova/virt/libvirt.uml.xml.template25
-rw-r--r--nova/virt/libvirt_conn.py32
3 files changed, 46 insertions, 11 deletions
diff --git a/nova/virt/libvirt.xml.template b/nova/virt/libvirt.qemu.xml.template
index 307f9d03a..307f9d03a 100644
--- a/nova/virt/libvirt.xml.template
+++ b/nova/virt/libvirt.qemu.xml.template
diff --git a/nova/virt/libvirt.uml.xml.template b/nova/virt/libvirt.uml.xml.template
new file mode 100644
index 000000000..0bc1507de
--- /dev/null
+++ b/nova/virt/libvirt.uml.xml.template
@@ -0,0 +1,25 @@
+<domain type='%(type)s'>
+ <name>%(name)s</name>
+ <memory>%(memory_kb)s</memory>
+ <os>
+ <type>%(type)suml</type>
+ <kernel>/usr/bin/linux</kernel>
+ <root>/dev/ubda1</root>
+ </os>
+ <devices>
+ <disk type='file'>
+ <source file='%(basepath)s/disk'/>
+ <target dev='ubd0' bus='uml'/>
+ </disk>
+ <interface type='bridge'>
+ <source bridge='%(bridge_name)s'/>
+ <mac address='%(mac_address)s'/>
+ </interface>
+ <console type="pty" />
+ <serial type="file">
+ <source path='%(basepath)s/console.log'/>
+ <target port='1'/>
+ </serial>
+ </devices>
+ <nova>%(nova)s</nova>
+</domain>
diff --git a/nova/virt/libvirt_conn.py b/nova/virt/libvirt_conn.py
index 2a818b40d..e2cdaaf7d 100644
--- a/nova/virt/libvirt_conn.py
+++ b/nova/virt/libvirt_conn.py
@@ -43,19 +43,21 @@ libvirt = None
libxml2 = None
FLAGS = flags.FLAGS
-flags.DEFINE_string('libvirt_uri',
- 'qemu:///system',
- 'Libvirt connection URI')
flags.DEFINE_string('libvirt_xml_template',
- utils.abspath('compute/libvirt.xml.template'),
- 'Libvirt XML Template')
+ utils.abspath('compute/libvirt.qemu.xml.template'),
+ 'Libvirt XML Template for QEmu/KVM')
+flags.DEFINE_string('libvirt_uml_xml_template',
+ utils.abspath('compute/libvirt.uml.xml.template'),
+ 'Libvirt XML Template for user-mode-linux')
flags.DEFINE_string('injected_network_template',
utils.abspath('virt/interfaces.template'),
'Template file for injected network')
-
flags.DEFINE_string('libvirt_type',
'kvm',
- 'Libvirt domain type (kvm, qemu, etc)')
+ 'Libvirt domain type (valid options are: kvm, qemu, uml)')
+flags.DEFINE_string('libvirt_uri',
+ '',
+ 'Override the default libvirt URI (which is dependent on libvirt_type)')
def get_connection(read_only):
# These are loaded late so that there's no need to install these
@@ -74,10 +76,19 @@ class LibvirtConnection(object):
auth = [[libvirt.VIR_CRED_AUTHNAME, libvirt.VIR_CRED_NOECHOPROMPT],
'root',
None]
+
+ if FLAGS.libvirt_type == 'uml':
+ uri = FLAGS.libvirt_uri or 'uml:///system'
+ template_file = FLAGS.libvirt_uml_xml_template
+ else:
+ uri = FLAGS.libvirt_uri or 'qemu:///system'
+ template_file = FLAGS.libvirt_xml_template
+ self.libvirt_xml = open(template_file).read()
+
if read_only:
- self._conn = libvirt.openReadOnly(FLAGS.libvirt_uri)
+ self._conn = libvirt.openReadOnly(uri)
else:
- self._conn = libvirt.openAuth(FLAGS.libvirt_uri, auth, 0)
+ self._conn = libvirt.openAuth(uri, auth, 0)
def list_instances(self):
@@ -240,14 +251,13 @@ class LibvirtConnection(object):
def toXml(self, instance):
# TODO(termie): cache?
logging.debug("Starting the toXML method")
- libvirt_xml = open(FLAGS.libvirt_xml_template).read()
xml_info = instance.datamodel.copy()
# TODO(joshua): Make this xml express the attached disks as well
# TODO(termie): lazy lazy hack because xml is annoying
xml_info['nova'] = json.dumps(instance.datamodel.copy())
xml_info['type'] = FLAGS.libvirt_type
- libvirt_xml = libvirt_xml % xml_info
+ libvirt_xml = self.libvirt_xml % xml_info
logging.debug("Finished the toXML method")
return libvirt_xml