mirror of
https://git.proxmox.com/git/qemu-server
synced 2025-10-04 17:01:46 +00:00
Revert "cloudinit: avoid unsafe write of VM config"
This reverts commit b137c30c3a
.
In preparation of fixing the special:cloudinig section.
This commit is contained in:
parent
e0e036e1ba
commit
3de134ef4a
@ -5020,7 +5020,7 @@ sub vmconfig_hotplug_pending {
|
||||
# some changes can be done without hotplug
|
||||
my $drive = parse_drive($opt, $value);
|
||||
if (drive_is_cloudinit($drive)) {
|
||||
$conf->{cloudinit} = PVE::QemuServer::Cloudinit::generate_cloudinitconfig($conf, $vmid);
|
||||
PVE::QemuServer::Cloudinit::generate_cloudinitconfig($conf, $vmid);
|
||||
}
|
||||
vmconfig_update_disk($storecfg, $conf, $hotplug_features->{disk},
|
||||
$vmid, $opt, $value, $arch, $machine_type);
|
||||
@ -5169,11 +5169,9 @@ sub vmconfig_apply_pending {
|
||||
}
|
||||
}
|
||||
|
||||
$conf->{cloudinit} = PVE::QemuServer::Cloudinit::generate_cloudinitconfig($conf, $vmid)
|
||||
if $generate_cloudnit;
|
||||
|
||||
# write all changes at once to avoid unnecessary i/o
|
||||
PVE::QemuConfig->write_config($vmid, $conf);
|
||||
PVE::QemuServer::Cloudinit::generate_cloudinitconfig($conf, $vmid) if $generate_cloudnit;
|
||||
}
|
||||
|
||||
sub vmconfig_update_net {
|
||||
@ -5377,8 +5375,7 @@ sub vmconfig_update_cloudinit_drive {
|
||||
|
||||
return if !$cloudinit_drive;
|
||||
|
||||
$conf->{cloudinit} = PVE::QemuServer::Cloudinit::generate_cloudinitconfig($conf, $vmid);
|
||||
# FIXME: write out changed config here? needs to be sure that config is locked though!
|
||||
PVE::QemuServer::Cloudinit::generate_cloudinitconfig($conf, $vmid);
|
||||
my $running = PVE::QemuServer::check_running($vmid);
|
||||
|
||||
if ($running) {
|
||||
@ -5560,12 +5557,11 @@ sub vm_start_nolock {
|
||||
if (!$statefile && scalar(keys %{$conf->{pending}})) {
|
||||
vmconfig_apply_pending($vmid, $conf, $storecfg);
|
||||
$conf = PVE::QemuConfig->load_config($vmid); # update/reload
|
||||
} elsif (!$migratedfrom) {
|
||||
}
|
||||
|
||||
# don't regenerate the ISO if the VM is started as part of a live migration
|
||||
# this way we can reuse the old ISO with the correct config
|
||||
$conf->{cloudinit} = PVE::QemuServer::Cloudinit::generate_cloudinitconfig($conf, $vmid);
|
||||
# FIXME: write out changed config here? if any changes
|
||||
}
|
||||
PVE::QemuServer::Cloudinit::generate_cloudinitconfig($conf, $vmid) if !$migratedfrom;
|
||||
|
||||
# override offline migrated volumes, conf is out of date still
|
||||
if (my $offline_volumes = $migrate_opts->{offline_volumes}) {
|
||||
|
@ -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 {
|
||||
|
Loading…
Reference in New Issue
Block a user