090c090cFolks,

A USB device (not necessarily a mass/Flash drive) needs to be connected to one of the VMs (an openstack instance).

Openstack installed with kolla-ansible{Latest version/ Also tested on Zed} ALL IN ONE Deployments on ubuntu server 22.04 ( Core i9 12900K).

I found the [nova-libvirt] container which contains virsh and is able to edit it or use custom config for VMs.

I've gone through lots of the docs, to name a few:
https://libvirt.org/formatdomain.html
https://wiki.openstack.org/wiki/Nova/USB_device_hot_cold_plug
https://wiki.openstack.org/wiki/Nova/proposal_about_usb_passthrough
https://documentation.suse.com/sles/15-SP1/html/SLES-all/cha-libvirt-config-virsh.html
https://wiki.openstack.org/wiki/Nova/USB_device_hot_cold_plug
https://docs.nxp.com/bundle/GUID-487B2E69-BB19-42CB-AC38-7EF18C0FE3AE/page/GUID-A658B311-CE08-4496-9491-1F00687EC4AE.html

but none of them worked for me!!

To reproduce:

Cold-Plug :
$ lsusb  (on host)
Bus 001 Device 014: ID 090c:1000 Silicon Motion >>>> Note Device number changed every time I disconnect the device. So it might be different in the changed attempt shown below)

$ docker exec -it nova_libvirt /bin/bash
%Turn the Desired VM off
# virsh list --all
 Id   Name                State
---------------------------------------------
 2    instance-00000002   running
19   instance-00000008   running
  -    instance-0000000a   shut off
# virsh edit instance-0000000a
                    Add the changes [1][2][3][4],... ( many efforts have been done but few samples of them are)
[1]: under <devices> added
<hostdev mode='subsystem' type='usb'>
  <source>
    <vendor id='0x090c'/>
    <product id='0x1000'/>
  </source>
</hostdev>
[2]:under <devices> added
  <controller type='usb' index='0'/>
  <hostdev mode='subsystem' type='usb'>
    <source>
      <vendor id='0x090c'/>
      <product id='0x1000'/>
    </source>
  </hostdev>
[3]: under <devices> added
<hostdev mode='subsystem' type='usb' managed='yes'>
  <source>
    <vendor id='0x090c'/>
    <product id='0x1000'/>
  </source>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
</hostdev>
[4]: under <devices> added
<controller type='usb' model='nec-xhci' index='0'/>
  <hostdev mode='subsystem' type='usb' managed='yes'>
    <source>
      <vendor id='0x090c'/>
      <product id='0x1000'/>
    </source>
    <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
  </hostdev>
[5]:
<controller type='usb' index='0'>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
</controller>
<hostdev mode='subsystem' type='usb' managed='yes'>
  <source>
    <vendor id='0x090c'/>
    <product id='0x1000'/>
  </source>
  <address type='usb' bus='1' port='2'/>
  <controller type='usb' index='0'/>
</hostdev>

%Start the VM
expected behavior:
          when login to the VM, lsusb or df -h shows the USB
what happened:
          it wont show the USB from the VM

OR virsh dumpxml instance-0000000a > instance-0000000a.xml
and then change the configs as above and then 
virsh attach-device instance-0000000a --file /path/to/updated-instance-0000000a.xml --config

Hot-Plug :
$ lsusb  (on host)
Bus 001 Device 014: ID 090c:1000 Silicon Motion >>>> Note Device number changed every time I disconnect the device. So it might be different in the changed attempt shown below)

$ docker exec -it nova_libvirt /bin/bash
# virsh list --all
 Id   Name                State
---------------------------------------------
 2    instance-00000002   running
19   instance-00000008   running
20   instance-0000000a   running


#nano USB.xml
%add changes explained in [1][2][3][4],...
$ virsh attach-device  instance-0000000a   /path/to/USB.xml/file

expected behavior:
          lsusb or df -h shows the USB
what happened:
          it wont show the USB from the VM


Can you please guide me through this? Any recommendation would be much appreciated!
Any custom changes comes to your mind ( Reply it) would be solution for this problem /;

Thanks
Best regards