提交 c14b5694 编写于 作者: M Michal Privoznik

virsh: Add virshDomainShutdownModeCompleter

This completer is used to offer shutdown/reboot modes.
Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
Reviewed-by: NCole Robinson <crobinso@redhat.com>
上级 02b56251
......@@ -936,3 +936,59 @@ virshDomainDeviceAliasCompleter(vshControl *ctl,
VIR_STEAL_PTR(ret, tmp);
return ret;
}
char **
virshDomainShutdownModeCompleter(vshControl *ctl,
const vshCmd *cmd,
unsigned int flags)
{
const char *modes[] = {"acpi", "agent", "initctl", "signal", "paravirt"};
size_t i;
char **ret = NULL;
size_t ntmp = 0;
VIR_AUTOSTRINGLIST tmp = NULL;
const char *modeConst = NULL;
VIR_AUTOFREE(char *) mode = NULL;
VIR_AUTOSTRINGLIST modesSpecified = NULL;
virCheckFlags(0, NULL);
if (vshCommandOptStringQuiet(ctl, cmd, "mode", &modeConst) < 0)
return NULL;
if (STREQ_NULLABLE(modeConst, " "))
modeConst = NULL;
if (modeConst) {
char *modeTmp = NULL;
if (VIR_STRDUP(mode, modeConst) < 0)
return NULL;
if ((modeTmp = strrchr(mode, ',')))
*modeTmp = '\0';
else
VIR_FREE(mode);
}
if (mode && !(modesSpecified = virStringSplit(mode, ",", 0)))
return NULL;
if (VIR_ALLOC_N(tmp, ARRAY_CARDINALITY(modes) + 1) < 0)
return NULL;
for (i = 0; i < ARRAY_CARDINALITY(modes); i++) {
if (virStringListHasString((const char **)modesSpecified, modes[i]))
continue;
if ((mode && virAsprintf(&tmp[ntmp], "%s,%s", mode, modes[i]) < 0) ||
(!mode && VIR_STRDUP(tmp[ntmp], modes[i]) < 0))
return NULL;
ntmp++;
}
VIR_STEAL_PTR(ret, tmp);
return ret;
}
......@@ -110,4 +110,8 @@ char ** virshDomainDeviceAliasCompleter(vshControl *ctl,
char ** virshCellnoCompleter(vshControl *ctl,
const vshCmd *cmd,
unsigned int flags);
char ** virshDomainShutdownModeCompleter(vshControl *ctl,
const vshCmd *cmd,
unsigned int flags);
#endif /* LIBVIRT_VIRSH_COMPLETER_H */
......@@ -5830,6 +5830,7 @@ static const vshCmdOptDef opts_shutdown[] = {
VIRSH_COMMON_OPT_DOMAIN_FULL(VIR_CONNECT_LIST_DOMAINS_ACTIVE),
{.name = "mode",
.type = VSH_OT_STRING,
.completer = virshDomainShutdownModeCompleter,
.help = N_("shutdown mode: acpi|agent|initctl|signal|paravirt")
},
{.name = NULL}
......@@ -5914,6 +5915,7 @@ static const vshCmdOptDef opts_reboot[] = {
VIRSH_COMMON_OPT_DOMAIN_FULL(VIR_CONNECT_LIST_DOMAINS_ACTIVE),
{.name = "mode",
.type = VSH_OT_STRING,
.completer = virshDomainShutdownModeCompleter,
.help = N_("shutdown mode: acpi|agent|initctl|signal|paravirt")
},
{.name = NULL}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册