提交 5b407133 编写于 作者: O Osier Yang

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.
上级 5edfcaae
...@@ -1906,7 +1906,7 @@ cmdDomblkinfo(vshControl *ctl, const vshCmd *cmd) ...@@ -1906,7 +1906,7 @@ cmdDomblkinfo(vshControl *ctl, const vshCmd *cmd)
*/ */
static const vshCmdInfo info_domblklist[] = { static const vshCmdInfo info_domblklist[] = {
{"help", N_("list all domain blocks")}, {"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} {NULL, NULL}
}; };
...@@ -1914,6 +1914,8 @@ static const vshCmdOptDef opts_domblklist[] = { ...@@ -1914,6 +1914,8 @@ static const vshCmdOptDef opts_domblklist[] = {
{"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")},
{"inactive", VSH_OT_BOOL, 0, {"inactive", VSH_OT_BOOL, 0,
N_("get inactive rather than running configuration")}, N_("get inactive rather than running configuration")},
{"details", VSH_OT_BOOL, 0,
N_("additionally display the type and device value")},
{NULL, 0, 0, NULL} {NULL, 0, 0, NULL}
}; };
...@@ -1929,10 +1931,13 @@ cmdDomblklist(vshControl *ctl, const vshCmd *cmd) ...@@ -1929,10 +1931,13 @@ cmdDomblklist(vshControl *ctl, const vshCmd *cmd)
int ndisks; int ndisks;
xmlNodePtr *disks = NULL; xmlNodePtr *disks = NULL;
int i; int i;
bool details = false;
if (vshCommandOptBool(cmd, "inactive")) if (vshCommandOptBool(cmd, "inactive"))
flags |= VIR_DOMAIN_XML_INACTIVE; flags |= VIR_DOMAIN_XML_INACTIVE;
details = vshCommandOptBool(cmd, "details");
if (!vshConnectionUsability(ctl, ctl->conn)) if (!vshConnectionUsability(ctl, ctl->conn))
return false; return false;
...@@ -1951,14 +1956,27 @@ cmdDomblklist(vshControl *ctl, const vshCmd *cmd) ...@@ -1951,14 +1956,27 @@ cmdDomblklist(vshControl *ctl, const vshCmd *cmd)
if (ndisks < 0) if (ndisks < 0)
goto cleanup; 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"); vshPrint(ctl, "------------------------------------------------\n");
for (i = 0; i < ndisks; i++) { for (i = 0; i < ndisks; i++) {
char *type;
char *device;
char *target; char *target;
char *source; char *source;
ctxt->node = disks[i]; ctxt->node = disks[i];
if (details) {
type = virXPathString("string(./@type)", ctxt);
device = virXPathString("string(./@device)", ctxt);
}
target = virXPathString("string(./target/@dev)", ctxt); target = virXPathString("string(./target/@dev)", ctxt);
if (!target) { if (!target) {
vshError(ctl, "unable to query block list"); vshError(ctl, "unable to query block list");
...@@ -1968,7 +1986,15 @@ cmdDomblklist(vshControl *ctl, const vshCmd *cmd) ...@@ -1968,7 +1986,15 @@ cmdDomblklist(vshControl *ctl, const vshCmd *cmd)
"|./source/@dev" "|./source/@dev"
"|./source/@dir" "|./source/@dir"
"|./source/@name)", ctxt); "|./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(target);
VIR_FREE(source); VIR_FREE(source);
} }
......
...@@ -512,15 +512,16 @@ to a unique target name (<target dev='name'/>) or source file (<source ...@@ -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 file='name'/>) for one of the disk devices attached to I<domain> (see
also B<domblklist> for listing these names). 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 Print a table showing the brief information of all block devices
I<domain>, as well as the path to the source of each device. If associated with I<domain>. If I<--inactive> is specified, query the
I<--inactive> is specified, query the block devices that will be used block devices that will be used on the next boot, rather than those
on the next boot, rather than those currently in use by a running currently in use by a running domain. If I<--details> is specified,
domain. Other contexts that require a block device name (such as disk type and device value will also be printed. Other contexts
I<domblkinfo> or I<snapshot-create> for disk snapshots) will accept that require a block device name (such as I<domblkinfo> or
either target or unique source names printed by this command. 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>] =item B<domiflist> I<domain> [I<--inactive>]
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册