$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);
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) = @_;
$class->__snapshot_freeze($vmid, 0);
}
+ $class->__snapshot_create_vol_snapshots_hook($vmid, $snap, $running, "before");
+
$class->__snapshot_foreach_volume($snap, sub {
my ($vs, $volume) = @_;
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) {
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;
# save changes (remove mp from snapshot)
$class->lock_config($vmid, $updatefn, $vs) if !$force;
- push @$unused, $volume->{volume};
});
# now cleanup config