die "abstract method - implement me\n";
}
+# Get list of volume IDs which are referenced in $conf, but not in $snap.
+sub __snapshot_rollback_get_unused {
+ my ($class, $conf, $snap) = @_;
+
+ die "abstract method - implement me\n";
+}
+
# Iterate over all configured volumes, calling $func for each key/value pair.
sub __snapshot_foreach_volume {
my ($class, $conf, $func) = @_;
my $snap;
my $unused = [];
+ $class->set_lock($vmid, 'snapshot-delete')
+ if (!$drivehash); # doesn't already have a 'snapshot' lock
+
my $unlink_parent = sub {
my ($confref, $new_parent) = @_;
my $conf = $class->load_config($vmid);
if (!$drivehash) {
- $class->check_lock($conf);
die "you can't delete a snapshot if vm is a template\n"
if $class->is_template($conf);
}
$snap->{snapstate} = 'delete';
} else {
delete $conf->{snapshots}->{$snapname};
- delete $conf->{lock} if $drivehash;
+ delete $conf->{lock};
foreach my $volid (@$unused) {
$class->add_unused_volume($conf, $volid);
}
my $forcemachine;
if (!$prepare) {
+ my $unused = $class->__snapshot_rollback_get_unused($conf, $snap);
+
+ foreach my $volid (@$unused) {
+ $class->add_unused_volume($conf, $volid);
+ }
+
my $has_machine_config = defined($conf->{machine});
# copy snapshot config to current config