]> xenbits.xensource.com Git - libvirt.git/commitdiff
virsh domdisplay: introduce '--all' for showing all possible graphical displays
authorChen Hanxiao <chenhanxiao@gmail.com>
Sun, 9 Oct 2016 10:34:22 +0000 (18:34 +0800)
committerMichal Privoznik <mprivozn@redhat.com>
Mon, 10 Oct 2016 02:21:38 +0000 (04:21 +0200)
For one VM, it could had more than one graphical display.
Such as we coud add both vnc and spice display to a VM.

This patch introduces '--all' for showing all
possible graphical display of a active VM.

Signed-off-by: Chen Hanxiao <chenhanxiao@gmail.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
tools/virsh-domain.c
tools/virsh.pod

index 2ce0a060a4b65013662724b044dedbb93817dbf5..b19f4993b173197dcf3e4b8aa3cc71aae71ecf7a 100644 (file)
@@ -10655,6 +10655,10 @@ static const vshCmdOptDef opts_domdisplay[] = {
      .help = N_("select particular graphical display "
                 "(e.g. \"vnc\", \"spice\", \"rdp\")")
     },
+    {.name = "all",
+     .type = VSH_OT_BOOL,
+     .help = N_("show all possible graphical displays")
+    },
     {.name = NULL}
 };
 
@@ -10678,6 +10682,7 @@ cmdDomDisplay(vshControl *ctl, const vshCmd *cmd)
     int tmp;
     int flags = 0;
     bool params = false;
+    bool all = vshCommandOptBool(cmd, "all");
     const char *xpath_fmt = "string(/domain/devices/graphics[@type='%s']/%s)";
     virSocketAddr addr;
 
@@ -10704,10 +10709,11 @@ cmdDomDisplay(vshControl *ctl, const vshCmd *cmd)
     /* Attempt to grab our display info */
     for (iter = 0; scheme[iter] != NULL; iter++) {
         /* Particular scheme requested */
-        if (type && STRNEQ(type, scheme[iter]))
+        if (!all && type && STRNEQ(type, scheme[iter]))
             continue;
 
         /* Create our XPATH lookup for the current display's port */
+        VIR_FREE(xpath);
         if (virAsprintf(&xpath, xpath_fmt, scheme[iter], "@port") < 0)
             goto cleanup;
 
@@ -10740,6 +10746,7 @@ cmdDomDisplay(vshControl *ctl, const vshCmd *cmd)
 
         /* Attempt to get the listening addr if set for the current
          * graphics scheme */
+        VIR_FREE(listen_addr);
         listen_addr = virXPathString(xpath, ctxt);
         VIR_FREE(xpath);
 
@@ -10795,6 +10802,7 @@ cmdDomDisplay(vshControl *ctl, const vshCmd *cmd)
             goto cleanup;
 
         /* Attempt to get the password */
+        VIR_FREE(passwd);
         passwd = virXPathString(xpath, ctxt);
         VIR_FREE(xpath);
 
@@ -10847,12 +10855,17 @@ cmdDomDisplay(vshControl *ctl, const vshCmd *cmd)
         }
 
         /* Print out our full URI */
+        VIR_FREE(output);
         output = virBufferContentAndReset(&buf);
         vshPrint(ctl, "%s", output);
 
         /* We got what we came for so return successfully */
         ret = true;
-        break;
+        if (!all) {
+            break;
+        } else {
+            vshPrint(ctl, "\n");
+        }
     }
 
     if (!ret) {
index 85992debc9f693797d90c7f44239caee6355c240..f38aacf31d078e426092e62ff766a90c2df0c451 100644 (file)
@@ -1223,13 +1223,15 @@ I<size> is a scaled integer (see B<NOTES> above) which defaults to KiB
 "B" to get bytes (note that for historical reasons, this differs from
 B<vol-resize> which defaults to bytes without a suffix).
 
-=item B<domdisplay> I<domain> [I<--include-password>] [[I<--type>] B<type>]
+=item B<domdisplay> I<domain> [I<--include-password>]
+[[I<--type>] B<type>] [I<--all>]
 
 Output a URI which can be used to connect to the graphical display of the
 domain via VNC, SPICE or RDP.  The particular graphical display type can
 be selected using the B<type> parameter (e.g. "vnc", "spice", "rdp").  If
 I<--include-password> is specified, the SPICE channel password will be
-included in the URI.
+included in the URI. If I<--all> is specified, then all show all possible
+graphical displays, for a VM could have more than one graphical displays.
 
 =item B<domfsinfo> I<domain>