Fix 'Parameter verification failed' when editing
- When changing the 'target' and 'pool' field to be editable in the Edit
ZFS over iSCSI panel it created an issue when you went to save any
change to that panel. The parameters were defined as { fixed => 1 }. Now
I don't know the backend of this but I changed it to { optional => 1} or
to { fixed => 0} they both worked. So I went with the { fixed => 0 } on
the 'target' and 'pool'. This fixes issue #27.
- Added a file with the version of the 'libpve-storage-perl' (e.g. -
ZFSPlugin-5.0-30.pm.patch to follow each version has it is changed.
This commit is contained in:
parent
c487158579
commit
64afc5a70a
|
|
@ -0,0 +1,140 @@
|
|||
--- ZFSPlugin.pm.orig 2018-10-03 11:02:46.000000000 -0400
|
||||
+++ ZFSPlugin.pm 2018-10-28 21:27:44.794732848 -0400
|
||||
@@ -10,6 +10,7 @@
|
||||
|
||||
use base qw(PVE::Storage::ZFSPoolPlugin);
|
||||
use PVE::Storage::LunCmd::Comstar;
|
||||
+use PVE::Storage::LunCmd::FreeNAS;
|
||||
use PVE::Storage::LunCmd::Istgt;
|
||||
use PVE::Storage::LunCmd::Iet;
|
||||
use PVE::Storage::LunCmd::LIO;
|
||||
@@ -32,7 +33,7 @@
|
||||
my $zfs_unknown_scsi_provider = sub {
|
||||
my ($provider) = @_;
|
||||
|
||||
- die "$provider: unknown iscsi provider. Available [comstar, istgt, iet, LIO]";
|
||||
+ die "$provider: unknown iscsi provider. Available [comstar, freenas, istgt, iet, LIO]";
|
||||
};
|
||||
|
||||
my $zfs_get_base = sub {
|
||||
@@ -40,6 +41,8 @@
|
||||
|
||||
if ($scfg->{iscsiprovider} eq 'comstar') {
|
||||
return PVE::Storage::LunCmd::Comstar::get_base;
|
||||
+ } elsif ($scfg->{iscsiprovider} eq 'freenas') {
|
||||
+ return PVE::Storage::LunCmd::FreeNAS::get_base;
|
||||
} elsif ($scfg->{iscsiprovider} eq 'istgt') {
|
||||
return PVE::Storage::LunCmd::Istgt::get_base;
|
||||
} elsif ($scfg->{iscsiprovider} eq 'iet') {
|
||||
@@ -62,6 +65,8 @@
|
||||
if ($lun_cmds->{$method}) {
|
||||
if ($scfg->{iscsiprovider} eq 'comstar') {
|
||||
$msg = PVE::Storage::LunCmd::Comstar::run_lun_command($scfg, $timeout, $method, @params);
|
||||
+ } elsif ($scfg->{iscsiprovider} eq 'freenas') {
|
||||
+ $msg = PVE::Storage::LunCmd::FreeNAS::run_lun_command($scfg, $timeout, $method, @params);
|
||||
} elsif ($scfg->{iscsiprovider} eq 'istgt') {
|
||||
$msg = PVE::Storage::LunCmd::Istgt::run_lun_command($scfg, $timeout, $method, @params);
|
||||
} elsif ($scfg->{iscsiprovider} eq 'iet') {
|
||||
@@ -160,6 +165,15 @@
|
||||
return $class->zfs_request($scfg, undef, 'list_view', $guid);
|
||||
}
|
||||
|
||||
+# Part of the multipath enhancement
|
||||
+sub zfs_get_wwid_number {
|
||||
+ my ($class, $scfg, $guid) = @_;
|
||||
+
|
||||
+ die "could not find lun_number for guid $guid" if !$guid;
|
||||
+
|
||||
+ return $class->zfs_request($scfg, undef, 'list_extent', $guid);
|
||||
+}
|
||||
+
|
||||
# Configuration
|
||||
|
||||
sub type {
|
||||
@@ -178,6 +192,24 @@
|
||||
description => "iscsi provider",
|
||||
type => 'string',
|
||||
},
|
||||
+ # This is for FreeNAS iscsi and API intergration
|
||||
+ # And some enhancements asked by the community
|
||||
+ freenas_user => {
|
||||
+ description => "FreeNAS API Username",
|
||||
+ type => 'string',
|
||||
+ },
|
||||
+ freenas_password => {
|
||||
+ description => "FreeNAS API Password",
|
||||
+ type => 'string',
|
||||
+ },
|
||||
+ freenas_use_ssl => {
|
||||
+ description => "FreeNAS API access via SSL",
|
||||
+ type => 'boolean',
|
||||
+ },
|
||||
+ freenas_apiv4_host => {
|
||||
+ description => "FreeNAS API Host",
|
||||
+ type => 'string',
|
||||
+ },
|
||||
# this will disable write caching on comstar and istgt.
|
||||
# it is not implemented for iet. iet blockio always operates with
|
||||
# writethrough caching when not in readonly mode
|
||||
@@ -205,14 +237,18 @@
|
||||
nodes => { optional => 1 },
|
||||
disable => { optional => 1 },
|
||||
portal => { fixed => 1 },
|
||||
- target => { fixed => 1 },
|
||||
- pool => { fixed => 1 },
|
||||
+ target => { fixed => 0 },
|
||||
+ pool => { fixed => 0 },
|
||||
blocksize => { fixed => 1 },
|
||||
iscsiprovider => { fixed => 1 },
|
||||
nowritecache => { optional => 1 },
|
||||
sparse => { optional => 1 },
|
||||
comstar_hg => { optional => 1 },
|
||||
comstar_tg => { optional => 1 },
|
||||
+ freenas_user => { optional => 1 },
|
||||
+ freenas_password => { optional => 1 },
|
||||
+ freenas_use_ssl => { optional => 1 },
|
||||
+ freenas_apiv4_host => { optional => 1 },
|
||||
lio_tpg => { optional => 1 },
|
||||
content => { optional => 1 },
|
||||
bwlimit => { optional => 1 },
|
||||
@@ -237,6 +273,40 @@
|
||||
|
||||
my $path = "iscsi://$portal/$target/$lun";
|
||||
|
||||
+ # Multipath enhancement
|
||||
+ eval {
|
||||
+ my $wwid = $class->zfs_get_wwid_number($scfg, $guid);
|
||||
+# syslog(info,"JD: path get_lun_number guid $guid");
|
||||
+
|
||||
+ if ($wwid =~ /^([-\@\w.]+)$/) {
|
||||
+ $wwid = $1; # $data now untainted
|
||||
+ } else {
|
||||
+ die "Bad data in '$wwid'"; # log this somewhere
|
||||
+ }
|
||||
+ my $wwid_end = substr $wwid, 16;
|
||||
+
|
||||
+ my $mapper = '';
|
||||
+ sleep 3;
|
||||
+ run_command("iscsiadm -m session --rescan");
|
||||
+ sleep 3;
|
||||
+ my $line = `multipath -ll | grep \"$wwid_end\"`;
|
||||
+ my ($mapper_device) = split(' ', $line);
|
||||
+ $mapper_device = "" unless $mapper_device;
|
||||
+ $mapper .= $mapper_device;
|
||||
+
|
||||
+ if ($mapper =~ /^([-\@\w.]+)$/) {
|
||||
+ $mapper = $1; # $data now untainted
|
||||
+ } else {
|
||||
+ $mapper = '';
|
||||
+ }
|
||||
+
|
||||
+# syslog(info,"Multipath mapper found: $mapper\n");
|
||||
+ if ($mapper ne "") {
|
||||
+ $path = "/dev/mapper/$mapper";
|
||||
+ sleep 5;
|
||||
+ }
|
||||
+ };
|
||||
+
|
||||
return ($path, $vmid, $vtype);
|
||||
}
|
||||
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
--- ZFSPlugin.pm.5.2-8.pm.orig 2018-08-29 12:24:44.171123901 -0400
|
||||
+++ ZFSPlugin.pm 2018-10-15 12:17:52.026049903 -0400
|
||||
--- ZFSPlugin.pm.orig 2018-10-03 11:02:46.000000000 -0400
|
||||
+++ ZFSPlugin.pm 2018-10-28 21:27:44.794732848 -0400
|
||||
@@ -10,6 +10,7 @@
|
||||
|
||||
use base qw(PVE::Storage::ZFSPoolPlugin);
|
||||
|
|
@ -51,77 +51,88 @@
|
|||
# Configuration
|
||||
|
||||
sub type {
|
||||
@@ -178,6 +192,23 @@
|
||||
@@ -178,6 +192,24 @@
|
||||
description => "iscsi provider",
|
||||
type => 'string',
|
||||
},
|
||||
+ # This is for FreeNAS iscsi and API intergration
|
||||
+ freenas_user => {
|
||||
+ description => "FreeNAS API Username",
|
||||
+ type => 'string',
|
||||
+ },
|
||||
+ freenas_password => {
|
||||
+ description => "FreeNAS API Password",
|
||||
+ type => 'string',
|
||||
+ },
|
||||
+ freenas_use_ssl => {
|
||||
+ description => "FreeNAS API access via SSL",
|
||||
+ type => 'boolean',
|
||||
+ },
|
||||
+ freenas_apiv4_host => {
|
||||
+ description => "FreeNAS API Host",
|
||||
+ type => 'string',
|
||||
+ },
|
||||
+ # This is for FreeNAS iscsi and API intergration
|
||||
+ # And some enhancements asked by the community
|
||||
+ freenas_user => {
|
||||
+ description => "FreeNAS API Username",
|
||||
+ type => 'string',
|
||||
+ },
|
||||
+ freenas_password => {
|
||||
+ description => "FreeNAS API Password",
|
||||
+ type => 'string',
|
||||
+ },
|
||||
+ freenas_use_ssl => {
|
||||
+ description => "FreeNAS API access via SSL",
|
||||
+ type => 'boolean',
|
||||
+ },
|
||||
+ freenas_apiv4_host => {
|
||||
+ description => "FreeNAS API Host",
|
||||
+ type => 'string',
|
||||
+ },
|
||||
# this will disable write caching on comstar and istgt.
|
||||
# it is not implemented for iet. iet blockio always operates with
|
||||
# writethrough caching when not in readonly mode
|
||||
@@ -213,6 +244,10 @@
|
||||
@@ -205,14 +237,18 @@
|
||||
nodes => { optional => 1 },
|
||||
disable => { optional => 1 },
|
||||
portal => { fixed => 1 },
|
||||
- target => { fixed => 1 },
|
||||
- pool => { fixed => 1 },
|
||||
+ target => { fixed => 0 },
|
||||
+ pool => { fixed => 0 },
|
||||
blocksize => { fixed => 1 },
|
||||
iscsiprovider => { fixed => 1 },
|
||||
nowritecache => { optional => 1 },
|
||||
sparse => { optional => 1 },
|
||||
comstar_hg => { optional => 1 },
|
||||
comstar_tg => { optional => 1 },
|
||||
+ freenas_user => { optional => 1 },
|
||||
+ freenas_password => { optional => 1 },
|
||||
+ freenas_use_ssl => { optional => 1 },
|
||||
+ freenas_apiv4_host => { optional => 1 },
|
||||
+ freenas_user => { optional => 1 },
|
||||
+ freenas_password => { optional => 1 },
|
||||
+ freenas_use_ssl => { optional => 1 },
|
||||
+ freenas_apiv4_host => { optional => 1 },
|
||||
lio_tpg => { optional => 1 },
|
||||
content => { optional => 1 },
|
||||
bwlimit => { optional => 1 },
|
||||
@@ -237,6 +272,40 @@
|
||||
@@ -237,6 +273,40 @@
|
||||
|
||||
my $path = "iscsi://$portal/$target/$lun";
|
||||
|
||||
+ # Multipath enhancement
|
||||
+ eval {
|
||||
+ my $wwid = $class->zfs_get_wwid_number($scfg, $guid);
|
||||
+# syslog(info,"JD: path get_lun_number guid $guid");
|
||||
+ my $wwid = $class->zfs_get_wwid_number($scfg, $guid);
|
||||
+# syslog(info,"JD: path get_lun_number guid $guid");
|
||||
+
|
||||
+ if ($wwid =~ /^([-\@\w.]+)$/) {
|
||||
+ $wwid = $1; # $data now untainted
|
||||
+ } else {
|
||||
+ die "Bad data in '$wwid'"; # log this somewhere
|
||||
+ }
|
||||
+ my $wwid_end = substr $wwid, 16;
|
||||
+ if ($wwid =~ /^([-\@\w.]+)$/) {
|
||||
+ $wwid = $1; # $data now untainted
|
||||
+ } else {
|
||||
+ die "Bad data in '$wwid'"; # log this somewhere
|
||||
+ }
|
||||
+ my $wwid_end = substr $wwid, 16;
|
||||
+
|
||||
+ my $mapper = '';
|
||||
+ sleep 3;
|
||||
+ run_command("iscsiadm -m session --rescan");
|
||||
+ sleep 3;
|
||||
+ my $line = `multipath -ll | grep \"$wwid_end\"`;
|
||||
+ my ($mapper_device) = split(' ', $line);
|
||||
+ $mapper_device = "" unless $mapper_device;
|
||||
+ $mapper .= $mapper_device;
|
||||
+ my $mapper = '';
|
||||
+ sleep 3;
|
||||
+ run_command("iscsiadm -m session --rescan");
|
||||
+ sleep 3;
|
||||
+ my $line = `multipath -ll | grep \"$wwid_end\"`;
|
||||
+ my ($mapper_device) = split(' ', $line);
|
||||
+ $mapper_device = "" unless $mapper_device;
|
||||
+ $mapper .= $mapper_device;
|
||||
+
|
||||
+ if ($mapper =~ /^([-\@\w.]+)$/) {
|
||||
+ $mapper = $1; # $data now untainted
|
||||
+ } else {
|
||||
+ $mapper = '';
|
||||
+ }
|
||||
+ if ($mapper =~ /^([-\@\w.]+)$/) {
|
||||
+ $mapper = $1; # $data now untainted
|
||||
+ } else {
|
||||
+ $mapper = '';
|
||||
+ }
|
||||
+
|
||||
+# syslog(info,"Multipath mapper found: $mapper\n");
|
||||
+ if ($mapper ne "") {
|
||||
+ $path = "/dev/mapper/$mapper";
|
||||
+ sleep 5;
|
||||
+ }
|
||||
+# syslog(info,"Multipath mapper found: $mapper\n");
|
||||
+ if ($mapper ne "") {
|
||||
+ $path = "/dev/mapper/$mapper";
|
||||
+ sleep 5;
|
||||
+ }
|
||||
+ };
|
||||
+
|
||||
return ($path, $vmid, $vtype);
|
||||
|
|
|
|||
Loading…
Reference in New Issue