From 5b4071333b8d5440e1297101fbaa5ba7616fc2d0 Mon Sep 17 00:00:00 2001 From: Osier Yang Date: Fri, 13 Jan 2012 18:03:12 +0800 Subject: [PATCH] virsh: Two new fields for command domblklist Disk "type" and "device" are generally interesting stuff the user may want to known, too. To not break any scripts which parsed the output field, a new option "--details" is introduced to output the two introduced fields. --- tools/virsh.c | 32 +++++++++++++++++++++++++++++--- tools/virsh.pod | 17 +++++++++-------- 2 files changed, 38 insertions(+), 11 deletions(-) diff --git a/tools/virsh.c b/tools/virsh.c index f436cf5e50..f2235930bd 100644 --- a/tools/virsh.c +++ b/tools/virsh.c @@ -1906,7 +1906,7 @@ cmdDomblkinfo(vshControl *ctl, const vshCmd *cmd) */ static const vshCmdInfo info_domblklist[] = { {"help", N_("list all domain blocks")}, - {"desc", N_("Get the names of block devices for a domain.")}, + {"desc", N_("Get the summary of block devices for a domain.")}, {NULL, NULL} }; @@ -1914,6 +1914,8 @@ static const vshCmdOptDef opts_domblklist[] = { {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, {"inactive", VSH_OT_BOOL, 0, N_("get inactive rather than running configuration")}, + {"details", VSH_OT_BOOL, 0, + N_("additionally display the type and device value")}, {NULL, 0, 0, NULL} }; @@ -1929,10 +1931,13 @@ cmdDomblklist(vshControl *ctl, const vshCmd *cmd) int ndisks; xmlNodePtr *disks = NULL; int i; + bool details = false; if (vshCommandOptBool(cmd, "inactive")) flags |= VIR_DOMAIN_XML_INACTIVE; + details = vshCommandOptBool(cmd, "details"); + if (!vshConnectionUsability(ctl, ctl->conn)) return false; @@ -1951,14 +1956,27 @@ cmdDomblklist(vshControl *ctl, const vshCmd *cmd) if (ndisks < 0) goto cleanup; - vshPrint(ctl, "%-10s %s\n", _("Target"), _("Source")); + if (details) + vshPrint(ctl, "%-10s %-10s %-10s %s\n", _("Type"), + _("Device"), _("Target"), _("Source")); + else + vshPrint(ctl, "%-10s %s\n", _("Target"), _("Source")); + vshPrint(ctl, "------------------------------------------------\n"); for (i = 0; i < ndisks; i++) { + char *type; + char *device; char *target; char *source; ctxt->node = disks[i]; + + if (details) { + type = virXPathString("string(./@type)", ctxt); + device = virXPathString("string(./@device)", ctxt); + } + target = virXPathString("string(./target/@dev)", ctxt); if (!target) { vshError(ctl, "unable to query block list"); @@ -1968,7 +1986,15 @@ cmdDomblklist(vshControl *ctl, const vshCmd *cmd) "|./source/@dev" "|./source/@dir" "|./source/@name)", ctxt); - vshPrint(ctl, "%-10s %s\n", target, source ? source : "-"); + if (details) { + vshPrint(ctl, "%-10s %-10s %-10s %s\n", type, device, + target, source ? source : "-"); + VIR_FREE(type); + VIR_FREE(device); + } else { + vshPrint(ctl, "%-10s %s\n", target, source ? source : "-"); + } + VIR_FREE(target); VIR_FREE(source); } diff --git a/tools/virsh.pod b/tools/virsh.pod index d9ca46c048..c88395bfa1 100644 --- a/tools/virsh.pod +++ b/tools/virsh.pod @@ -512,15 +512,16 @@ to a unique target name () or source file () for one of the disk devices attached to I (see also B for listing these names). -=item B I [I<--inactive>] +=item B I [I<--inactive>] [I<--details>] -Print a table showing the names of all block devices associated with -I, as well as the path to the source of each device. If -I<--inactive> is specified, query the block devices that will be used -on the next boot, rather than those currently in use by a running -domain. Other contexts that require a block device name (such as -I or I for disk snapshots) will accept -either target or unique source names printed by this command. +Print a table showing the brief information of all block devices +associated with I. If I<--inactive> is specified, query the +block devices that will be used on the next boot, rather than those +currently in use by a running domain. If I<--details> is specified, +disk type and device value will also be printed. Other contexts +that require a block device name (such as I or +I for disk snapshots) will accept either target +or unique source names printed by this command. =item B I [I<--inactive>]