From 6eba59be8ef6ea47e1d9657fed72fafbc7c9d6ef Mon Sep 17 00:00:00 2001 From: Soren Hansen Date: Thu, 12 Aug 2010 23:41:32 +0200 Subject: Make --libvirt_type=uml do the right thing: Sets the correct libvirt URI and use a special template for the XML. --- nova/virt/libvirt.qemu.xml.template | 30 ++++++++++++++++++++++++++++++ nova/virt/libvirt.uml.xml.template | 25 +++++++++++++++++++++++++ nova/virt/libvirt.xml.template | 30 ------------------------------ nova/virt/libvirt_conn.py | 32 +++++++++++++++++++++----------- 4 files changed, 76 insertions(+), 41 deletions(-) create mode 100644 nova/virt/libvirt.qemu.xml.template create mode 100644 nova/virt/libvirt.uml.xml.template delete mode 100644 nova/virt/libvirt.xml.template diff --git a/nova/virt/libvirt.qemu.xml.template b/nova/virt/libvirt.qemu.xml.template new file mode 100644 index 000000000..307f9d03a --- /dev/null +++ b/nova/virt/libvirt.qemu.xml.template @@ -0,0 +1,30 @@ + + %(name)s + + hvm + %(basepath)s/kernel + %(basepath)s/ramdisk + root=/dev/vda1 console=ttyS0 + + + + + %(memory_kb)s + %(vcpus)s + + + + + + + + + + + + + + + + %(nova)s + 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 @@ + + %(name)s + %(memory_kb)s + + %(type)suml + /usr/bin/linux + /dev/ubda1 + + + + + + + + + + + + + + + + + %(nova)s + diff --git a/nova/virt/libvirt.xml.template b/nova/virt/libvirt.xml.template deleted file mode 100644 index 307f9d03a..000000000 --- a/nova/virt/libvirt.xml.template +++ /dev/null @@ -1,30 +0,0 @@ - - %(name)s - - hvm - %(basepath)s/kernel - %(basepath)s/ramdisk - root=/dev/vda1 console=ttyS0 - - - - - %(memory_kb)s - %(vcpus)s - - - - - - - - - - - - - - - - %(nova)s - 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 -- cgit