On Thu, May 25, 2017 at 10:26:47AM -0700, Peter wrote:
As far as I know libvirt doesn't currently have a remoteable API. It does have a daemon that communicates with clients via a XDR RPC. (https://libvirt.org/internals/rpc.html) However from what I'm hearing the RPC is considered an internal implementation and shouldn't be used by external applications. Is that still the case? Is there any chance of getting talking the daemon directly using the XDR standard for a subset of methods blessed as part of the externally supported API?
That's correct - the XDR protocol is a private implementation detail between the libvirtd daemon and libvirt client library. The /only/ supported way of using libvirt is via the client library API, or one of the many language bindings written on top of it. A number of the libvirt virtualization drivers are implemented entirely in the client library and don't involve libvirtd at all.
An alternative is to implement a standards based remotable API, using something like dbus or REST, that can be used by external applications. I imagine that this would be at a bit of a higher level than the current RPC and contain at least some of the logic around the actions it performs rather than being a direct passthrough to the daemon.
Of course that is a pretty big undertaking and would, in my opinion, only be worth it if there is broader interest in the community and use cases beyond what cockpit would like to.
I imagine any DBus API would be a pretty straightforward 1-1 mapping from the C api to DBus methods & signals. For a REST API I think you would quite possibly want to build something higher level which will involve more design thought.
Regards, Daniel