Make it possible to delete a container whoes underlying storage is no longer available. This will just write an warning instead of dying.
Without setting the option force-remove-storage=1 a delete will still fail, like it did before the changes. With this option set it will try to delete the volume from the storage. If this fails it writes a warning. Signed-off-by: Stefan Hrdlicka <s.hrdli...@proxmox.com> --- src/PVE/API2/LXC.pm | 8 ++++++++ src/PVE/LXC.pm | 20 +++++++++++++++----- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/src/PVE/API2/LXC.pm b/src/PVE/API2/LXC.pm index 589f96f..4d785c9 100644 --- a/src/PVE/API2/LXC.pm +++ b/src/PVE/API2/LXC.pm @@ -697,6 +697,13 @@ __PACKAGE__->register_method({ ." enabled storages which are not referenced in the config.", optional => 1, }, + 'force-remove-storage' => { + type => 'boolean', + description => 'If set, this will ignore errors when trying to remove LXC' + . ' container storage.', + default => 0, + optional => 1, + } }, }, returns => { @@ -758,6 +765,7 @@ __PACKAGE__->register_method({ $conf, { lock => 'destroyed' }, $param->{'destroy-unreferenced-disks'}, + $param->{'force-remove-storage'}, ); PVE::AccessControl::remove_vm_access($vmid); diff --git a/src/PVE/LXC.pm b/src/PVE/LXC.pm index fe63087..74c8d17 100644 --- a/src/PVE/LXC.pm +++ b/src/PVE/LXC.pm @@ -848,13 +848,22 @@ sub get_primary_ips { } sub delete_mountpoint_volume { - my ($storage_cfg, $vmid, $volume) = @_; + my ($storage_cfg, $vmid, $volume, $force_remove_storage) = @_; return if PVE::LXC::Config->classify_mountpoint($volume) ne 'volume'; - my ($vtype, $name, $owner) = PVE::Storage::parse_volname($storage_cfg, $volume); + my ($vtype, $name, $owner); + eval { + ($vtype, $name, $owner) = PVE::Storage::parse_volname($storage_cfg, $volume); + }; - if ($vmid == $owner) { + if (!$force_remove_storage && $@) { + die $@; + } elsif ($@) { + # $force_remove_storage == true is implied here + warn "storage not available, can't remove $volume disk image, continuing!\n" + . "error: $@\n"; + } elsif ($vmid == $owner) { PVE::Storage::vdisk_free($storage_cfg, $volume); } else { warn "ignore deletion of '$volume', CT $vmid isn't the owner!\n"; @@ -862,7 +871,8 @@ sub delete_mountpoint_volume { } sub destroy_lxc_container { - my ($storage_cfg, $vmid, $conf, $replacement_conf, $purge_unreferenced) = @_; + my ($storage_cfg, $vmid, $conf, $replacement_conf, + $purge_unreferenced, $force_remove_storage) = @_; my $volids = {}; my $remove_volume = sub { @@ -873,7 +883,7 @@ sub destroy_lxc_container { return if $volids->{$volume}; $volids->{$volume} = 1; - delete_mountpoint_volume($storage_cfg, $vmid, $volume); + delete_mountpoint_volume($storage_cfg, $vmid, $volume, $force_remove_storage); }; PVE::LXC::Config->foreach_volume_full($conf, {include_unused => 1}, $remove_volume); -- 2.30.2 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel