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:
committed by
Dietmar Maurer
parent
d4c63dc147
commit
2b40ffaea9
@ -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;
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user