code cleanups for ZFSPlugin

This commit is contained in:
Dietmar Maurer
2013-10-02 06:54:56 +02:00
parent 4f914e6ec0
commit 5332e6c97e

View File

@ -4,9 +4,8 @@ use strict;
use warnings; use warnings;
use IO::File; use IO::File;
use POSIX; use POSIX;
use PVE::Tools qw(run_command file_read_firstline trim dir_glob_regex dir_glob_foreach); use PVE::Tools qw(run_command);
use PVE::Storage::Plugin; use PVE::Storage::Plugin;
use PVE::JSONSchema qw(get_standard_option);
use Digest::MD5 qw(md5_hex); use Digest::MD5 qw(md5_hex);
use base qw(PVE::Storage::Plugin); use base qw(PVE::Storage::Plugin);
@ -17,16 +16,11 @@ my @ssh_cmd = ('/usr/bin/ssh', @ssh_opts);
sub zfs_request { sub zfs_request {
my ($scfg, $timeout, $method, @params) = @_; my ($scfg, $timeout, $method, @params) = @_;
my $cmdmap = (); my $cmdmap;
my $msg = '';
my $zfscmd; my $zfscmd;
my $target; my $target;
$timeout = 5 if !$timeout;
my $output = sub { $timeout = 5 if !$timeout;
my $line = shift;
$msg .= "$line\n";
};
if ($scfg->{iscsiprovider} eq 'comstar') { if ($scfg->{iscsiprovider} eq 'comstar') {
my $stmfadmcmd = "/usr/sbin/stmfadm"; my $stmfadmcmd = "/usr/sbin/stmfadm";
@ -53,7 +47,6 @@ sub zfs_request {
$zfscmd = 'zfs'; $zfscmd = 'zfs';
} }
if ($scfg->{sudo}) { if ($scfg->{sudo}) {
$zfscmd = 'sudo ' . $zfscmd; $zfscmd = 'sudo ' . $zfscmd;
$target = $scfg->{portal}; $target = $scfg->{portal};
@ -63,6 +56,13 @@ sub zfs_request {
my $cmd = [@ssh_cmd, $target, $zfscmd, $method, @params]; my $cmd = [@ssh_cmd, $target, $zfscmd, $method, @params];
my $msg = '';
my $output = sub {
my $line = shift;
$msg .= "$line\n";
};
run_command($cmd, outfunc => $output, timeout => $timeout); run_command($cmd, outfunc => $output, timeout => $timeout);
return $msg; return $msg;
@ -96,25 +96,25 @@ sub zfs_parse_size {
} }
sub zfs_get_pool_stats { sub zfs_get_pool_stats {
my ($scfg) = @_; my ($scfg) = @_;
my $size = 0; my $size = 0;
my $used = 0; my $used = 0;
my $text = zfs_request($scfg, undef, 'get', '-o', 'value', '-Hp', my $text = zfs_request($scfg, undef, 'get', '-o', 'value', '-Hp',
'available,used', $scfg->{pool}); 'available,used', $scfg->{pool});
my @lines = split /\n/, $text; my @lines = split /\n/, $text;
if($lines[0] =~ /^(\d+)$/) { if($lines[0] =~ /^(\d+)$/) {
$size = $1; $size = $1;
} }
if($lines[1] =~ /^(\d+)$/) { if($lines[1] =~ /^(\d+)$/) {
$used = $1; $used = $1;
} }
return ($size, $used); return ($size, $used);
} }
sub zfs_parse_zvol_list { sub zfs_parse_zvol_list {
@ -137,8 +137,7 @@ sub zfs_parse_zvol_list {
$disk = $zvols[1]; $disk = $zvols[1];
next unless $disk =~ m!^(\w+)-(\d+)-(\w+)-(\d+)$!; next unless $disk =~ m!^(\w+)-(\d+)-(\w+)-(\d+)$!;
$name = $pool . '/' . $disk; $name = $pool . '/' . $disk;
} } else {
else {
next; next;
} }
@ -160,8 +159,7 @@ sub zfs_get_lu_name {
if ($zvol =~ /^.+\/.+/) { if ($zvol =~ /^.+\/.+/) {
$object = "/dev/zvol/rdsk/$zvol"; $object = "/dev/zvol/rdsk/$zvol";
} } else {
else {
$object = "/dev/zvol/rdsk/$scfg->{pool}/$zvol"; $object = "/dev/zvol/rdsk/$scfg->{pool}/$zvol";
} }
@ -273,13 +271,9 @@ sub zfs_list_zvol {
my $pool = $values[0]; my $pool = $values[0];
my $image = $values[1]; my $image = $values[1];
my $owner;
if ($image =~ m/^((vm|base)-(\d+)-\S+)$/) { next if $image !~ m/^((vm|base)-(\d+)-\S+)$/;
$owner = $3; my $owner = $3;
}
else {
next;
}
my $parent = $zvol->{origin}; my $parent = $zvol->{origin};
if($zvol->{origin} && $zvol->{origin} =~ m/^$scfg->{pool}\/(\S+)$/){ if($zvol->{origin} && $zvol->{origin} =~ m/^$scfg->{pool}\/(\S+)$/){
@ -616,11 +610,13 @@ sub volume_has_feature {
$class->parse_volname($volname); $class->parse_volname($volname);
my $key = undef; my $key = undef;
if($snapname){
if ($snapname) {
$key = 'snap'; $key = 'snap';
} else { } else {
$key = $isBase ? 'base' : 'current'; $key = $isBase ? 'base' : 'current';
} }
return 1 if $features->{$feature}->{$key}; return 1 if $features->{$feature}->{$key};
return undef; return undef;