if disk is unused: we delete it from conf, and also delete it from pending in case of a previous pending add
[CONF] unused0: vm-disk-100-1.raw [PENDING] virtio0: vm-disk-100-1.raw #qm set 100 -delete unused0 [CONF] [PENDING] else if vm is running we register the disk in $conf->{pending}->{del}->{$key} = 1; [CONF] virtio0: vm-disk-100-1.raw #qm set 100 -delete virtio0 [CONF] virtio0: vm-disk-100-1.raw [PENDING] delete: virtio0 else we simply put the disk as unused like before [CONF] virtio0: vm-disk-100-1.raw #qm set 100 -delete virtio0 [CONF] unused0: vm-disk-100-1.raw Signed-off-by: Alexandre Derumier <aderum...@odiso.com> --- PVE/API2/Qemu.pm | 16 ++++++++++++++-- PVE/QemuServer.pm | 12 ++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/PVE/API2/Qemu.pm b/PVE/API2/Qemu.pm index 40f6eb4..4541dbb 100644 --- a/PVE/API2/Qemu.pm +++ b/PVE/API2/Qemu.pm @@ -688,6 +688,8 @@ my $is_hotpluggable = sub { my $delete_drive = sub { my ($conf, $storecfg, $vmid, $key, $drive, $force) = @_; + my $running = PVE::QemuServer::check_running($vmid); + if (!PVE::QemuServer::drive_is_cdrom($drive)) { my $volid = $drive->{file}; @@ -702,17 +704,27 @@ my $delete_drive = sub { if $used_paths->{$path}; PVE::Storage::vdisk_free($storecfg, $volid); + delete $conf->{$key}; + #delete if the disk also exist in pending + PVE::QemuServer::del_volume($conf->{pending}, $volid, $storecfg); + + }; die $@ if $@; } else { - PVE::QemuServer::add_unused_volume($conf, $volid, $vmid); + if($running){ + $conf->{pending}->{del}->{$key} = 1; + }else{ + PVE::QemuServer::add_unused_volume($conf, $volid); + delete $conf->{$key}; + } } } } - delete $conf->{$key}; }; + my $vmconfig_delete_option = sub { my ($rpcenv, $authuser, $conf, $storecfg, $vmid, $opt, $force) = @_; diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm index 4916b8f..bf099b2 100644 --- a/PVE/QemuServer.pm +++ b/PVE/QemuServer.pm @@ -1389,6 +1389,18 @@ sub add_unused_volume { return $key; } +sub del_volume { + my ($conf, $volid, $storecfg) = @_; + + foreach my $key (keys %$conf) { + my $confdrive = PVE::QemuServer::parse_drive($key, $conf->{$key}); + if (!PVE::QemuServer::drive_is_cdrom($confdrive)) { + PVE::QemuServer::cleanup_drive_path($key, $storecfg, $confdrive); + delete $conf->{$key} if $confdrive->{file} eq $volid; + } + } +} + my $valid_smbios1_options = { manufacturer => '\S+', product => '\S+', -- 1.7.10.4 _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel