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.
This commit is contained in:
Osier Yang 2012-01-13 18:03:12 +08:00
parent 5edfcaae6f
commit 5b4071333b
2 changed files with 38 additions and 11 deletions

View File

@ -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);
}

View File

@ -512,15 +512,16 @@ to a unique target name (<target dev='name'/>) or source file (<source
file='name'/>) for one of the disk devices attached to I<domain> (see
also B<domblklist> for listing these names).
=item B<domblklist> I<domain> [I<--inactive>]
=item B<domblklist> I<domain> [I<--inactive>] [I<--details>]
Print a table showing the names of all block devices associated with
I<domain>, 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<domblkinfo> or I<snapshot-create> 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<domain>. 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<domblkinfo> or
I<snapshot-create> for disk snapshots) will accept either target
or unique source names printed by this command.
=item B<domiflist> I<domain> [I<--inactive>]