virsh: Introduce virshStoragePoolNameCompleter

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: John Ferlan <jferlan@redhat.com>
This commit is contained in:
Michal Privoznik 2018-01-12 14:01:33 +01:00
parent 9d34af1a6b
commit 69026fc270
5 changed files with 77 additions and 19 deletions

View File

@ -147,3 +147,51 @@ virshDomainInterfaceCompleter(vshControl *ctl,
virStringListFree(ret); virStringListFree(ret);
return NULL; return NULL;
} }
char **
virshStoragePoolNameCompleter(vshControl *ctl,
const vshCmd *cmd ATTRIBUTE_UNUSED,
unsigned int flags)
{
virshControlPtr priv = ctl->privData;
virStoragePoolPtr *pools = NULL;
int npools = 0;
size_t i = 0;
char **ret = NULL;
virCheckFlags(VIR_CONNECT_LIST_STORAGE_POOLS_INACTIVE |
VIR_CONNECT_LIST_STORAGE_POOLS_ACTIVE |
VIR_CONNECT_LIST_STORAGE_POOLS_PERSISTENT,
NULL);
if (!priv->conn || virConnectIsAlive(priv->conn) <= 0)
return NULL;
if ((npools = virConnectListAllStoragePools(priv->conn, &pools, flags)) < 0)
return NULL;
if (VIR_ALLOC_N(ret, npools + 1) < 0)
goto error;
for (i = 0; i < npools; i++) {
const char *name = virStoragePoolGetName(pools[i]);
if (VIR_STRDUP(ret[i], name) < 0)
goto error;
virStoragePoolFree(pools[i]);
}
VIR_FREE(pools);
return ret;
error:
for (; i < npools; i++)
virStoragePoolFree(pools[i]);
VIR_FREE(pools);
for (i = 0; i < npools; i++)
VIR_FREE(ret[i]);
VIR_FREE(ret);
return NULL;
}

View File

@ -38,4 +38,8 @@ char ** virshDomainInterfaceCompleter(vshControl *ctl,
const vshCmd *cmd, const vshCmd *cmd,
unsigned int flags); unsigned int flags);
char ** virshStoragePoolNameCompleter(vshControl *ctl,
const vshCmd *cmd,
unsigned int flags);
#endif #endif

View File

