[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[libvirt] [PATCH v2] virsh: Two new fields for command domblklist



Disk "type" and "device" are generally interesting stuffs the
user who wants to known too. To not breaking the scripts which
parses the output field, new options "--details" is introduced
to output the two introduced fields.
---
 tools/virsh.c   |   32 +++++++++++++++++++++++++++++---
 tools/virsh.pod |   19 ++++++++++---------
 2 files changed, 39 insertions(+), 12 deletions(-)

diff --git a/tools/virsh.c b/tools/virsh.c
index 734c55d..6f1acf6 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 d9ca46c..9fd786d 100644
--- a/tools/virsh.pod
+++ b/tools/virsh.pod
@@ -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>]
-
-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.
+=item B<domblklist> I<domain> [I<--inactive>] [I<--details>]
+
+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 be printed additionally. 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>]
 
-- 
1.7.7.3


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]