On 05/13/2013 06:14 AM, Guannan Ren wrote: > This patch introduces 'pre-start' signal and registers > nodedev checking handler to check duplicate USB devices. > If virt-manager can not identify unique usb device any more > before domain startup, it will throw a tip error to tell it > is time to reattach host USB devices to get updated bus/addr info. > --- > virtManager/domain.py | 35 +++++++++++++++++++++++++++++++++++ > 1 file changed, 35 insertions(+) > > diff --git a/virtManager/domain.py b/virtManager/domain.py > index 791f2af..89c226b 100644 > --- a/virtManager/domain.py > +++ b/virtManager/domain.py > @@ -149,6 +149,7 @@ class vmmDomain(vmmLibvirtObject): > "status-changed": (GObject.SignalFlags.RUN_FIRST, None, [int, int]), > "resources-sampled": (GObject.SignalFlags.RUN_FIRST, None, []), > "inspection-changed": (GObject.SignalFlags.RUN_FIRST, None, []), > + "pre-startup": (GObject.SignalFlags.RUN_FIRST, None, [object]), > } > > def __init__(self, conn, backend, uuid): > @@ -252,7 +253,34 @@ class vmmDomain(vmmLibvirtObject): > > self.connect("status-changed", self._update_start_vcpus) > self.connect("config-changed", self._reparse_xml) > + self.connect("pre-startup", self._prestartup_nodedev_check) > > + def _prestartup_nodedev_check(self, src, ret): > + ignore = src > + error = _("These is more than one '%s' device attached to " > + "your host, and we can't determine which one to " > + "use for your guest.\n" > + "To fix this, remove and reattach the USB device " > + "to your guest using the 'Add Hardware' wizard.") > + > + for hostdev in self.get_hostdev_devices(): > + devtype = hostdev.type > + > + if devtype != "usb": > + continue > + > + vendor = hostdev.vendor > + product = hostdev.product > + bus = hostdev.bus > + device = hostdev.device > + > + if vendor and product: > + count = self.conn.get_nodedevs_number("usb_device", > + vendor, > + product) > + if count > 1 and not (bus and device): > + prettyname = "%s %s" % (vendor, product) > + ret.append(error % prettyname) > > ########################### > # Misc API getter methods # > @@ -1171,6 +1199,13 @@ class vmmDomain(vmmLibvirtObject): > if self.get_cloning(): > raise RuntimeError(_("Cannot start guest while cloning " > "operation in progress")) > + > + pre_startup_ret = [] > + self.emit("pre-startup", pre_startup_ret) > + > + for error in pre_startup_ret: > + raise RuntimeError(error) > + > self._backend.create() > self.idle_add(self.force_update_status) > > Thanks Guannan! Pushed now. - Cole _______________________________________________ virt-tools-list mailing list virt-tools-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/virt-tools-list