@ -34,8 +34,8 @@
#include "virstring.h" #include "virstring.h"
#include "virtime.h" #include "virtime.h"
#define VIRSH_COMMON_OPT_POOL_FULL \ #define VIRSH_COMMON_OPT_POOL_FULL(cflags) \
VIRSH_COMMON_OPT_POOL(N_("pool name or uuid")) VIRSH_COMMON_OPT_POOL(N_("pool name or uuid"), cflags)
#define VIRSH_COMMON_OPT_POOL_BUILD \ #define VIRSH_COMMON_OPT_POOL_BUILD \
{.name = "build", \ {.name = "build", \
@ -182,7 +182,7 @@ static const vshCmdInfo info_pool_autostart[] = {
}; };
static const vshCmdOptDef opts_pool_autostart[] = { static const vshCmdOptDef opts_pool_autostart[] = {
VIRSH_COMMON_OPT_POOL_FULL, VIRSH_COMMON_OPT_POOL_FULL(VIR_CONNECT_LIST_STORAGE_POOLS_PERSISTENT),
{.name = "disable", {.name = "disable",
.type = VSH_OT_BOOL, .type = VSH_OT_BOOL,
@ -575,7 +575,7 @@ static const vshCmdInfo info_pool_build[] = {
}; };
static const vshCmdOptDef opts_pool_build[] = { static const vshCmdOptDef opts_pool_build[] = {
VIRSH_COMMON_OPT_POOL_FULL, VIRSH_COMMON_OPT_POOL_FULL(0),
VIRSH_COMMON_OPT_POOL_NO_OVERWRITE, VIRSH_COMMON_OPT_POOL_NO_OVERWRITE,
VIRSH_COMMON_OPT_POOL_OVERWRITE, VIRSH_COMMON_OPT_POOL_OVERWRITE,
@ -625,7 +625,7 @@ static const vshCmdInfo info_pool_destroy[] = {
}; };
static const vshCmdOptDef opts_pool_destroy[] = { static const vshCmdOptDef opts_pool_destroy[] = {
VIRSH_COMMON_OPT_POOL_FULL, VIRSH_COMMON_OPT_POOL_FULL(VIR_CONNECT_LIST_STORAGE_POOLS_ACTIVE),
{.name = NULL} {.name = NULL}
}; };
@ -665,7 +665,7 @@ static const vshCmdInfo info_pool_delete[] = {
}; };
static const vshCmdOptDef opts_pool_delete[] = { static const vshCmdOptDef opts_pool_delete[] = {
VIRSH_COMMON_OPT_POOL_FULL, VIRSH_COMMON_OPT_POOL_FULL(VIR_CONNECT_LIST_STORAGE_POOLS_INACTIVE),
{.name = NULL} {.name = NULL}
}; };
@ -705,7 +705,7 @@ static const vshCmdInfo info_pool_refresh[] = {
}; };
static const vshCmdOptDef opts_pool_refresh[] = { static const vshCmdOptDef opts_pool_refresh[] = {
VIRSH_COMMON_OPT_POOL_FULL, VIRSH_COMMON_OPT_POOL_FULL(0),
{.name = NULL} {.name = NULL}
}; };
@ -745,7 +745,7 @@ static const vshCmdInfo info_pool_dumpxml[] = {
}; };
static const vshCmdOptDef opts_pool_dumpxml[] = { static const vshCmdOptDef opts_pool_dumpxml[] = {
VIRSH_COMMON_OPT_POOL_FULL, VIRSH_COMMON_OPT_POOL_FULL(0),
{.name = "inactive", {.name = "inactive",
.type = VSH_OT_BOOL, .type = VSH_OT_BOOL,
@ -1636,7 +1636,7 @@ static const vshCmdInfo info_pool_info[] = {
}; };
static const vshCmdOptDef opts_pool_info[] = { static const vshCmdOptDef opts_pool_info[] = {
VIRSH_COMMON_OPT_POOL_FULL, VIRSH_COMMON_OPT_POOL_FULL(0),
{.name = "bytes", {.name = "bytes",
.type = VSH_OT_BOOL, .type = VSH_OT_BOOL,
@ -1726,7 +1726,7 @@ static const vshCmdInfo info_pool_name[] = {
}; };
static const vshCmdOptDef opts_pool_name[] = { static const vshCmdOptDef opts_pool_name[] = {
VIRSH_COMMON_OPT_POOL_FULL, VIRSH_COMMON_OPT_POOL_FULL(0),
{.name = NULL} {.name = NULL}
}; };
@ -1758,7 +1758,7 @@ static const vshCmdInfo info_pool_start[] = {
}; };
static const vshCmdOptDef opts_pool_start[] = { static const vshCmdOptDef opts_pool_start[] = {
VIRSH_COMMON_OPT_POOL_FULL, VIRSH_COMMON_OPT_POOL_FULL(VIR_CONNECT_LIST_STORAGE_POOLS_INACTIVE),
VIRSH_COMMON_OPT_POOL_BUILD, VIRSH_COMMON_OPT_POOL_BUILD,
VIRSH_COMMON_OPT_POOL_NO_OVERWRITE, VIRSH_COMMON_OPT_POOL_NO_OVERWRITE,
VIRSH_COMMON_OPT_POOL_OVERWRITE, VIRSH_COMMON_OPT_POOL_OVERWRITE,
@ -1819,7 +1819,7 @@ static const vshCmdInfo info_pool_undefine[] = {
}; };
static const vshCmdOptDef opts_pool_undefine[] = { static const vshCmdOptDef opts_pool_undefine[] = {
VIRSH_COMMON_OPT_POOL_FULL, VIRSH_COMMON_OPT_POOL_FULL(VIR_CONNECT_LIST_STORAGE_POOLS_PERSISTENT),
{.name = NULL} {.name = NULL}
}; };
@ -1859,7 +1859,7 @@ static const vshCmdInfo info_pool_uuid[] = {
}; };
static const vshCmdOptDef opts_pool_uuid[] = { static const vshCmdOptDef opts_pool_uuid[] = {
VIRSH_COMMON_OPT_POOL_FULL, VIRSH_COMMON_OPT_POOL_FULL(0),
{.name = NULL} {.name = NULL}
}; };
@ -1896,7 +1896,7 @@ static const vshCmdInfo info_pool_edit[] = {
}; };
static const vshCmdOptDef opts_pool_edit[] = { static const vshCmdOptDef opts_pool_edit[] = {
VIRSH_COMMON_OPT_POOL_FULL, VIRSH_COMMON_OPT_POOL_FULL(0),
{.name = NULL} {.name = NULL}
}; };

View File

@ -44,15 +44,19 @@
#include "virstring.h" #include "virstring.h"
#define VIRSH_COMMON_OPT_POOL_FULL \ #define VIRSH_COMMON_OPT_POOL_FULL \
VIRSH_COMMON_OPT_POOL(N_("pool name or uuid")) VIRSH_COMMON_OPT_POOL(N_("pool name or uuid"), \
VIR_CONNECT_LIST_STORAGE_POOLS_ACTIVE)
#define VIRSH_COMMON_OPT_POOL_NAME \ #define VIRSH_COMMON_OPT_POOL_NAME \
VIRSH_COMMON_OPT_POOL(N_("pool name")) VIRSH_COMMON_OPT_POOL(N_("pool name"), \
VIR_CONNECT_LIST_STORAGE_POOLS_ACTIVE)
#define VIRSH_COMMON_OPT_POOL_OPTIONAL \ #define VIRSH_COMMON_OPT_POOL_OPTIONAL \
{.name = "pool", \ {.name = "pool", \
.type = VSH_OT_STRING, \ .type = VSH_OT_STRING, \
.help = N_("pool name or uuid") \ .help = N_("pool name or uuid"), \
.completer = virshStoragePoolNameCompleter, \
.completer_flags = VIR_CONNECT_LIST_STORAGE_POOLS_ACTIVE, \
} }
#define VIRSH_COMMON_OPT_VOLUME_VOL \ #define VIRSH_COMMON_OPT_VOLUME_VOL \

View File

@ -64,11 +64,13 @@
/* /*
* Common command options * Common command options
*/ */
# define VIRSH_COMMON_OPT_POOL(_helpstr) \ # define VIRSH_COMMON_OPT_POOL(_helpstr, cflags) \
{.name = "pool", \ {.name = "pool", \
.type = VSH_OT_DATA, \ .type = VSH_OT_DATA, \
.flags = VSH_OFLAG_REQ, \ .flags = VSH_OFLAG_REQ, \
.help = _helpstr \ .help = _helpstr, \
.completer = virshStoragePoolNameCompleter, \
.completer_flags = cflags, \
} }
# define VIRSH_COMMON_OPT_DOMAIN(_helpstr, cflags) \ # define VIRSH_COMMON_OPT_DOMAIN(_helpstr, cflags) \