Change in vdsm[ovirt-3.5]: Add an empty metadata qos element to the created domain

msivak at redhat.com msivak at redhat.com
Thu Dec 3 14:34:17 UTC 2015


Hello Francesco Romani,

I'd like you to do a code review.  Please visit

    https://gerrit.ovirt.org/49655

to review the following change.

Change subject: Add an empty metadata qos element to the created domain
......................................................................

Add an empty metadata qos element to the created domain

Libvirt reports an error every time VDSM queries for the metadata
element when there is none. This patch adds an empty default
element to get rid of those errors.

Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=1219903
Change-Id: Ibc5db925b55ea8e583a11d548a27dc3fd0886fee
Signed-off-by: Martin Sivak <msivak at redhat.com>
Reviewed-on: https://gerrit.ovirt.org/45664
Continuous-Integration: Jenkins CI
Reviewed-by: Francesco Romani <fromani at redhat.com>
(cherry picked from commit deadb606de96fc84d8d912d56bbc042974074f54)
Reviewed-on: https://gerrit.ovirt.org/45799
---
M tests/vmTests.py
M tests/vmTestsData.py
M vdsm/virt/utils.py
M vdsm/virt/vm.py
4 files changed, 52 insertions(+), 7 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/55/49655/1

diff --git a/tests/vmTests.py b/tests/vmTests.py
index be0b801..a403415 100644
--- a/tests/vmTests.py
+++ b/tests/vmTests.py
@@ -204,13 +204,16 @@
 
     def testDomXML(self):
         expectedXML = """
-           <domain type="kvm">
+           <domain type="kvm" xmlns:ovirt="http://ovirt.org/vm/tune/1.0">
               <name>testVm</name>
               <uuid>9ffe28b6-6134-4b1e-8804-1185f49c436f</uuid>
               <memory>1048576</memory>
               <currentMemory>1048576</currentMemory>
               <vcpu current="8">160</vcpu>
               <devices/>
+              <metadata>
+                 <ovirt:qos/>
+              </metadata>
            </domain>"""
 
         domxml = vm._DomXML(self.conf, self.log,
diff --git a/tests/vmTestsData.py b/tests/vmTestsData.py
index 4eb4960..63321f2 100644
--- a/tests/vmTestsData.py
+++ b/tests/vmTestsData.py
@@ -33,7 +33,8 @@
     'guestNumaNodes': []},
 
     """<?xml version="1.0" encoding="utf-8"?>
-        <domain type="kvm">
+        <domain type="kvm"
+        xmlns:ovirt="http://ovirt.org/vm/tune/1.0">
             <name>testVm</name>
             <uuid>%(vmId)s</uuid>
             <memory>1048576</memory>
@@ -52,6 +53,9 @@
                 </channel>
                 <input bus="ps2" type="mouse"/>
                 </devices>
+                <metadata>
+                    <ovirt:qos/>
+                </metadata>
                 <os>
                     <type arch="x86_64" machine="pc">hvm</type>
                     <smbios mode="sysinfo"/>
@@ -99,6 +103,7 @@
 
     """<?xml version="1.0" encoding="utf-8"?>
         <domain type="kvm"
+        xmlns:ovirt="http://ovirt.org/vm/tune/1.0"
         xmlns:qemu="http://libvirt.org/schemas/domain/qemu/1.0">
             <name>testVm</name>
             <uuid>%(vmId)s</uuid>
@@ -119,6 +124,9 @@
                 <input bus="usb" type="mouse"/>
                 <emulator>/usr/bin/qemu-system-ppc64</emulator>
                 </devices>
+                <metadata>
+                    <ovirt:qos/>
+                </metadata>
                 <os>
                     <type arch="ppc64" machine="pc">hvm</type>
                 </os>
diff --git a/vdsm/virt/utils.py b/vdsm/virt/utils.py
index 48f9a37..a20ef03 100644
--- a/vdsm/virt/utils.py
+++ b/vdsm/virt/utils.py
@@ -39,8 +39,12 @@
 
 class XMLElement(object):
 
