def drive_from_element(disk_devices, disk_element): # we try serial first for backward compatibility # REQUIRED_FOR: vdsm <= 4.2 serial_elem = vmxml.find_first(disk_element, 'serial', None) if serial_elem is not None: serial = vmxml.text(serial_elem) try: return drive_by_serial(disk_devices, serial) except LookupError: pass # try again by alias before to give up alias = core.find_device_alias(disk_element) return device_by_alias(disk_devices, alias)
def xml_device_by_alias(device_xml, alias): """ Return an XML device having the given alias. :param device_xml: parsed <devices> element, typically taken from DomainDescriptor.devices :type device_xml: DOM object :param alias: device alias :type alias: string :returns: DOM object of the device element having the given alias :raises: `LookupError` if no device with `alias` is found """ for dom in vmxml.children(device_xml): xml_alias = core.find_device_alias(dom) if xml_alias and xml_alias == alias: return dom raise LookupError("Unable to find matching XML for device %r" % (alias, ))
def detachDevice(self, device_xml): if self.vm is not None: dev = xmlutils.fromstring(device_xml) alias = core.find_device_alias(dev) self.vm.onDeviceRemoved(alias)
def device_from_xml_alias(devices, device_xml): dev = xmlutils.fromstring(device_xml) alias = core.find_device_alias(dev) return device_by_alias(devices, alias)