[libvirt] RFC: Admin interface for connection monitoring

Daniel P. Berrange berrange at redhat.com
Mon Feb 4 11:22:55 UTC 2013


On Mon, Feb 04, 2013 at 11:52:41AM +0100, Martin Kletzander wrote:
> Connection to this interface will be:
> 
>  - available even when no normal/priority workers are available,
> 
>  - distinguished (or completely separated) from other daemon
>    connections,
> 
>  - (should be) more restricted than other connections.
> 
> Having the connection available with all the worker threads being
> blocked/deadlocked creates the possibility of for example listing the
> connections even when all APIs block.  Such manipulations mustn't be
> possible over the standard connections and that's why the connections
> should be distinguished.  The connection restriction is hard to check,
> but the permissions for the socket should be less or equal to the rw
> socket with having no authentication only when rw socket has no
> authentication.

Completely agreed - the administrative inteface must always
be usable, regardless of anything a regular client might have
done.

> My idea is following:
> 
>  - new 'admin_protocol.x' with specification of new program,

Agreed, we want this completely independant of existing RPC programs.

>  - default connection limitation to this interface to only root-owned
>    socket with 700 (authentication optional, see above), so only root on
>    the host can utilize it,

Agreed, making this kind of thing remote accessible is just asking
for trouble.

>  - configurable number of admin workers, but with 1 as a default,

Yep, makes sense.

> 
>  - splitting usable parts of virsh and reusing them to create
>    virsh-admin binary.

Or to following our more usual naming convention

virt-admin

> More controversial ideas I'd like to hear somebody else's opinion (even
> more than for the other things):
> 
>  - create a new separate library (libvirt-admin.so) to be used in the
>    client, this library will have it's own virAdminConnect{,Auth}Open(),
>    probably without an URI parameter (or with, but disabled for now, in
>    case we want to enable remote connections later)

Yes, we want this library to be completely separate because we don't
want to make guarantees about long term ABI/API stability for this.
We should still use a URI format to connect, but this should be a
completely separate URI from the "normal" URIs, not least because a
admin connection is completely independant of any hypervisor.

Indeed this library should not even need to link to libvirt.so - it
can be completely standalone, because (unlike libvirt-qemu.so) these
APIs are completely separate from all existing APIs.

>  - it is IMHO pointless to add a driver type for this, but it should
>    definitely be configurable at compile time as well as in config
>    (admin_workers = 0, maybe),

I don't think there's any compelling reason to disable this
separately from disabling of libvirtd itself. ie if you have
libvirtd built, then you should always have the admin service
and shell built too.

>  - keep the connection handling on the current code and instead of
>    duplicating much of it (so there will be a new service, much like the
>    read-only socket, but for admin API only),

Yep, a new socket is inherantly required since we need separate
auth requirements

>  - create a new pool of workers just for admin connections (similarly to
>    the priority workers pool), with the dispatching being recognized by
>    the protocol it is created in (remote, qemu, lxc protocols will go to
>    normal/priority workers, whether admin protocol will be dispatched to
>    the admin workers) and of course impossible from other connections
>    than the admin one, which leads me to the next point;

Ok.

>  - we can either add next flag for admin connection (similarly to the
>    readonly one) or make it future-friendly and change the readonly bool
>    into a virConnectionType enum (for example).

I'm not sure what you're refering to here, but opening admin connections
should be completely separate from existing connection opening APIs.

> I must admit, I'm probably doing something wrong or we have old
> documentation.  Commands like 'make -C src rpcgen' don't work and I
> don't understand why admin_protocol-structs isn't automatically
> generated, but I've made it work for now.

You have to create the admin_protocol-structs file yourself - that is
the master ABI definition. The makefile creates a admin_protocol-struct
(notice lack of a trailing 's'), and compares it to the file you wrote

Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|




More information about the libvir-list mailing list