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

[libvirt] [PATCH] Adds the missing vol-pool command to virsh.



Hi all,

This patch adds a "vol-pool" command to virsh, to round out the conversion functions for vols in virsh.

At the moment, if we start with a volume name and a pool id, we're all good.  We can convert from that pair to either a volume key or volume path.

But, if we're given just a volume key or path we have no good way to look up the storage pool for it.  Kind of makes it a one way association. :/

This patch fixes that, making it possible to work from just having a volume key or path. :)

Regards and best wishes,

Justin Clift

---
 tools/virsh.c |   48 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 48 insertions(+), 0 deletions(-)

diff --git a/tools/virsh.c b/tools/virsh.c
index 1279f41..95aea0f 100644
--- a/tools/virsh.c
+++ b/tools/virsh.c
@@ -5975,6 +5975,53 @@ cmdVolName(vshControl *ctl, const vshCmd *cmd)
 }
 
 
+/*
+ * "vol-pool" command
+ */
+static const vshCmdInfo info_vol_pool[] = {
+    {"help", N_("returns the storage pool for a given volume key or path")},
+    {"desc", ""},
+    {NULL, NULL}
+};
+
+static const vshCmdOptDef opts_vol_pool[] = {
+    {"vol", VSH_OT_DATA, VSH_OFLAG_REQ, N_("volume key or path")},
+    {NULL, 0, 0, NULL}
+};
+
+static int
+cmdVolPool(vshControl *ctl, const vshCmd *cmd)
+{
+    virStoragePoolPtr pool;
+    virStorageVolPtr vol;
+
+    // Check the connection to libvirtd daemon is still working
+    if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
+        return FALSE;
+
+    // Use the supplied string to locate the volume
+    if (!(vol = vshCommandOptVolBy(ctl, cmd, "vol", "pool", NULL,
+                                   VSH_BYUUID))) {
+        return FALSE;
+    }
+
+    // Look up the parent storage pool for the volume
+    pool = virStoragePoolLookupByVolume(vol);
+    if (pool == NULL) {
+        vshError(ctl, "%s", _("failed to get parent pool"));
+        virStorageVolFree(vol);
+        return FALSE;
+    }
+
+    // Return the name of the parent storage pool
+    vshPrint(ctl, "%s\n", virStoragePoolGetName(pool));
+
+    // Cleanup
+    virStorageVolFree(vol);
+    virStoragePoolFree(pool);
+    return TRUE;
+}
+
 
 /*
  * "vol-key" command
@@ -8837,6 +8884,7 @@ static const vshCmdDef commands[] = {
     {"vol-dumpxml", cmdVolDumpXML, opts_vol_dumpxml, info_vol_dumpxml},
     {"vol-info", cmdVolInfo, opts_vol_info, info_vol_info},
     {"vol-list", cmdVolList, opts_vol_list, info_vol_list},
+    {"vol-pool", cmdVolPool, opts_vol_pool, info_vol_pool},
     {"vol-path", cmdVolPath, opts_vol_path, info_vol_path},
     {"vol-name", cmdVolName, opts_vol_name, info_vol_name},
     {"vol-key", cmdVolKey, opts_vol_key, info_vol_key},
-- 
1.7.0.1


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