From 71f2307eaf22809bff9c418839a17b11a84bf2b8 Mon Sep 17 00:00:00 2001 From: Dominik Csapak Date: Fri, 4 Apr 2025 14:53:43 +0200 Subject: [PATCH] api: qemu machine capabilities: add custom pveX versions Add the pveX variants (where X > 0) to the list too, so one knows they exits. Also this allows them to be shown and chosen in the UI. Signed-off-by: Dominik Csapak Reviewed-by: Fiona Ebner Reviewed-by: Stoiko Ivanov Tested-By: Stoiko Ivanov Link: https://lore.proxmox.com/20250404125345.3244659-8-d.csapak@proxmox.com Signed-off-by: Thomas Lamprecht --- PVE/API2/Qemu/Machine.pm | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/PVE/API2/Qemu/Machine.pm b/PVE/API2/Qemu/Machine.pm index afb535c2..bbd814f0 100644 --- a/PVE/API2/Qemu/Machine.pm +++ b/PVE/API2/Qemu/Machine.pm @@ -6,6 +6,7 @@ use warnings; use JSON; use PVE::JSONSchema qw(get_standard_option); +use PVE::QemuServer::Machine; use PVE::RESTHandler; use PVE::Tools qw(file_get_contents); @@ -49,12 +50,33 @@ __PACKAGE__->register_method({ }, }, code => sub { - my $machines = eval { + my $supported_machine_list = eval { my $raw = file_get_contents('/usr/share/kvm/machine-versions-x86_64.json'); - return from_json($raw, { utf8 => 1 }); + my $machines = from_json($raw, { utf8 => 1 }); + + my $to_add = []; + + for my $machine ($machines->@*) { + my $base_version = $machine->{version}; + my $pvever = PVE::QemuServer::Machine::get_pve_version($base_version); + for (my $i = 1; $i <= $pvever; $i++) { + my $version = $base_version . "+pve$i"; + my $entry = { + id => $machine->{id} . "+pve$i", + type => $machine->{type}, + version => $version, + }; + + push $to_add->@*, $entry; + } + } + + push $machines->@*, $to_add->@*; + + return [sort { $b->{id} cmp $a->{id} } $machines->@*]; }; die "could not load supported machine versions - $@\n" if $@; - return $machines; + return $supported_machine_list; } });