-    def __init__(self, tagName, text=None, **attrs):
-        self._elem = xml.dom.minidom.Document().createElement(tagName)
+    def __init__(self, tagName, text=None, namespaceUri=None, **attrs):
+        if namespaceUri is not None:
+            self._elem = xml.dom.minidom.Document().createElementNS(
+                namespaceUri, tagName)
+        else:
+            self._elem = xml.dom.minidom.Document().createElement(tagName)
         self.setAttrs(**attrs)
         if text is not None:
             self.appendTextNode(text)
@@ -52,6 +56,9 @@
         for attrName, attrValue in attrs.iteritems():
             self._elem.setAttribute(attrName, attrValue)
 
+    def setAttr(self, attrName, attrValue):
+        self._elem.setAttribute(attrName, attrValue)
+
     def appendTextNode(self, text):
         textNode = xml.dom.minidom.Document().createTextNode(text)
         self._elem.appendChild(textNode)
diff --git a/vdsm/virt/vm.py b/vdsm/virt/vm.py
index ba4940c..2576522 100644
--- a/vdsm/virt/vm.py
+++ b/vdsm/virt/vm.py
@@ -95,6 +95,8 @@
 TPM_DEVICES = 'tpm'
 
 METADATA_VM_TUNE_URI = 'http://ovirt.org/vm/tune/1.0'
+METADATA_VM_TUNE_ELEMENT = 'qos'
+METADATA_VM_TUNE_PREFIX = 'ovirt'
 
 # A libvirt constant for undefined cpu quota
 _NO_CPU_QUOTA = 0
@@ -765,6 +767,8 @@
         self._devices = XMLElement('devices')
         self.dom.appendChild(self._devices)
 
+        self.appendMetadata()
+
     def appendClock(self):
         """
         Add <clock> element to domain:
@@ -785,6 +789,28 @@
             m.appendChildWithArgs('timer', name='hpet', present='no')
 
         self.dom.appendChild(m)
+
+    def appendMetadata(self):
+        """
+        Add the namespaced qos metadata element to the domain
+
+        <domain xmlns:ovirt="http://ovirt.org/vm/tune/1.0">
+        ...
+           <metadata>
+              <ovirt:qos xmlns:ovirt=>
+           </metadata>
+        ...
+        </domain>
+        """
+
+        self._metadata = XMLElement('metadata')
+        self._metadata.appendChild(
+            XMLElement(METADATA_VM_TUNE_PREFIX + ':' +
+                       METADATA_VM_TUNE_ELEMENT,
+                       namespaceUri=METADATA_VM_TUNE_URI))
+        self.dom.setAttr('xmlns:' + METADATA_VM_TUNE_PREFIX,
+                         METADATA_VM_TUNE_URI)
+        self.dom.appendChild(self._metadata)
 
     def appendOs(self):
         """
@@ -3858,7 +3884,7 @@
 
             try:
                 self._dom.setMetadata(libvirt.VIR_DOMAIN_METADATA_ELEMENT,
-                                      metadata_xml, 'ovirt',
+                                      metadata_xml, METADATA_VM_TUNE_PREFIX,
                                       METADATA_VM_TUNE_URI, 0)
             except libvirt.libvirtError as e:
                 self.log.exception("updateVmPolicy failed")
@@ -3879,7 +3905,8 @@
         :return: XML DOM object representing the root qos element
         """
 
-        metadata_xml = "<qos></qos>"
+        metadata_xml = "<%s></%s>" % (METADATA_VM_TUNE_ELEMENT,
+                                      METADATA_VM_TUNE_ELEMENT)
 
         try:
             metadata_xml = self._dom.metadata(
@@ -3891,7 +3918,7 @@
                 return None
 
         metadata = xml.dom.minidom.parseString(metadata_xml)
-        return metadata.getElementsByTagName("qos")[0]
+        return metadata.getElementsByTagName(METADATA_VM_TUNE_ELEMENT)[0]
 
     def _findDeviceByNameOrPath(self, device_name, device_path):
         for device in self._devices[DISK_DEVICES]:


-- 
To view, visit https://gerrit.ovirt.org/49655
To unsubscribe, visit https://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ibc5db925b55ea8e583a11d548a27dc3fd0886fee
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: ovirt-3.5
Gerrit-Owner: Martin Sivák <msivak at redhat.com>
Gerrit-Reviewer: Francesco Romani <fromani at redhat.com>


More information about the vdsm-patches mailing list