zfs: move code fix metode call

duplicate code because can't refactor volume_snapshot_rollback

Signed-off-by: Wolfgang Link <w.link@proxmox.com>
This commit is contained in:
Wolfgang Link
2015-01-23 10:32:44 +01:00
committed by Dietmar Maurer
parent d4c63dc147
commit 2b40ffaea9
2 changed files with 50 additions and 2 deletions

View File

@ -388,6 +388,28 @@ sub volume_snapshot_delete {
$class->zfs_request($scfg, undef, 'destroy', "$scfg->{pool}/$volname\@$snap");
}
sub volume_snapshot_rollback {
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 = $_;
}
}
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, $storeid, $scfg, $volname, $exclusive, $cache) = @_;
return 1;
@ -398,4 +420,30 @@ sub deactivate_volume {
return 1;
}
sub volume_has_feature {
my ($class, $scfg, $feature, $storeid, $volname, $snapname, $running) = @_;
my $features = {
snapshot => { current => 1, snap => 1},
clone => { base => 1},
template => { current => 1},
copy => { base => 1, current => 1},
};
my ($vtype, $name, $vmid, $basename, $basevmid, $isBase) =
$class->parse_volname($volname);
my $key = undef;
if ($snapname) {
$key = 'snap';
} else {
$key = $isBase ? 'base' : 'current';
}
return 1 if $features->{$feature}->{$key};
return undef;
}
1;

View File

@ -325,7 +325,7 @@ sub volume_snapshot_rollback {
# abort rollback if snapshot is not the latest
my @params = ('-t', 'snapshot', '-o', 'name', '-s', 'creation');
my $text = $class->zfs_request($scfg, undef, 'list', @params);
my $text = $class->zfs_request($class, $scfg, undef, 'list', @params);
my @snapshots = split(/\n/, $text);
my $recentsnap = undef;
foreach (@snapshots) {
@ -340,7 +340,7 @@ sub volume_snapshot_rollback {
$class->zfs_delete_lu($scfg, $volname);
$class->zfs_request($scfg, undef, 'rollback', "$scfg->{pool}/$volname\@$snap");
$class->zfs_request($class, $scfg, undef, 'rollback', "$scfg->{pool}/$volname\@$snap");
$class->zfs_import_lu($scfg, $volname);