* [PATCH manager/qemu-server 0/3] custom cpu models: tighten reported-model handling
@ 2026-05-19 14:06 Arthur Bied-Charreton
2026-05-19 14:06 ` [PATCH pve-manager 1/3] custom cpu models: make 'reported-model' required in POST Arthur Bied-Charreton
` (5 more replies)
0 siblings, 6 replies; 7+ messages in thread
From: Arthur Bied-Charreton @ 2026-05-19 14:06 UTC (permalink / raw)
To: pve-devel
The default reported-model for custom CPU models is kvm64, a legacy
model with a limited set of features.
This series tightens the handling around reported-model:
1. Require reported-model on creation via the API, as the UI already
does
2. Prevent deletion of reported-model via PUT
3. Resolve and write out the default explicitly on config writes
This will be useful in case we ever want to make reported-model
required in a future major release.
pve-manager:
Arthur Bied-Charreton (2):
custom cpu models: make 'reported-model' required in POST
custom cpu models: do not allow deleting 'reported-model'
PVE/API2/Cluster/Qemu/CustomCPUModels.pm | 5 +++++
test/CustomCPUModels_test.pl | 19 +++++++++++++------
2 files changed, 18 insertions(+), 6 deletions(-)
qemu-server:
Arthur Bied-Charreton (1):
cpu config: resolve default reported-model on write
src/PVE/QemuServer/CPUConfig.pm | 2 ++
1 file changed, 2 insertions(+)
Summary over all repositories:
3 files changed, 20 insertions(+), 6 deletions(-)
--
Generated by murpp 0.11.0
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH pve-manager 1/3] custom cpu models: make 'reported-model' required in POST
2026-05-19 14:06 [PATCH manager/qemu-server 0/3] custom cpu models: tighten reported-model handling Arthur Bied-Charreton
@ 2026-05-19 14:06 ` Arthur Bied-Charreton
2026-05-19 14:06 ` [PATCH pve-manager 2/3] custom cpu models: do not allow deleting 'reported-model' Arthur Bied-Charreton
` (4 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Arthur Bied-Charreton @ 2026-05-19 14:06 UTC (permalink / raw)
To: pve-devel
The default reported-model is kvm64, which is a legacy CPU model with a
very limited feature set that one should not really be using in
practice.
The UI already requires the reported-model, so this just brings the API
in line.
Signed-off-by: Arthur Bied-Charreton <a.bied-charreton@proxmox.com>
Suggested-by: Fiona Ebner <f.ebner@proxmox.com>
---
PVE/API2/Cluster/Qemu/CustomCPUModels.pm | 4 ++++
test/CustomCPUModels_test.pl | 19 +++++++++++++------
2 files changed, 17 insertions(+), 6 deletions(-)
diff --git a/PVE/API2/Cluster/Qemu/CustomCPUModels.pm b/PVE/API2/Cluster/Qemu/CustomCPUModels.pm
index 8628f20c..4ba04180 100644
--- a/PVE/API2/Cluster/Qemu/CustomCPUModels.pm
+++ b/PVE/API2/Cluster/Qemu/CustomCPUModels.pm
@@ -19,6 +19,9 @@ my $cputype_param = {
description => "Name for the custom CPU model. The 'custom-' prefix is optional.",
};
+my $reported_model_param =
+ { get_standard_option('pve-qm-custom-cpu-model')->{'reported-model'}->%*, optional => 0 };
+
# privileges that grant any kind of visibility on a custom CPU model
my $can_see_mapping_privs = ['Mapping.Modify', 'Mapping.Use', 'Mapping.Audit'];
@@ -77,6 +80,7 @@ __PACKAGE__->register_method({
additionalProperties => 0,
properties => PVE::QemuServer::CPUConfig::add_cpu_json_properties({
cputype => $cputype_param,
+ 'reported-model' => $reported_model_param,
}),
},
returns => { type => 'null' },
diff --git a/test/CustomCPUModels_test.pl b/test/CustomCPUModels_test.pl
index b416b684..5511dbb7 100755
--- a/test/CustomCPUModels_test.pl
+++ b/test/CustomCPUModels_test.pl
@@ -49,27 +49,34 @@ like(
'POST without cputype rejected by schema',
);
+eval { validate_params('POST', '', { cputype => 'name' }) };
+like(
+ $@,
+ qr/reported-model.*(?:missing|required|not optional)/i,
+ 'POST without reported-model rejected by schema',
+);
+
# --- create: cputype must be a valid pve-configid (A1) ---
-eval { validate_params('POST', '', { cputype => '4foo' }) };
+eval { validate_params('POST', '', { cputype => '4foo', 'reported-model' => 'qemu64' }) };
like(
$@, qr/format/i, 'POST with cputype starting with digit rejected by schema',
);
-eval { validate_params('POST', '', { cputype => 'bad name' }) };
+eval { validate_params('POST', '', { cputype => 'bad name', 'reported-model' => 'qemu64' }) };
like(
$@, qr/format/i, 'POST with whitespace in cputype rejected by schema',
);
-eval { validate_params('POST', '', { cputype => 'a' x 50 }) };
+eval { validate_params('POST', '', { cputype => 'a' x 50, 'reported-model' => 'qemu64' }) };
like(
$@, qr/40 characters|maxLength|too long/i, 'POST with overly long cputype rejected by schema',
);
# Valid cputype with optional 'custom-' prefix passes the schema.
-eval { validate_params('POST', '', { cputype => 'custom-foo' }) };
+eval { validate_params('POST', '', { cputype => 'custom-foo', 'reported-model' => 'qemu64' }) };
is($@, '', 'POST with valid prefixed cputype accepted by schema');
-eval { validate_params('POST', '', { cputype => 'my_model' }) };
+eval { validate_params('POST', '', { cputype => 'my_model', 'reported-model' => 'qemu64' }) };
is($@, '', 'POST with valid unprefixed cputype accepted by schema');
# --- create: empty name after stripping 'custom-' is rejected by runtime check (A1) ---
@@ -81,7 +88,7 @@ is($@, '', 'POST with valid unprefixed cputype accepted by schema');
$config_mock->mock(
lock_custom_cpu_model_config => sub { fail('lock reached for empty stripped name'); },
);
- eval { invoke_method('POST', '', { cputype => 'custom-' }) };
+ eval { invoke_method('POST', '', { cputype => 'custom-', 'reported-model' => 'qemu64' }) };
like($@, qr/configid|invalid/i, 'POST with cputype "custom-" rejected after stripping');
}
--
2.47.3
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH pve-manager 2/3] custom cpu models: do not allow deleting 'reported-model'
2026-05-19 14:06 [PATCH manager/qemu-server 0/3] custom cpu models: tighten reported-model handling Arthur Bied-Charreton
2026-05-19 14:06 ` [PATCH pve-manager 1/3] custom cpu models: make 'reported-model' required in POST Arthur Bied-Charreton
@ 2026-05-19 14:06 ` Arthur Bied-Charreton
2026-05-19 14:06 ` [PATCH qemu-server 3/3] cpu config: resolve default reported-model on write Arthur Bied-Charreton
` (3 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Arthur Bied-Charreton @ 2026-05-19 14:06 UTC (permalink / raw)
To: pve-devel
Now that reported-model is required on creation, prevent it from being
removed via the delete parameter on PUT.
Signed-off-by: Arthur Bied-Charreton <a.bied-charreton@proxmox.com>
Suggested-by: Fiona Ebner <f.ebner@proxmox.com>
---
PVE/API2/Cluster/Qemu/CustomCPUModels.pm | 1 +
1 file changed, 1 insertion(+)
diff --git a/PVE/API2/Cluster/Qemu/CustomCPUModels.pm b/PVE/API2/Cluster/Qemu/CustomCPUModels.pm
index 4ba04180..fdeb2ce3 100644
--- a/PVE/API2/Cluster/Qemu/CustomCPUModels.pm
+++ b/PVE/API2/Cluster/Qemu/CustomCPUModels.pm
@@ -173,6 +173,7 @@ __PACKAGE__->register_method({
if ($delete) {
$delete = [PVE::Tools::split_list($delete)];
die "cannot delete 'cputype'\n" if grep { $_ eq 'cputype' } @$delete;
+ die "cannot delete 'reported-model'\n" if grep { $_ eq 'reported-model' } @$delete;
}
(my $name = $param->{cputype}) =~ s/^custom-//;
--
2.47.3
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH qemu-server 3/3] cpu config: resolve default reported-model on write
2026-05-19 14:06 [PATCH manager/qemu-server 0/3] custom cpu models: tighten reported-model handling Arthur Bied-Charreton
2026-05-19 14:06 ` [PATCH pve-manager 1/3] custom cpu models: make 'reported-model' required in POST Arthur Bied-Charreton
2026-05-19 14:06 ` [PATCH pve-manager 2/3] custom cpu models: do not allow deleting 'reported-model' Arthur Bied-Charreton
@ 2026-05-19 14:06 ` Arthur Bied-Charreton
2026-05-19 14:50 ` [PATCH manager/qemu-server 0/3] custom cpu models: tighten reported-model handling Fiona Ebner
` (2 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Arthur Bied-Charreton @ 2026-05-19 14:06 UTC (permalink / raw)
To: pve-devel
When writing the custom CPU model config, fill in the default
reported-model (kvm64) explicitly if not defined.
This makes the default visible in the config file and prepares for
potentially making the field required in a future major release.
Signed-off-by: Arthur Bied-Charreton <a.bied-charreton@proxmox.com>
Suggested-by: Fiona Ebner <f.ebner@proxmox.com>
---
src/PVE/QemuServer/CPUConfig.pm | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/PVE/QemuServer/CPUConfig.pm b/src/PVE/QemuServer/CPUConfig.pm
index c8b54ec2..9be145ef 100644
--- a/src/PVE/QemuServer/CPUConfig.pm
+++ b/src/PVE/QemuServer/CPUConfig.pm
@@ -554,6 +554,8 @@ sub write_config($class, $filename, $cfg) {
. " $model_conf->{cputype}) not equal to \$cfg->ids entry ($model)\n";
}
+ $model_conf->{'reported-model'} //= $cpu_fmt->{'reported-model'}->{default};
+
# saved in section header
delete $model_conf->{cputype};
}
--
2.47.3
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH manager/qemu-server 0/3] custom cpu models: tighten reported-model handling
2026-05-19 14:06 [PATCH manager/qemu-server 0/3] custom cpu models: tighten reported-model handling Arthur Bied-Charreton
` (2 preceding siblings ...)
2026-05-19 14:06 ` [PATCH qemu-server 3/3] cpu config: resolve default reported-model on write Arthur Bied-Charreton
@ 2026-05-19 14:50 ` Fiona Ebner
2026-05-19 19:17 ` applied: " Thomas Lamprecht
2026-05-19 20:17 ` Thomas Lamprecht
5 siblings, 0 replies; 7+ messages in thread
From: Fiona Ebner @ 2026-05-19 14:50 UTC (permalink / raw)
To: Arthur Bied-Charreton, pve-devel
Am 19.05.26 um 4:06 PM schrieb Arthur Bied-Charreton:
> The default reported-model for custom CPU models is kvm64, a legacy
> model with a limited set of features.
>
> This series tightens the handling around reported-model:
>
> 1. Require reported-model on creation via the API, as the UI already
> does
> 2. Prevent deletion of reported-model via PUT
> 3. Resolve and write out the default explicitly on config writes
>
> This will be useful in case we ever want to make reported-model
> required in a future major release.
Nit: the Suggested-by trailer should come before the Signed-off-by to
keep the chronological order.
Regarding patch 1: it is a breaking change, but the feature has only
been on no-subscription for a few days and I suspect most people would
use the UI or specify an explicit model anyways.
Reviewed-by: Fiona Ebner <f.ebner@proxmox.com>
Tested-by: Fiona Ebner <f.ebner@proxmox.com>
^ permalink raw reply [flat|nested] 7+ messages in thread
* applied: [PATCH manager/qemu-server 0/3] custom cpu models: tighten reported-model handling
2026-05-19 14:06 [PATCH manager/qemu-server 0/3] custom cpu models: tighten reported-model handling Arthur Bied-Charreton
` (3 preceding siblings ...)
2026-05-19 14:50 ` [PATCH manager/qemu-server 0/3] custom cpu models: tighten reported-model handling Fiona Ebner
@ 2026-05-19 19:17 ` Thomas Lamprecht
2026-05-19 20:17 ` Thomas Lamprecht
5 siblings, 0 replies; 7+ messages in thread
From: Thomas Lamprecht @ 2026-05-19 19:17 UTC (permalink / raw)
To: pve-devel, Arthur Bied-Charreton
On Tue, 19 May 2026 16:06:20 +0200, Arthur Bied-Charreton wrote:
> The default reported-model for custom CPU models is kvm64, a legacy
> model with a limited set of features.
>
> This series tightens the handling around reported-model:
>
> 1. Require reported-model on creation via the API, as the UI already
> does
> 2. Prevent deletion of reported-model via PUT
> 3. Resolve and write out the default explicitly on config writes
>
> [...]
Applied, thanks!
[1/2] custom cpu models: make 'reported-model' required in POST
commit: 013e8d4158310b4d378fa660791d0dbe95da84c0
[2/2] custom cpu models: do not allow deleting 'reported-model'
commit: df53f47110268ee92011696bc7473bc5c79de373
^ permalink raw reply [flat|nested] 7+ messages in thread
* applied: [PATCH manager/qemu-server 0/3] custom cpu models: tighten reported-model handling
2026-05-19 14:06 [PATCH manager/qemu-server 0/3] custom cpu models: tighten reported-model handling Arthur Bied-Charreton
` (4 preceding siblings ...)
2026-05-19 19:17 ` applied: " Thomas Lamprecht
@ 2026-05-19 20:17 ` Thomas Lamprecht
5 siblings, 0 replies; 7+ messages in thread
From: Thomas Lamprecht @ 2026-05-19 20:17 UTC (permalink / raw)
To: pve-devel, Arthur Bied-Charreton
On Tue, 19 May 2026 16:06:20 +0200, Arthur Bied-Charreton wrote:
> The default reported-model for custom CPU models is kvm64, a legacy
> model with a limited set of features.
>
> This series tightens the handling around reported-model:
>
> 1. Require reported-model on creation via the API, as the UI already
> does
> 2. Prevent deletion of reported-model via PUT
> 3. Resolve and write out the default explicitly on config writes
>
> [...]
Applied, thanks!
[1/1] cpu config: resolve default reported-model on write
commit: b1ce2b4e17fe5d2c315fe8cfa0469abc01eccf46
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2026-05-19 20:18 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-05-19 14:06 [PATCH manager/qemu-server 0/3] custom cpu models: tighten reported-model handling Arthur Bied-Charreton
2026-05-19 14:06 ` [PATCH pve-manager 1/3] custom cpu models: make 'reported-model' required in POST Arthur Bied-Charreton
2026-05-19 14:06 ` [PATCH pve-manager 2/3] custom cpu models: do not allow deleting 'reported-model' Arthur Bied-Charreton
2026-05-19 14:06 ` [PATCH qemu-server 3/3] cpu config: resolve default reported-model on write Arthur Bied-Charreton
2026-05-19 14:50 ` [PATCH manager/qemu-server 0/3] custom cpu models: tighten reported-model handling Fiona Ebner
2026-05-19 19:17 ` applied: " Thomas Lamprecht
2026-05-19 20:17 ` Thomas Lamprecht
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.