def device_from_node(conn, name=None, nodedev=None, is_dup=False, dev=None): """ Convert the passed device name to a VirtualHostDevice instance, with proper error reporting. Name can be any of the values accepted by NodeDeviceParser.lookupNodeName. If a node device name is not specified, a virtinst.NodeDevice instance can be passed in to create a dev from. @param conn: libvirt.virConnect instance to perform the lookup on @param name: optional libvirt node device name to lookup @param nodedev: optional L{virtinst.NodeDevice} instance to use @rtype: L{virtinst.VirtualHostDevice} instance """ if not name and not nodedev: raise ValueError("'name' or 'nodedev' required.") if nodedev: nodeinst = nodedev else: nodeinst, addr_type = NodeDeviceParser.lookupNodeName(conn, name) if addr_type == NodeDeviceParser.HOSTDEV_ADDR_TYPE_USB_BUSADDR: is_dup = True if isinstance(nodeinst, NodeDeviceParser.NetDevice): parentname = nodeinst.parent return VirtualHostDevice.device_from_node(conn, name=parentname) if not dev: dev = VirtualHostDevice(conn) dev.set_from_nodedev(nodeinst, is_dup) return dev
def _testCompare(self, devname, vals, devxml=None): if devxml: dev = nodeparse.parse(devxml) else: dev = self._nodeDevFromName(devname) for attr in vals.keys(): self.assertEqual(vals[attr], getattr(dev, attr))
def device_from_node(conn, name=None, nodedev=None, is_dup=False): """ Convert the passed device name to a VirtualHostDevice instance, with proper error reporting. Name can be any of the values accepted by NodeDeviceParser.lookupNodeName. If a node device name is not specified, a virtinst.NodeDevice instance can be passed in to create a dev from. @param conn: libvirt.virConnect instance to perform the lookup on @param name: optional libvirt node device name to lookup @param nodedev: optional L{virtinst.NodeDevice} instance to use @rtype: L{virtinst.VirtualHostDevice} instance """ if not name and not nodedev: raise ValueError(_("'name' or 'nodedev' required.")) if nodedev: nodeinst = nodedev else: nodeinst, addr_type = NodeDeviceParser.lookupNodeName(conn, name) if addr_type == NodeDeviceParser.HOSTDEV_ADDR_TYPE_USB_BUSADDR: is_dup = True if isinstance(nodeinst, NodeDeviceParser.PCIDevice): return VirtualHostDevicePCI(conn, nodedev=nodeinst) elif isinstance(nodeinst, NodeDeviceParser.USBDevice): return VirtualHostDeviceUSB(conn, nodedev=nodeinst, is_dup=is_dup) elif isinstance(nodeinst, NodeDeviceParser.NetDevice): parentname = nodeinst.parent try: return VirtualHostDevice.device_from_node(conn, name=parentname) except: logging.exception("Fetching net parent device failed.") raise ValueError( _("Node device type '%s' cannot be attached to " " guest.") % nodeinst.device_type)
def device_from_node(conn, name=None, nodedev=None, is_dup=False): """ Convert the passed device name to a VirtualHostDevice instance, with proper error reporting. Name can be any of the values accepted by NodeDeviceParser.lookupNodeName. If a node device name is not specified, a virtinst.NodeDevice instance can be passed in to create a dev from. @param conn: libvirt.virConnect instance to perform the lookup on @param name: optional libvirt node device name to lookup @param nodedev: optional L{virtinst.NodeDevice} instance to use @rtype: L{virtinst.VirtualHostDevice} instance """ if not name and not nodedev: raise ValueError(_("'name' or 'nodedev' required.")) if nodedev: nodeinst = nodedev else: nodeinst, addr_type = NodeDeviceParser.lookupNodeName(conn, name) if addr_type == NodeDeviceParser.HOSTDEV_ADDR_TYPE_USB_BUSADDR: is_dup = True if isinstance(nodeinst, NodeDeviceParser.PCIDevice): return VirtualHostDevicePCI(conn, nodedev=nodeinst) elif isinstance(nodeinst, NodeDeviceParser.USBDevice): return VirtualHostDeviceUSB(conn, nodedev=nodeinst, is_dup=is_dup) elif isinstance(nodeinst, NodeDeviceParser.NetDevice): parentname = nodeinst.parent try: return VirtualHostDevice.device_from_node(conn, name=parentname) except: logging.exception("Fetching net parent device failed.") raise ValueError(_("Node device type '%s' cannot be attached to " " guest.") % nodeinst.device_type)
def _nodeDevFromName(self, devname): node = conn.nodeDeviceLookupByName(devname) xml = node.XMLDesc(0) return nodeparse.parse(xml)