virsh: Add completer for hypervisor-cpu-baseline --model

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
Jiri Denemark 2022-10-06 17:12:24 +02:00
parent 268a2708c4
commit ce8d025be8
3 changed files with 56 additions and 0 deletions

View File

@ -205,3 +205,53 @@ virshArchCompleter(vshControl *ctl G_GNUC_UNUSED,
return virshEnumComplete(VIR_ARCH_LAST, return virshEnumComplete(VIR_ARCH_LAST,
(const char *(*)(int))virArchToString); (const char *(*)(int))virArchToString);
} }
char **
virshCPUModelCompleter(vshControl *ctl,
const vshCmd *cmd,
unsigned int flags)
{
virshControl *priv = ctl->privData;
const char *virttype = NULL;
const char *emulator = NULL;
const char *arch = NULL;
const char *machine = NULL;
g_autofree char *domcaps = NULL;
g_autoptr(xmlDoc) xml = NULL;
g_autoptr(xmlXPathContext) ctxt = NULL;
g_autofree xmlNodePtr *nodes = NULL;
g_auto(GStrv) models = NULL;
int nmodels = 0;
size_t i;
virCheckFlags(0, NULL);
if (vshCommandOptStringReq(ctl, cmd, "virttype", &virttype) < 0 ||
vshCommandOptStringReq(ctl, cmd, "emulator", &emulator) < 0 ||
vshCommandOptStringReq(ctl, cmd, "arch", &arch) < 0 ||
vshCommandOptStringReq(ctl, cmd, "machine", &machine) < 0)
return NULL;
if (!priv->conn || virConnectIsAlive(priv->conn) <= 0)
return NULL;
if (!(domcaps = virConnectGetDomainCapabilities(priv->conn, emulator, arch,
machine, virttype, 0)))
return NULL;
if (!(xml = virXMLParseStringCtxt(domcaps, _("domain capabilities"), &ctxt)))
return NULL;
nmodels = virXPathNodeSet("/domainCapabilities/cpu/mode[@name='custom']/model",
ctxt, &nodes);
if (nmodels <= 0)
return NULL;
models = g_new0(char *, nmodels + 1);
for (i = 0; i < nmodels; i++)
models[i] = virXMLNodeContentString(nodes[i]);
return g_steal_pointer(&models);
}

View File

@ -51,3 +51,8 @@ char **
virshArchCompleter(vshControl *ctl, virshArchCompleter(vshControl *ctl,
const vshCmd *cmd, const vshCmd *cmd,
unsigned int flags); unsigned int flags);
char **
virshCPUModelCompleter(vshControl *ctl,
const vshCmd *cmd,
unsigned int flags);

View File

@ -1719,6 +1719,7 @@ static const vshCmdOptDef opts_hypervisor_cpu_baseline[] = {
}, },
{.name = "model", {.name = "model",
.type = VSH_OT_STRING, .type = VSH_OT_STRING,
.completer = virshCPUModelCompleter,
.help = N_("Shortcut for calling the command with a single CPU model " .help = N_("Shortcut for calling the command with a single CPU model "
"and no additional features") "and no additional features")
}, },