]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
virsh: Add mountpoint completion to domfsfreeze/domfsthaw command
authorLin Ma <lma@suse.com>
Thu, 22 Apr 2021 10:38:18 +0000 (18:38 +0800)
committerMichal Privoznik <mprivozn@redhat.com>
Thu, 22 Apr 2021 11:46:44 +0000 (13:46 +0200)
Signed-off-by: Lin Ma <lma@suse.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
tools/virsh-completer-domain.c
tools/virsh-completer-domain.h
tools/virsh-domain.c

index 99b36a2f9f55dec2f705467589dedb18263064f2..0d087278ac4d9d755af87b28e5cbd9875eb99040 100644 (file)
@@ -872,3 +872,44 @@ virshKeycodeNameCompleter(vshControl *ctl,
 
     return g_steal_pointer(&tmp);
 }
+
+
+char **
+virshDomainFSMountpointsCompleter(vshControl *ctl,
+                                  const vshCmd *cmd,
+                                  unsigned int flags)
+{
+    g_auto(GStrv) tmp = NULL;
+    virDomainPtr dom = NULL;
+    int rc = -1;
+    size_t i;
+    virDomainFSInfoPtr *info = NULL;
+    size_t ninfos = 0;
+    char **ret = NULL;
+
+    virCheckFlags(0, NULL);
+
+    if (!(dom = virshCommandOptDomain(ctl, cmd, NULL)))
+        return NULL;
+
+    rc = virDomainGetFSInfo(dom, &info, 0);
+    if (rc <= 0) {
+        goto cleanup;
+    }
+    ninfos = rc;
+
+    tmp = g_new0(char *, ninfos + 1);
+    for (i = 0; i < ninfos; i++) {
+        tmp[i] = g_strdup(info[i]->mountpoint);
+    }
+    ret = g_steal_pointer(&tmp);
+
+ cleanup:
+    if (info) {
+        for (i = 0; i < ninfos; i++)
+            virDomainFSInfoFree(info[i]);
+        VIR_FREE(info);
+    }
+    virshDomainFree(dom);
+    return ret;
+}
index 04a3705ff9a86c77d0c4ceccedd332921d92ce5a..ef242d0c688f868aa1c67ac5ed0d8e909213d6f0 100644 (file)
@@ -118,3 +118,7 @@ char ** virshCodesetNameCompleter(vshControl *ctl,
 char ** virshKeycodeNameCompleter(vshControl *ctl,
                                   const vshCmd *cmd,
                                   unsigned int flags);
+
+char ** virshDomainFSMountpointsCompleter(vshControl *ctl,
+                                          const vshCmd *cmd,
+                                          unsigned int flags);
index fac590fbc6a21877bcc93eba3da2341793d87e0c..0825f82522aae968b9cf7993d7fe71df8148af6f 100644 (file)
@@ -13872,6 +13872,7 @@ static const vshCmdOptDef opts_domfstrim[] = {
     },
     {.name = "mountpoint",
      .type = VSH_OT_STRING,
+     .completer = virshDomainFSMountpointsCompleter,
      .help = N_("which mount point to trim")
     },
     {.name = NULL}
@@ -13920,6 +13921,7 @@ static const vshCmdOptDef opts_domfsfreeze[] = {
     VIRSH_COMMON_OPT_DOMAIN_FULL(VIR_CONNECT_LIST_DOMAINS_ACTIVE),
     {.name = "mountpoint",
      .type = VSH_OT_ARGV,
+     .completer = virshDomainFSMountpointsCompleter,
      .help = N_("mountpoint path to be frozen")
     },
     {.name = NULL}
@@ -13969,6 +13971,7 @@ static const vshCmdOptDef opts_domfsthaw[] = {
     VIRSH_COMMON_OPT_DOMAIN_FULL(VIR_CONNECT_LIST_DOMAINS_ACTIVE),
     {.name = "mountpoint",
      .type = VSH_OT_ARGV,
+     .completer = virshDomainFSMountpointsCompleter,
      .help = N_("mountpoint path to be thawed")
     },
     {.name = NULL}