[virt-tools-list] [PATCH] virtinst: throw error when --host-device can't specify unique device
Cole Robinson
crobinso at redhat.com
Thu Apr 25 17:55:39 UTC 2013
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
More information about the virt-tools-list
mailing list