
Cole Robinson wrote:
On 11/20/2009 01:39 PM, Jim Fehlig wrote:
Daniel Veillard wrote:
On Mon, Nov 16, 2009 at 04:06:41PM -0700, Jim Fehlig wrote:
virDomain{Attach,Detach}Device is only permitted on active domains. Explicitly state this restriction in the API documentation.
Well, actually I'm not sure it's true. For exemple the XML xen driver has an implementation for inactive Xen domains, and if I look at the VirtualBox driver it seems to take care of domains which are not currently running (or paused).
So what do folks prefer? Allow the individual drivers to restrict attach/detach device or enforce restriction in the front-end? IMO, it should be delegated to the individual drivers, with a comment in the API description that some hypervisors may not support this operation on inactive domains. Why restrict a hypervisor's management functionality in the libvirt front-end?
Because it introduces hypervisor dependent API differences that aren't programmatically discoverable.
They are discoverable if you consider receiving a "not supported" error after making the call :-). But yes, it would be nice if apps knew these capabilities up front to enable/disable widgets and such. Perhaps libvirt will need a "hypervisor management service" capabilities element some day.
This makes life difficult for apps that want to support multiple hypervisors (like virt-manager, where we have already bumped up against this inconsistency between xen and qemu drivers). In this case, if xen allows offline device addition but qemu does not, virt-manager will have to use the safe subset and never attempt attach device for an offline VM, or hardcode HV differences into the app.
Yep, understood.
For that reason, I think we should either always allow offline AttachDevice or never allow it. And of the two, I highly favor the latter, since the alternative would force every driver to reimplement something that can easily be accomplished with DefineXML (unless the HV supports it natively, which in Xen's case sounds like it isn't handled consistently for all device types).
Maybe a way forward here is to clarify the virsh commands: we can alter attach/detach-device to manually edit the VM xml for inactive VMs (but also attempt hotplug if the VM is running), and introduce new commands hotplug-device and hotunplug-device which map straight through to the API. This way virsh won't regress, and indeed will improve: only straight API users will see a change in behavior.
Ok, IIUC you prefer to never allow offline {Attach,Detach}Device in the API. Do others concur? If so I can spin a patch that - Improves virDomain(Attach,Detach}Device documentation - Disallows these operations in libvirt front-end as DV suggested - Improves virsh app as Cole suggested Thanks, Jim