[pve-devel] [PATCH qemu-server v3 13/18] machine: add check_and_pin_machine_string() helper
Fiona Ebner
f.ebner at proxmox.com
Fri Jan 17 13:08:12 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