forked from beam/freenas-proxmox
-
-
Notifications
You must be signed in to change notification settings - Fork 41
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Update for Proxmox 8 and Bearer Token
- Patch updates for Proxmox VE 8 - Update to select Basic or Bearer authentication.
- Loading branch information
1 parent
466d819
commit b9dd1d6
Showing
17 changed files
with
117,413 additions
and
1,268 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,157 @@ | ||
--- ZFSPlugin.pm.orig 2023-12-31 09:56:18.895228853 -0500 | ||
+++ ZFSPlugin.pm 2023-12-31 09:57:08.830488875 -0500 | ||
@@ -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; | ||
@@ -26,13 +27,14 @@ | ||
modify_lu => 1, | ||
add_view => 1, | ||
list_view => 1, | ||
+ list_extent => 1, | ||
list_lu => 1, | ||
}; | ||
|
||
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 +42,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 +66,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') { | ||
@@ -166,6 +172,15 @@ | ||
die "lun_number for guid $guid is not a number"; | ||
} | ||
|
||
+# 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 { | ||
@@ -184,6 +199,32 @@ | ||
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 (Deprecated)", | ||
+ type => 'string', | ||
+ }, | ||
+ truenas_secret => { | ||
+ description => "TrueNAS API Secret", | ||
+ type => 'string', | ||
+ }, | ||
+ truenas_token_auth => { | ||
+ description => "TrueNAS API Authentication with Token", | ||
+ type => 'boolean', | ||
+ }, | ||
+ 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 | ||
@@ -211,14 +252,20 @@ | ||
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 }, | ||
+ truenas_secret => { optional => 1 }, | ||
+ truenas_token_auth => { optional => 1 }, | ||
+ freenas_use_ssl => { optional => 1 }, | ||
+ freenas_apiv4_host => { optional => 1 }, | ||
lio_tpg => { optional => 1 }, | ||
content => { optional => 1 }, | ||
bwlimit => { optional => 1 }, | ||
@@ -243,6 +290,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 = `/usr/sbin/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); | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,91 @@ | ||
--- apidoc.js.orig 2024-01-06 13:02:06.730512378 -0500 | ||
+++ apidoc.js 2024-01-06 13:02:55.349787105 -0500 | ||
@@ -50336,6 +50336,37 @@ | ||
"type" : "string", | ||
"typetext" : "<string>" | ||
}, | ||
+ "freenas_user" : { | ||
+ "description" : "FreeNAS user for API access", | ||
+ "optional" : 1, | ||
+ "type" : "string", | ||
+ "typetext" : "<string>" | ||
+ }, | ||
+ "freenas_password" : { | ||
+ "description" : "FreeNAS password for API access (Deprecated)", | ||
+ "optional" : 1, | ||
+ "type" : "string", | ||
+ "typetext" : "<string>" | ||
+ }, | ||
+ "truenas_secret" : { | ||
+ "description" : "TrueNAS Secret for API access", | ||
+ "optional" : 1, | ||
+ "type" : "string", | ||
+ "typetext" : "<string>" | ||
+ }, | ||
+ "freenas_use_ssl" : { | ||
+ "description" : "FreeNAS API access via SSL", | ||
+ "optional" : 1, | ||
+ "type" : "boolean", | ||
+ "typetext" : "<boolean>" | ||
+ }, | ||
+ "freenas_apiv4_host" : { | ||
+ "description" : "FreeNAS API Host via IPv4", | ||
+ "format" : "address", | ||
+ "optional" : 1, | ||
+ "type" : "string", | ||
+ "typetext" : "<string>" | ||
+ }, | ||
"fuse" : { | ||
"description" : "Mount CephFS through FUSE.", | ||
"optional" : 1, | ||
@@ -50555,6 +50586,12 @@ | ||
"type" : "boolean", | ||
"typetext" : "<boolean>" | ||
}, | ||
+ "target" : { | ||
+ "description" : "iSCSI target.", | ||
+ "optional" : 1, | ||
+ "type" : "string", | ||
+ "typetext" : "<string>" | ||
+ }, | ||
"transport" : { | ||
"description" : "Gluster transport: tcp or rdma", | ||
"enum" : [ | ||
@@ -50854,6 +50891,37 @@ | ||
"optional" : 1, | ||
"type" : "string", | ||
"typetext" : "<string>" | ||
+ }, | ||
+ "freenas_user" : { | ||
+ "description" : "FreeNAS user for API access", | ||
+ "optional" : 1, | ||
+ "type" : "string", | ||
+ "typetext" : "<string>" | ||
+ }, | ||
+ "freenas_password" : { | ||
+ "description" : "FreeNAS password for API access (Deprecated)", | ||
+ "optional" : 1, | ||
+ "type" : "string", | ||
+ "typetext" : "<string>" | ||
+ }, | ||
+ "truenas_secret" : { | ||
+ "description" : "TrueNAS secret for API access", | ||
+ "optional" : 1, | ||
+ "type" : "string", | ||
+ "typetext" : "<string>" | ||
+ }, | ||
+ "freenas_use_ssl" : { | ||
+ "description" : "FreeNAS API access via SSL", | ||
+ "optional" : 1, | ||
+ "type" : "boolean", | ||
+ "typetext" : "<boolean>" | ||
+ }, | ||
+ "freenas_apiv4_host" : { | ||
+ "description" : "FreeNAS API Host via IPv4", | ||
+ "format" : "address", | ||
+ "optional" : 1, | ||
+ "type" : "string", | ||
+ "typetext" : "<string>" | ||
}, | ||
"fuse" : { | ||
"description" : "Mount CephFS through FUSE.", |
Oops, something went wrong.