Index: virt-manager-1.0.1/virtManager/addhardware.py =================================================================== --- virt-manager-1.0.1.orig/virtManager/addhardware.py +++ virt-manager-1.0.1/virtManager/addhardware.py @@ -1280,6 +1280,18 @@ class vmmAddHardware(vmmGObjectUI): if controller is not None: logging.debug("Adding controller:\n%s", controller.get_xml_config()) + + # If vm is active, Try to hotplug the device and modify persistent + # config in one go + if self.vm.is_active(): + try: + self.vm.attach_device_flags(self._dev, 3) + return (False, None) + except Exception, e: + logging.debug("Could not hotplug device and modify persistent " + "config at the same time: %s" % str(e)) + logging.debug("Trying the operations seperately ...") + # Hotplug device attach_err = False try: Index: virt-manager-1.0.1/virtManager/details.py =================================================================== --- virt-manager-1.0.1.orig/virtManager/details.py +++ virt-manager-1.0.1/virtManager/details.py @@ -2281,6 +2281,17 @@ class vmmDetails(vmmGObjectUI): text1=(_("Are you sure you want to remove this device?"))): return + # If vm is running, try to hot remove the device and modify + # persistent config in one go + if self.vm.is_active(): + try: + self.vm.detach_device_flags(dev_type, dev_id_info, 3) + return + except Exception, e: + logging.debug("Could not hot remove device and modify " + "persistent config at the same time: %s" % str(e)) + logging.debug("Trying the operations seperately ...") + # Define the change try: self.vm.remove_device(devobj) Index: virt-manager-1.0.1/virtManager/domain.py =================================================================== --- virt-manager-1.0.1.orig/virtManager/domain.py +++ virt-manager-1.0.1/virtManager/domain.py @@ -928,6 +928,10 @@ class vmmDomain(vmmLibvirtObject): devxml = devobj.get_xml_config() self._backend.attachDevice(devxml) + def attach_device_flags(self, devobj, flags): + xml = devobj.get_xml_config() + self._backend.attachDeviceFlags(xml, flags) + def detach_device(self, devobj): """ Hotunplug device from running guest @@ -946,6 +950,10 @@ class vmmDomain(vmmLibvirtObject): logging.debug("Calling update_device with xml=\n%s", xml) self._backend.updateDeviceFlags(xml, flags) + def detach_device_flags(self, devtype, dev_id_info, flags): + xml = self._get_device_xml(devtype, dev_id_info) + self._backend.detachDeviceFlags(xml, flags) + def hotplug(self, vcpus=_SENTINEL, memory=_SENTINEL, maxmem=_SENTINEL, description=_SENTINEL, title=_SENTINEL, storage_path=_SENTINEL, device=_SENTINEL):