Vinzenz Feenstra has uploaded a new change for review.
Change subject: vdsm: Simplify the retrieval of device XML objects
......................................................................
vdsm: Simplify the retrieval of device XML objects
Signed-off-by: Vinzenz Feenstra <vfeenstr(a)redhat.com>
Change-Id: I9d67e1f675ed5b4a6dfdc4fa0ee1a15487fb0a97
---
M vdsm/vm/vm.py
1 file changed, 20 insertions(+), 29 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/47/11747/1
diff --git a/vdsm/vm/vm.py b/vdsm/vm/vm.py
index 0d053ff..2286e41 100644
--- a/vdsm/vm/vm.py
+++ b/vdsm/vm/vm.py
@@ -2039,7 +2039,7 @@
def setTicket(self, otp, seconds, connAct, params):
graphics = _domParseStr(self._dom.XMLDesc(0)).childNodes[0]. \
- getElementsByTagName('graphics')[0]
+ getElementsByTagName('graphics')
graphics.setAttribute('passwd', otp)
if int(seconds) > 0:
validto = time.strftime('%Y-%m-%dT%H:%M:%S',
@@ -2111,8 +2111,7 @@
def _getVmInfo(self):
self._lastXMLDesc = self._dom.XMLDesc(0)
- devxml = _domParseStr(self._lastXMLDesc).childNodes[0]. \
- getElementsByTagName('devices')[0]
+ devxml = self._getDeviceXml()
self._devXmlHash = str(hash(devxml.toxml()))
return self._lastXMLDesc
@@ -2393,6 +2392,14 @@
return address
+ def _getDeviceXml(self, subDeviceName=None, deviceName='devices'):
+ # TODO use xpath instead of parseString (here and elsewhere)
+ devices = _domParseStr(self._lastXMLDesc).childNodes[0].\
+ getElementsByTagName(deviceName)[0]
+ if subDeviceName:
+ return devices.getElementsByTagName(subDeviceName)
+ return devices
+
def _getUnknownDeviceInfo(self):
"""
Obtain unknown devices info from libvirt.
@@ -2406,8 +2413,7 @@
return True
return False
- devsxml = _domParseStr(self._lastXMLDesc).childNodes[0]. \
- getElementsByTagName('devices')[0]
+ devsxml = self._getDeviceXml()
for x in devsxml.childNodes:
# Ignore empty nodes and devices without address
@@ -2431,9 +2437,7 @@
"""
Obtain controller devices info from libvirt.
"""
- ctrlsxml = _domParseStr(self._lastXMLDesc).childNodes[0]. \
- getElementsByTagName('devices')[0]. \
- getElementsByTagName('controller')
+ ctrlsxml = self._getDeviceXml('controller')
for x in ctrlsxml:
# Ignore controller devices without address
if not x.getElementsByTagName('address'):
@@ -2478,9 +2482,7 @@
"""
Obtain balloon device info from libvirt.
"""
- balloonxml = _domParseStr(self._lastXMLDesc).childNodes[0]. \
- getElementsByTagName('devices')[0]. \
- getElementsByTagName('memballoon')
+ balloonxml = self._getDeviceXml('memballoon')
for x in balloonxml:
# Ignore balloon devices without address.
if not x.getElementsByTagName('address'):
@@ -2504,9 +2506,7 @@
"""
Obtain smartcard device info from libvirt.
"""
- smartcardxml = _domParseStr(self._lastXMLDesc).childNodes[0].\
- getElementsByTagName('devices')[0].\
- getElementsByTagName('smartcard')
+ smartcardxml = self._getDeviceXml('smartcard')
for x in smartcardxml:
if not x.getElementsByTagName('address'):
continue
@@ -2529,9 +2529,7 @@
"""
Obtain watchdog device info from libvirt.
"""
- watchdogxml = _domParseStr(self._lastXMLDesc).childNodes[0]. \
- getElementsByTagName('devices')[0]. \
- getElementsByTagName('watchdog')
+ watchdogxml = self._getDeviceXml('watchdog')
for x in watchdogxml:
# PCI watchdog has "address" different from ISA watchdog
@@ -2554,8 +2552,7 @@
"""
Obtain video devices info from libvirt.
"""
- videosxml = _domParseStr(self._lastXMLDesc).childNodes[0]. \
-
getElementsByTagName('devices')[0].getElementsByTagName('video')
+ videosxml = self._getDeviceXml('video')
for x in videosxml:
alias =
x.getElementsByTagName('alias')[0].getAttribute('name')
# Get video card address
@@ -2582,8 +2579,7 @@
"""
Obtain sound devices info from libvirt.
"""
- soundsxml = _domParseStr(self._lastXMLDesc).childNodes[0]. \
-
getElementsByTagName('devices')[0].getElementsByTagName('sound')
+ soundsxml = self._getDeviceXml('sound')
for x in soundsxml:
alias =
x.getElementsByTagName('alias')[0].getAttribute('name')
# Get sound card address
@@ -2610,8 +2606,7 @@
"""
Obtain block devices info from libvirt.
"""
- disksxml = _domParseStr(self._lastXMLDesc).childNodes[0]. \
-
getElementsByTagName('devices')[0].getElementsByTagName('disk')
+ disksxml = self._getDeviceXml('disk')
# FIXME! We need to gather as much info as possible from the libvirt.
# In the future we can return this real data to management instead of
# vm's conf
@@ -2675,8 +2670,7 @@
"""
Obtain display port info from libvirt.
"""
- graphics = _domParseStr(self._lastXMLDesc).childNodes[0]. \
- getElementsByTagName('graphics')[0]
+ graphics = self._getDeviceXml(None, 'graphics')
port = graphics.getAttribute('port')
if port:
self.conf['displayPort'] = port
@@ -2688,10 +2682,7 @@
"""
Obtain network interface info from libvirt.
"""
- # TODO use xpath instead of parseString (here and elsewhere)
- ifsxml = _domParseStr(self._lastXMLDesc).childNodes[0]. \
- getElementsByTagName('devices')[0]. \
- getElementsByTagName('interface')
+ ifsxml = self._getDeviceXml('interface')
for x in ifsxml:
devType = x.getAttribute('type')
name =
x.getElementsByTagName('target')[0].getAttribute('dev')
--
To view, visit
http://gerrit.ovirt.org/11747
To unsubscribe, visit
http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I9d67e1f675ed5b4a6dfdc4fa0ee1a15487fb0a97
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Vinzenz Feenstra <vfeenstr(a)redhat.com>