[pve-devel] [PATCH qemu-server v4 11/16] machine: add check_and_pin_machine_string() helper

Fiona Ebner f.ebner at proxmox.com
Fri Jan 17 15:24:25 CET 2025


Extract the logic for guest OS-type dependent machine version pinning
into a dedicated helper, so it can be re-used.

Signed-off-by: Fiona Ebner <f.ebner at proxmox.com>
---
 PVE/API2/Qemu.pm          | 14 +++-----------
 PVE/QemuServer/Machine.pm | 16 ++++++++++++++++
 2 files changed, 19 insertions(+), 11 deletions(-)

diff --git a/PVE/API2/Qemu.pm b/PVE/API2/Qemu.pm
index 60b8a4cc..b1410df6 100644
--- a/PVE/API2/Qemu.pm
+++ b/PVE/API2/Qemu.pm
@@ -1242,17 +1242,9 @@ __PACKAGE__->register_method({
 			$conf->{vmgenid} = PVE::QemuServer::generate_uuid();
 		    }
 
-		    my $machine_conf = PVE::QemuServer::Machine::parse_machine($conf->{machine});
-		    my $machine = $machine_conf->{type};
-		    if (!$machine || $machine =~ m/^(?:pc|q35|virt)$/) {
-			# always pin Windows' machine version on create, they get to easily confused
-			if (PVE::QemuServer::Helpers::windows_version($conf->{ostype})) {
-			    $machine_conf->{type} =
-				PVE::QemuServer::Machine::windows_get_pinned_machine_version($machine);
-			    $conf->{machine} = PVE::QemuServer::Machine::print_machine($machine_conf);
-			}
-		    }
-		    PVE::QemuServer::Machine::assert_valid_machine_property($machine_conf);
+		    # always pin Windows' machine version on create, they get confused too easily
+		    $conf->{machine} = PVE::QemuServer::Machine::check_and_pin_machine_string(
+			$conf->{machine}, $conf->{ostype});
 
 		    $conf->{lock} = 'import' if $live_import_mapping;
 
diff --git a/PVE/QemuServer/Machine.pm b/PVE/QemuServer/Machine.pm
index 40100555..e6fbd865 100644
--- a/PVE/QemuServer/Machine.pm
+++ b/PVE/QemuServer/Machine.pm
@@ -261,4 +261,20 @@ sub get_vm_machine {
     return $machine;
 }
 
+sub check_and_pin_machine_string {
+    my ($machine_string, $ostype) = @_;
+
+    my $machine_conf = parse_machine($machine_string);
+    my $machine = $machine_conf->{type};
+    if (!$machine || $machine =~ m/^(?:pc|q35|virt)$/) {
+	# always pin Windows' machine version on create, they get confused too easily
+	if (PVE::QemuServer::Helpers::windows_version($ostype)) {
+	    $machine_conf->{type} = windows_get_pinned_machine_version($machine);
+	}
+    }
+
+    assert_valid_machine_property($machine_conf);
+    return print_machine($machine_conf);
+}
+
 1;
-- 
2.39.5





More information about the pve-devel mailing list