]> git.proxmox.com Git - qemu-server.git/blobdiff - PVE/QemuServer/Cloudinit.pm
Revert "cloudinit: avoid unsafe write of VM config"
[qemu-server.git] / PVE / QemuServer / Cloudinit.pm
index d4a34c40e12a2da787a243b7f76eca4824560920..b616c7b9f51c6f963f6734de6d3c217f31c7c0de 100644 (file)
@@ -566,6 +566,7 @@ sub generate_cloudinitconfig {
 
     PVE::QemuConfig->foreach_volume($conf, sub {
         my ($ds, $drive) = @_;
+
        my ($storeid, $volname) = PVE::Storage::parse_volume_id($drive->{file}, 1);
 
        return if !$volname || $volname !~ m/vm-$vmid-cloudinit/;
@@ -576,34 +577,36 @@ sub generate_cloudinitconfig {
        $generator->($conf, $vmid, $drive, $volname, $storeid);
     });
 
-    my $cloudinit_conf = {};
+    my $cloudinitconf = delete $conf->{cloudinit};
+    $cloudinitconf = {};
 
     my @cloudinit_opts = keys %{PVE::QemuServer::cloudinit_config_properties()};
     push @cloudinit_opts, 'name';
 
     for my $opt (@cloudinit_opts) {
+
        if ($opt =~ m/^ipconfig(\d+)/) {
            my $netid = "net$1";
            next if !defined($conf->{$netid});
-           $cloudinit_conf->{$netid} = $conf->{$netid};
+           $conf->{cloudinit}->{$netid} = $conf->{$netid};
        }
 
-       $cloudinit_conf->{$opt} = $conf->{$opt} if $conf->{$opt};
+       $conf->{cloudinit}->{$opt} = $conf->{$opt} if $conf->{$opt};
     }
 
-    my $has_cloudinit_drive = 0;
+    $conf->{cloudinit}->{name} = "VM$vmid" if !$conf->{cloudinit}->{name};
+
     for my $opt (keys %{$conf}) {
        if (PVE::QemuServer::is_valid_drivename($opt)) {
            my $drive = PVE::QemuServer::parse_drive($opt, $conf->{$opt});
            if (PVE::QemuServer::drive_is_cloudinit($drive)) {
-               $has_cloudinit_drive = 1;
-               $cloudinit_conf->{$opt} = $conf->{$opt};
+               $conf->{cloudinit}->{$opt} = $conf->{$opt};
            }
        }
     }
-    $cloudinit_conf->{name} //= "VM$vmid" if $has_cloudinit_drive;
 
-    return $cloudinit_conf;
+    PVE::QemuConfig->write_config($vmid, $conf);
+
 }
 
 sub dump_cloudinit_config {