On Tue, Jun 28, 2022 at 06:09:42PM +0200, Tim Wiederhake wrote:
$ virsh hypervisor-cpu-models --arch x86_64
Name Alias
----------------------------------------------------
max
host
base
qemu64-v1
qemu64 qemu64-v1
qemu32-v1
qemu32 qemu32-v1
phenom-v1
phenom phenom-v1
(...)
Note that this includes alias names and cpu models that currently
do not exist in libvirt, e.g. Denverton and Knights Mill.
Signed-off-by: Tim Wiederhake <twiederh(a)redhat.com>
---
docs/manpages/virsh.rst | 14 +++++++++
tools/virsh-host.c | 67 +++++++++++++++++++++++++++++++++++++++++
2 files changed, 81 insertions(+)
diff --git a/docs/manpages/virsh.rst b/docs/manpages/virsh.rst
index 45469f2f35..a55792b0e2 100644
--- a/docs/manpages/virsh.rst
+++ b/docs/manpages/virsh.rst
@@ -955,6 +955,20 @@ If *--validate* is specified, validates the format of the XML
document against
an internal RNG schema.
+hypervisor-cpu-models
+---------------------
+
+**Syntax:**
+
+::
+
+ hypervisor-cpu-models [arch]
+
+List the names of cpu models known to the hypervisor. A hypervisor may define
+alias names for some or all cpu models. Note that the cpu models may differ
+from libvirt, even if named identically.
+
+
hypervisor-cpu-baseline
-----------------------
diff --git a/tools/virsh-host.c b/tools/virsh-host.c
index ead966b500..cb8e1e8c6d 100644
--- a/tools/virsh-host.c
+++ b/tools/virsh-host.c
@@ -32,6 +32,7 @@
#include "virstring.h"
#include "virfile.h"
#include "virenum.h"
+#include "vsh-table.h"
/*
* "capabilities" command
@@ -1674,6 +1675,65 @@ cmdHypervisorCPUCompare(vshControl *ctl,
}
+/*
+ * "hypervisor-cpu-models" command
+ */
+static const vshCmdInfo info_hypervisor_cpu_models[] = {
+ {.name = "help",
+ .data = N_("return list of CPU models supported by a specific
hypervisor")
+ },
+ {.name = "desc",
+ .data = N_("Return list of CPU models supported by a specific
hypervisor")
+ },
+ {.name = NULL}
+};
+
+static const vshCmdOptDef opts_hypervisor_cpu_models[] = {
+ {.name = "arch",
+ .type = VSH_OT_STRING,
+ .completer = virshArchCompleter,
+ .help = N_("CPU architecture (/domain/os/type/@arch)"),
+ },
+ {.name = NULL}
+};
This will need to be expanded to add machine, virttype and
emulator to match the API params.
+ nresults = virConnectGetHypervisorCPUModelNames(priv->conn,
arch, &name,
+ &alias, 0);
Should we do sorting here or somewhere earlier in the flow ?
I notice the existing 'cpu-models' doesn't do sorting just returning
stuff in a pretty horrible random order.
I think both this new API and the old one should sort case insensitive.
+ if (nresults >= 0) {
+ size_t index;
+ for (index = 0; index < nresults; ++index) {
+ if (vshTableRowAppend(table, name[index], alias[index], NULL) < 0)
+ return ret;
+ g_free(name[index]);
+ g_free(alias[index]);
+ }
+ ret = true;
+ }
+ vshTablePrintToStdout(table, ctl);
+ g_free(name);
+ g_free(alias);
+
+ return ret;
+}
+
/*
* "hypervisor-cpu-baseline" command
*/
@@ -1819,6 +1879,13 @@ const vshCmdDef hostAndHypervisorCmds[] = {
.info = info_hostname,
.flags = 0
},
+ {
+ .name = "hypervisor-cpu-models",
+ .handler = cmdHypervisorCPUModels,
+ .opts = opts_hypervisor_cpu_models,
+ .info = info_hypervisor_cpu_models,
+ .flags = 0
+ },
{.name = "hypervisor-cpu-baseline",
.handler = cmdHypervisorCPUBaseline,
.opts = opts_hypervisor_cpu_baseline,
--
2.31.1
With regards,
Daniel
--
|:
https://berrange.com -o-
https://www.flickr.com/photos/dberrange :|
|:
https://libvirt.org -o-
https://fstop138.berrange.com :|
|:
https://entangle-photo.org -o-
https://www.instagram.com/dberrange :|