]> git.proxmox.com Git - qemu-server.git/commitdiff
check if base volumes are unused before deleting a template
authorDominik Csapak <d.csapak@proxmox.com>
Fri, 13 Oct 2017 08:00:53 +0000 (10:00 +0200)
committerFabian Grünbichler <f.gruenbichler@proxmox.com>
Fri, 13 Oct 2017 08:18:34 +0000 (10:18 +0200)
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 <d.csapak@proxmox.com>
PVE/QemuServer.pm

index 2b6fda9ea7ab0a46d84c4ca2a2653e82f09b9f42..54775c185741be1b41b1e9a65d89b831acb652ad 100644 (file)
@@ -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) = @_;