From 599e966efb123cd036843d701bfda606ed660a90 Mon Sep 17 00:00:00 2001 From: Chen Hanxiao Date: Sun, 9 Oct 2016 18:34:22 +0800 Subject: [PATCH] virsh domdisplay: introduce '--all' for showing all possible graphical displays 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 Reviewed-by: Michal Privoznik --- tools/virsh-domain.c | 17 +++++++++++++++-- tools/virsh.pod | 6 ++++-- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c index 2ce0a060a4..b19f4993b1 100644 --- a/tools/virsh-domain.c +++ b/tools/virsh-domain.c @@ -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) { diff --git a/tools/virsh.pod b/tools/virsh.pod index 85992debc9..f38aacf31d 100644 --- a/tools/virsh.pod +++ b/tools/virsh.pod @@ -1223,13 +1223,15 @@ I is a scaled integer (see B above) which defaults to KiB "B" to get bytes (note that for historical reasons, this differs from B which defaults to bytes without a suffix). -=item B I [I<--include-password>] [[I<--type>] B] +=item B I [I<--include-password>] +[[I<--type>] B] [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 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 I