]> git.proxmox.com Git - qemu-server.git/blobdiff - PVE/API2/Qemu.pm
config: define machine schema as property-string
[qemu-server.git] / PVE / API2 / Qemu.pm
index 497987ff550a256730400eeaae99fbd84af2e9ff..f3ce83d6f9d4126967a5034e36621d2fae12948c 100644 (file)
@@ -751,7 +751,7 @@ sub assert_scsi_feature_compatibility {
     my $machine_type = PVE::QemuServer::get_vm_machine($conf, undef, $conf->{arch});
     my $machine_version = PVE::QemuServer::Machine::extract_version(
        $machine_type, PVE::QemuServer::kvm_user_version());
-    my $drivetype = PVE::QemuServer::Drive::get_scsi_devicetype(
+    my $drivetype = PVE::QemuServer::Drive::get_scsi_device_type(
        $drive, $storecfg, $machine_version);
 
     if ($drivetype ne 'hd' && $drivetype ne 'cd') {
@@ -1127,11 +1127,13 @@ __PACKAGE__->register_method({
                        $conf->{vmgenid} = PVE::QemuServer::generate_uuid();
                    }
 
-                   my $machine = $conf->{machine};
+                   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})) {
-                           $conf->{machine} = PVE::QemuServer::windows_get_pinned_machine_version($machine);
+                           $machine_conf->{type} = PVE::QemuServer::windows_get_pinned_machine_version($machine);
+                           $conf->{machine} = PVE::QemuServer::Machine::print_machine($machine_conf);
                        }
                    }
 
@@ -1996,6 +1998,9 @@ my $update_vm_api  = sub {
                        );
                    }
                    $conf->{pending}->{$opt} = $param->{$opt};
+               } elsif ($opt eq 'machine') {
+                   my $machine_conf = PVE::QemuServer::Machine::parse_machine($param->{$opt});
+                   $conf->{pending}->{$opt} = $param->{$opt};
                } else {
                    $conf->{pending}->{$opt} = $param->{$opt};