]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
virt-admin: Introduce vshAdmServerCompleter
authorMichal Privoznik <mprivozn@redhat.com>
Tue, 7 Nov 2017 08:33:06 +0000 (09:33 +0100)
committerMichal Privoznik <mprivozn@redhat.com>
Thu, 11 Jan 2018 17:53:04 +0000 (18:53 +0100)
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
tools/Makefile.am
tools/virt-admin-completer.c [new file with mode: 0644]
tools/virt-admin-completer.h [new file with mode: 0644]
tools/virt-admin.c

index 7466d828247ae12161b8eb62ba8051a3da1f5ed3..48125f516365a94b7deb1fa19904d5e9e6a3b23c 100644 (file)
@@ -258,6 +258,15 @@ virt_admin_SOURCES = \
                virt-admin.c virt-admin.h \
                $(NULL)
 
+VIRT_ADMIN_COMPLETER = \
+               virt-admin-completer.c virt-admin-completer.h
+
+if WITH_READLINE
+virt_admin_SOURCES += $(VIRT_ADMIN_COMPLETER)
+else ! WITH_READLINE
+EXTRA_DIST += $(VIRT_ADMIN_COMPLETER)
+endif ! WITH_READLINE
+
 virt_admin_LDFLAGS = \
                $(AM_LDFLAGS) \
                $(COVERAGE_LDFLAGS) \
diff --git a/tools/virt-admin-completer.c b/tools/virt-admin-completer.c
new file mode 100644 (file)
index 0000000..2cd471f
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+ * virt-admin-completer.c: virt-admin completer callbacks
+ *
+ * Copyright (C) 2017 Red Hat, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library.  If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ *  Michal Privoznik <mprivozn@redhat.com>
+ *
+ */
+
+#include <config.h>
+
+#include "virt-admin-completer.h"
+#include "internal.h"
+#include "virt-admin.h"
+#include "viralloc.h"
+#include "virstring.h"
+
+
+char **
+vshAdmServerCompleter(vshControl *ctl,
+                      const vshCmd *cmd ATTRIBUTE_UNUSED,
+                      unsigned int flags)
+{
+    vshAdmControlPtr priv = ctl->privData;
+    virAdmServerPtr *srvs = NULL;
+    int nsrvs = 0;
+    size_t i = 0;
+    char **ret = NULL;
+
+    virCheckFlags(0, NULL);
+
+    if (!priv->conn || virAdmConnectIsAlive(priv->conn) <= 0)
+        return NULL;
+
+    /* Obtain a list of available servers on the daemon */
+    if ((nsrvs = virAdmConnectListServers(priv->conn, &srvs, 0)) < 0)
+        return NULL;
+
+    if (VIR_ALLOC_N(ret, nsrvs + 1) < 0)
+        goto error;
+
+    for (i = 0; i < nsrvs; i++) {
+        const char *name = virAdmServerGetName(srvs[i]);
+
+        if (VIR_STRDUP(ret[i], name) < 0)
+            goto error;
+
+        virAdmServerFree(srvs[i]);
+    }
+    VIR_FREE(srvs);
+
+    return ret;
+
+ error:
+    for (; i < nsrvs; i++)
+        virAdmServerFree(srvs[i]);
+    VIR_FREE(srvs);
+    for (i = 0; i < nsrvs; i++)
+        VIR_FREE(ret[i]);
+    VIR_FREE(ret);
+    return ret;
+}
diff --git a/tools/virt-admin-completer.h b/tools/virt-admin-completer.h
new file mode 100644 (file)
index 0000000..7507b95
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ * virt-admin-completer.h: virt-admin completer callbacks
+ *
+ * Copyright (C) 2017 Red Hat, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library.  If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ *  Michal Privoznik <mprivozn@redhat.com>
+ *
+ */
+
+#ifndef VIRT_ADMIN_COMPLETER
+# define VIRT_ADMIN_COMPLETER
+
+# include "vsh.h"
+
+char **
+vshAdmServerCompleter(vshControl *ctl,
+                      const vshCmd *cmd,
+                      unsigned int flags);
+#endif
index ef5bada63c6fc629035a4c3d619a23adaf77b195..c86b5763a73cf44106f41a3aa0efa0419bb876a8 100644 (file)
@@ -39,6 +39,7 @@
 #include "virthread.h"
 #include "virgettext.h"
 #include "virtime.h"
+#include "virt-admin-completer.h"
 
 /* Gnulib doesn't guarantee SA_SIGINFO support.  */
 #ifndef SA_SIGINFO
@@ -428,6 +429,7 @@ static const vshCmdOptDef opts_srv_threadpool_info[] = {
     {.name = "server",
      .type = VSH_OT_DATA,
      .flags = VSH_OFLAG_REQ,
+     .completer = vshAdmServerCompleter,
      .help = N_("Server to retrieve threadpool attributes from."),
     },
     {.name = NULL}
@@ -489,6 +491,7 @@ static const vshCmdOptDef opts_srv_threadpool_set[] = {
     {.name = "server",
      .type = VSH_OT_DATA,
      .flags = VSH_OFLAG_REQ,
+     .completer = vshAdmServerCompleter,
      .help = N_("Server to alter threadpool attributes on."),
     },
     {.name = "min-workers",
@@ -595,6 +598,7 @@ static const vshCmdOptDef opts_srv_clients_list[] = {
     {.name = "server",
      .type = VSH_OT_DATA,
      .flags = VSH_OFLAG_REQ,
+     .completer = vshAdmServerCompleter,
      .help = N_("server which to list connected clients from"),
     },
     {.name = NULL}
@@ -676,6 +680,7 @@ static const vshCmdOptDef opts_client_info[] = {
     {.name = "server",
      .type = VSH_OT_DATA,
      .flags = VSH_OFLAG_REQ,
+     .completer = vshAdmServerCompleter,
      .help = N_("server to which <client> is connected to"),
     },
     {.name = "client",
@@ -763,6 +768,7 @@ static const vshCmdOptDef opts_client_disconnect[] = {
     {.name = "server",
      .type = VSH_OT_DATA,
      .flags = VSH_OFLAG_REQ,
+     .completer = vshAdmServerCompleter,
      .help = N_("server which the client is currently connected to"),
     },
     {.name = "client",
@@ -828,6 +834,7 @@ static const vshCmdOptDef opts_srv_clients_info[] = {
     {.name = "server",
      .type = VSH_OT_DATA,
      .flags = VSH_OFLAG_REQ,
+     .completer = vshAdmServerCompleter,
      .help = N_("Server to retrieve the client limits from."),
     },
     {.name = NULL}
@@ -887,6 +894,7 @@ static const vshCmdOptDef opts_srv_clients_set[] = {
     {.name = "server",
      .type = VSH_OT_DATA,
      .flags = VSH_OFLAG_REQ,
+     .completer = vshAdmServerCompleter,
      .help = N_("Server to alter the client-related configuration limits on."),
     },
     {.name = "max-clients",