From 5e67a2d2c40792294ca9f89129bc0bfb49e24878 Mon Sep 17 00:00:00 2001 From: Dominik Csapak Date: Fri, 13 Oct 2017 10:00:53 +0200 Subject: [PATCH] check if base volumes are unused before deleting a template we only checked if a vm had in use base disks when deleting them, at which point we do not stop to delete the vm even when a disk deletion fails, which means we could successfully delete the config and all not used (base) disks of a template, resulting in left over vm disks Signed-off-by: Dominik Csapak --- PVE/QemuServer.pm | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm index 2b6fda9e..54775c18 100644 --- a/PVE/QemuServer.pm +++ b/PVE/QemuServer.pm @@ -2111,6 +2111,23 @@ sub destroy_vm { PVE::QemuConfig->check_lock($conf) if !$skiplock; + if ($conf->{template}) { + # check if any base image is still used by a linked clone + foreach_drive($conf, sub { + my ($ds, $drive) = @_; + + return if drive_is_cdrom($drive); + + my $volid = $drive->{file}; + + return if !$volid || $volid =~ m|^/|; + + die "base volume '$volid' is still in use by linked cloned\n" + if PVE::Storage::volume_is_base_and_used($storecfg, $volid); + + }); + } + # only remove disks owned by this VM foreach_drive($conf, sub { my ($ds, $drive) = @_;