]> git.proxmox.com Git - pve-common.git/blobdiff - src/PVE/AbstractConfig.pm
Fix uninitialized subroutine error
[pve-common.git] / src / PVE / AbstractConfig.pm
index be6eb5cbb535b9d3fd42c65e6297f5737cfe2fb7..0799c8b3064dc23c6d1fcec1f39d31d0d972c1eb 100644 (file)
@@ -136,9 +136,10 @@ sub remove_lock {
     $class->lock_config($vmid, sub {
        my $conf = $class->load_config($vmid);
        if (!$conf->{lock}) {
-           die "no lock found trying to remove lock '$lock'\n";
+           my $lockstring = defined($lock) ? "'$lock' " : "any";
+           die "no lock found trying to remove $lockstring lock\n";
        } elsif (defined($lock) && $conf->{lock} ne $lock) {
-           die "found lock '$conf->{lock}' trying to remove lock '$lock'\n";
+           die "found lock '$conf->{lock}' trying to remove '$lock' lock\n";
        }
        delete $conf->{lock};
        $class->write_config($vmid, $conf);
@@ -221,6 +222,14 @@ sub __snapshot_freeze {
     die "abstract method - implement me\n";
 }
 
+# Code run before and after creating all the volume snapshots
+# base: noop
+sub __snapshot_create_vol_snapshots_hook {
+    my ($class, $vmid, $snap, $running, $hook) = @_;
+
+    return;
+}
+
 # Create the volume snapshots for the VM/CT.
 sub __snapshot_create_vol_snapshot {
     my ($class, $vmid, $vs, $volume, $snapname) = @_;
@@ -413,6 +422,8 @@ sub snapshot_create {
            $class->__snapshot_freeze($vmid, 0);
        }
 
+       $class->__snapshot_create_vol_snapshots_hook($vmid, $snap, $running, "before");
+
        $class->__snapshot_foreach_volume($snap, sub {
            my ($vs, $volume) = @_;
 
@@ -423,9 +434,11 @@ sub snapshot_create {
     my $err = $@;
 
     if ($running) {
+       $class->__snapshot_create_vol_snapshots_hook($vmid, $snap, $running, "after");
        if ($freezefs) {
            $class->__snapshot_freeze($vmid, 1);
        }
+       $class->__snapshot_create_vol_snapshots_hook($vmid, $snap, $running, "after-unfreeze");
     }
 
     if ($err) {
@@ -517,7 +530,7 @@ sub snapshot_delete {
 
        return if $snapname eq 'vzdump' && $vs ne 'rootfs' && !$volume->{backup};
        if (!$drivehash || $drivehash->{$vs}) {
-           eval { $class->__snapshot_delete_vol_snapshot($vmid, $vs, $volume, $snapname); };
+           eval { $class->__snapshot_delete_vol_snapshot($vmid, $vs, $volume, $snapname, $unused); };
            if (my $err = $@) {
                die $err if !$force;
                warn $err;
@@ -526,7 +539,6 @@ sub snapshot_delete {
 
        # save changes (remove mp from snapshot)
        $class->lock_config($vmid, $updatefn, $vs) if !$force;
-       push @$unused, $volume->{volume};
     });
 
     # now cleanup config