On 04/24/2013 06:05 AM, Guannan Ren wrote: > When there are mutiple USB devices with identical vendorId and > productId, with --host-device <vendorId:productId>, virt-install > fails to specify one. > Currently the virt-install add the first node device with > these vendorId and productId. > This fix will throw out an error when argument to --host-device > can't specify unique node device. > > For example: > virt-install ${other args} \ > --host-device <vendorId:productId> > ERROR 15e1:2007 corresponds to multiple node devices > --- > tests/clitest.py | 3 ++- > virtinst/NodeDeviceParser.py | 22 ++++++++++++++++------ > 2 files changed, 18 insertions(+), 7 deletions(-) > > diff --git a/tests/clitest.py b/tests/clitest.py > index c7d7b05..650b51b 100644 > --- a/tests/clitest.py > +++ b/tests/clitest.py > @@ -640,7 +640,8 @@ vinst.add_invalid("redirdev", "--redirdev usb,type=tcp,server=:399") # Missing > > vinst.add_category("hostdev", "--noautoconsole --nographics --nodisks --pxe") > vinst.add_valid("hostdev", "--host-device usb_device_781_5151_2004453082054CA1BEEE") # Host dev by libvirt name > -vinst.add_valid("hostdev", "--host-device 001.003 --host-device 15:0.1 --host-device 2:15:0.2 --host-device 0:15:0.3 --host-device 0x0781:0x5151 --host-device 1d6b:2") # Many hostdev parsing types > +vinst.add_valid("hostdev", "--host-device 001.003 --host-device 15:0.1 --host-device 2:15:0.2 --host-device 0:15:0.3 --host-device 0x0781:0x5151") # Many hostdev parsing types > +vinst.add_invalid("hostdev", "--host-device 1d6b:2") # multiple USB devices with identical vendorId and productId > vinst.add_invalid("hostdev", "--host-device pci_8086_2850_scsi_host_scsi_host") # Unsupported hostdev type > vinst.add_invalid("hostdev", "--host-device foobarhostdev") # Unknown hostdev > vinst.add_invalid("hostdev", "--host-device 300:400") # Parseable hostdev, but unknown digits > diff --git a/virtinst/NodeDeviceParser.py b/virtinst/NodeDeviceParser.py > index 5ad7465..5a184b3 100644 > --- a/virtinst/NodeDeviceParser.py > +++ b/virtinst/NodeDeviceParser.py > @@ -527,14 +527,24 @@ def devAddressToNodedev(conn, addrstr): > cmp_func, devtype = ret > > # Iterate over node devices and compare > + count = 0 > + nodedev = None > + > nodenames = conn.listDevices(devtype, 0) > for name in nodenames: > - nodedev = _lookupNodeName(conn, name) > - if cmp_func(nodedev): > - return nodedev > - > - raise ValueError(_("Did not find a matching node device for '%s'") % > - addrstr) > + tmpnode = _lookupNodeName(conn, name) > + if cmp_func(tmpnode): > + nodedev = tmpnode > + count += 1 > + > + if count == 1: > + return nodedev > + elif count > 1: > + raise ValueError(_("%s corresponds to multiple node devices") % > + addrstr) > + elif count < 1: > + raise ValueError(_("Did not find a matching node device for '%s'") % > + addrstr) > > > def parse(xml): > Thanks, pushed now. - Cole _______________________________________________ virt-tools-list mailing list virt-tools-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/virt-tools-list