]> git.proxmox.com Git - qemu-server.git/blobdiff - PVE/API2/Qemu.pm
create_vm: don't add vmgenid for ARM machines by default
[qemu-server.git] / PVE / API2 / Qemu.pm
index 655f51455e8132f53048fa277d31cca04294ade9..3a59058672587fc99219e8f31ff0ee263bb2e94e 100644 (file)
@@ -365,41 +365,7 @@ __PACKAGE__->register_method({
        type => 'array',
        items => {
            type => "object",
-           properties => {
-               vmid => get_standard_option('pve-vmid'),
-               status => {
-                   description => "Qemu process status.",
-                   type => 'string',
-                   enum => ['stopped', 'running'],
-               },
-               maxmem => {
-                   description => "Maximum memory in bytes.",
-                   type => 'integer',
-                   optional => 1,
-                   renderer => 'bytes',
-               },
-               maxdisk => {
-                   description => "Root disk size in bytes.",
-                   type => 'integer',
-                   optional => 1,
-                   renderer => 'bytes',
-               },
-               name => {
-                   description => "VM name.",
-                   type => 'string',
-                   optional => 1,
-               },
-               qmpstatus => {
-                   description => "Qemu QMP agent status.",
-                   type => 'string',
-                   optional => 1,
-               },
-               pid => {
-                   description => "PID of running qemu process.",
-                   type => 'integer',
-                   optional => 1,
-               },
-           },
+           properties => $PVE::QemuServer::vmstatus_return_properties,
        },
        links => [ { rel => 'child', href => "{vmid}" } ],
     },
@@ -416,7 +382,6 @@ __PACKAGE__->register_method({
            next if !$rpcenv->check($authuser, "/vms/$vmid", [ 'VM.Audit' ], 1);
 
            my $data = $vmstatus->{$vmid};
-           $data->{vmid} = int($vmid);
            push @$res, $data;
        }
 
@@ -620,6 +585,8 @@ __PACKAGE__->register_method({
 
                my $conf = $param;
 
+               my ($arch, undef) = PVE::QemuServer::get_basic_machine_info($conf);
+
                eval {
 
                    $vollist = &$create_disks($rpcenv, $authuser, $conf, $storecfg, $vmid, $pool, $param, $storage);
@@ -634,6 +601,10 @@ __PACKAGE__->register_method({
                        $conf->{smbios1} = PVE::QemuServer::generate_smbios1_uuid();
                    }
 
+                   if ((!defined($conf->{vmgenid}) || $conf->{vmgenid} eq '1') && $arch ne 'aarch64') {
+                       $conf->{vmgenid} = PVE::QemuServer::generate_uuid();
+                   }
+
                    PVE::QemuConfig->write_config($vmid, $conf);
 
                };
@@ -1126,6 +1097,10 @@ my $update_vm_api  = sub {
            # add macaddr
            my $net = PVE::QemuServer::parse_net($param->{$opt});
            $param->{$opt} = PVE::QemuServer::print_net($net);
+       } elsif ($opt eq 'vmgenid') {
+           if ($param->{$opt} eq '1') {
+               $param->{$opt} = PVE::QemuServer::generate_uuid();
+           }
        }
     }
 
@@ -1897,7 +1872,26 @@ __PACKAGE__->register_method({
            vmid => get_standard_option('pve-vmid'),
        },
     },
-    returns => { type => 'object' },
+    returns => {
+       type => 'object',
+       properties => {
+           %$PVE::QemuServer::vmstatus_return_properties,
+           ha => {
+               description => "HA manager service status.",
+               type => 'object',
+           },
+           spice => {
+               description => "Qemu VGA configuration supports spice.",
+               type => 'boolean',
+               optional => 1,
+           },
+           agent => {
+               description => "Qemu GuestAgent enabled in config.",
+               type => 'boolean',
+               optional => 1,
+           },
+       },
+    },
     code => sub {
        my ($param) = @_;
 
@@ -1910,8 +1904,7 @@ __PACKAGE__->register_method({
        $status->{ha} = PVE::HA::Config::get_service_status("vm:$param->{vmid}");
 
        $status->{spice} = 1 if PVE::QemuServer::vga_conf_has_spice($conf->{vga});
-
-       $status->{agent} = 1 if $conf->{agent};
+       $status->{agent} = 1 if (PVE::QemuServer::parse_guest_agent($conf)->{enabled});
 
        return $status;
     }});
@@ -2742,13 +2735,15 @@ __PACKAGE__->register_method({
            }
 
             # auto generate a new uuid
-            my ($uuid, $uuid_str);
-            UUID::generate($uuid);
-            UUID::unparse($uuid, $uuid_str);
            my $smbios1 = PVE::QemuServer::parse_smbios1($newconf->{smbios1} || '');
-           $smbios1->{uuid} = $uuid_str;
+           $smbios1->{uuid} = PVE::QemuServer::generate_uuid();
            $newconf->{smbios1} = PVE::QemuServer::print_smbios1($smbios1);
 
+           # auto generate a new vmgenid if the option was set
+           if ($newconf->{vmgenid}) {
+               $newconf->{vmgenid} = PVE::QemuServer::generate_uuid();
+           }
+
            delete $newconf->{template};
 
            if ($param->{name}) {
@@ -2802,8 +2797,9 @@ __PACKAGE__->register_method({
                    delete $newconf->{lock};
 
                    # do not write pending changes
-                   if ($newconf->{pending}) {
-                       warn "found pending changes, discarding for clone\n";
+                   if (my @changes = keys %{$newconf->{pending}}) {
+                       my $pending = join(',', @changes);
+                       warn "found pending changes for '$pending', discarding for clone\n";
                        delete $newconf->{pending};
                    }
 
@@ -2986,6 +2982,10 @@ __PACKAGE__->register_method({
 
                    PVE::QemuConfig->write_config($vmid, $conf);
 
+                   if ($running && PVE::QemuServer::parse_guest_agent($conf)->{fstrim_cloned_disks} && PVE::QemuServer::qga_check_running($vmid)) {
+                       eval { PVE::QemuServer::vm_mon_cmd($vmid, "guest-fstrim"); };
+                   }
+
                    eval {
                        # try to deactivate volumes - avoid lvm LVs to be active on several nodes
                        PVE::Storage::deactivate_volumes($storecfg, [ $newdrive->{file} ])