[libvirt] [PATCH] virsh: Add domdisplay command for VNC and SPICE

Daniel P. Berrange berrange at redhat.com
Fri Jun 22 11:32:29 UTC 2012


On Fri, Jun 22, 2012 at 01:18:49PM +0200, Michal Privoznik wrote:
> On 22.06.2012 12:07, Daniel P. Berrange wrote:
> > On Fri, Jun 22, 2012 at 10:19:06AM +0200, Michal Privoznik wrote:
> >> On 22.06.2012 07:38, Doug Goldstein wrote:
> >>> On Fri, Jun 22, 2012 at 12:30 AM, Doug Goldstein <cardoe at cardoe.com> wrote:
> >>>> Add a new 'domdisplay' command that provides a URI for both VNC and
> >>>> SPICE connections. Presently the 'vncdisplay' command provides you with
> >>>> the port info that QEMU is listening on but there is no counterpart for
> >>>> SPICE. Additionally this provides you with the bind address as specified
> >>>> in the XML, which the existing 'vncdisplay' lacks.
> >>>>
> >>>
> >>> I also toyed with the idea of adding this instead as an API call to
> >>> libvirt called something like virDomainDisplay() and allowing other
> >>> backends to advertise their URIs to the domain's display. I believe
> >>> VMWare has VMWare View which I would assume would have a method by
> >>> which to call it and provide the machine to connect to as command line
> >>> arguments. Then virsh would simply hook the 'domdisplay' command to
> >>> virDomainDisplay() and spit out that output. It would probably be able
> >>> to be used by virt-manager and vdsm as well.
> >>>
> >>> Just a thought. Let me know.
> >>>
> >>
> >> Yeah, that's what I was thinking of when reading your patch. I think we
> >> can add a new API that would return all info needed to connect to a
> >> display. I think it could look like this:
> >>
> >> char * virDomainGetGraphicsInfo(virDomainPtr dom,
> >>                                 unsigned int flags);
> >>
> >> It would return a XML doc containing all interesting knobs:
> >>
> >> <graphics type='spice' port='5904'>
> >>   <listen type='address' address='1.2.3.4'/>
> >>   <channel name='main' mode='secure'/>
> >>   <channel name='record' mode='insecure'/>
> >>   <image compression='auto_glz'/>
> >>   <streaming mode='filter'/>
> >>   <clipboard copypaste='no'/>
> >>   <mouse mode='client'/>
> >> </graphics>
> >>
> >> yeah it's basically copy&paste-d from domain's XML, but there is huge
> >> difference. Currently vncdisplay command (and from quick look at your
> > 
> > I don't think we should be inventing a new API that just replicates
> > the data from the main XML.
> > 
> >> patch domdisplay too) don't show correct listen address if none set in
> >> domain's XML. Because in that case we take the one from qemu.conf.
> >> However, this cannot be stored into domain's XML as it would discard all
> >> future changes to vnc_listen|spice_listen in qemu.conf. For instance,
> >> user doesn't set any listenAddress in domain's XML but set
> >> vnc_listen=1.2.3.4; Then we want vncdisplay (and subsequently
> >> domdisplay) to return 1.2.3.4:<port>
> > 
> > It is possible to distinguish an original 'listen' addr from
> > an auto-added already. The auto-added one will only appear
> > in the live XML, so apps can see the original value via the
> > inactive XML.
> > 
> 
> No it's not. When building qemu cmd line:
>     listenAddr = virDomainGraphicsListenGetAddress(def->graphics[0], 0);
> ...
>     if (!listenAddr)
>         listenAddr = driver->vncListen;
> 
>     escapeAddr = strchr(listenAddr, ':') != NULL;
>     if (escapeAddr)
>         virBufferAsprintf(&opt, "[%s]", listenAddr);
>     else
>         virBufferAdd(&opt, listenAddr, -1);
> 
> And when formatting (even live) domain XML:
>     listenAddr = virDomainGraphicsListenGetAddress(def, i);
> ...
>     if (listenAddr)
>         virBufferAsprintf(buf, " listen='%s'", listenAddr);
> 
> 
> What might cause confusion are migration cookies where the listen
> address is presented every time. That's because the same command
> sequence as for building cmd line is used.
> 
> But okay, if we don't want to introduce a new API we must find a way of
> inserting an attribute just into live XML not inactive (=make info
> temporary). I guess I believe how to achieve this.

We already do this for the port number, so I don't see why the
listen addr should be any harder


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