die "unable to allocate an image name for VM $vmid in storage '$storeid'\n";
}
+sub zfs_get_latest_snapshot {
+ my ($class, $scfg, $volname) = @_;
+
+ # abort rollback if snapshot is not the latest
+ my @params = ('-t', 'snapshot', '-o', 'name', '-s', 'creation');
+ my $text = zfs_request($class, $scfg, undef, 'list', @params);
+ my @snapshots = split(/\n/, $text);
+
+ my $recentsnap;
+ foreach (@snapshots) {
+ if (/$scfg->{pool}\/$volname/) {
+ s/^.*@//;
+ $recentsnap = $_;
+ }
+ }
+
+ return $recentsnap;
+}
+
sub status {
my ($class, $storeid, $scfg, $cache) = @_;
my ($class, $scfg, $storeid, $volname, $snap) = @_;
# abort rollback if snapshot is not the latest
- my @params = ('-t', 'snapshot', '-o', 'name', '-s', 'creation');
- my $text = zfs_request($class, $scfg, undef,'list', @params);
- my @snapshots = split(/\n/, $text);
- my $recentsnap = undef;
- foreach (@snapshots) {
- if (/$scfg->{pool}\/$volname/) {
- s/^.*@//;
- $recentsnap = $_;
- }
- }
+ my $recentsnap = $class->zfs_get_latest_snapshot($scfg, $volname);
if ($snap ne $recentsnap) {
die "cannot rollback, more recent snapshots exist\n";
}
zfs_request($class, $scfg, undef, 'rollback', "$scfg->{pool}/$volname\@$snap");
-
}
sub activate_volume {
my ($class, $scfg, $storeid, $volname, $snap) = @_;
# abort rollback if snapshot is not the latest
- my @params = ('-t', 'snapshot', '-o', 'name', '-s', 'creation');
- my $text = $class->zfs_request($class, $scfg, undef, 'list', @params);
- my @snapshots = split(/\n/, $text);
- my $recentsnap = undef;
- foreach (@snapshots) {
- if (/$scfg->{pool}\/$volname/) {
- s/^.*@//;
- $recentsnap = $_;
- }
- }
+ my $recentsnap = $class->zfs_get_latest_snapshot($scfg, $volname);
if ($snap ne $recentsnap) {
die "cannot rollback, more recent snapshots exist\n";
}