Two install-time failures on PVE 8.4.x nodes: 1. 'patch' utility not in Depends — causes silent patch failure on fresh nodes; all three PVE file patches silently skip, plugin appears to install but storage operations fail. Added 'patch' to control.j2. 2. ZFSPlugin.pm routing not applied on PVE 8.4.x — tabs→spaces reformat and get_base($scfg) signature change in 8.4 broke hunks #3 and #4 (the freenas elsif routing branches). Nodes with a prior partial install are doubly affected: grep idempotency check passes on partial freenas strings, so the routing is never applied, causing: "freenas: unknown iscsi provider" on clone/migrate operations. New ZFSPlugin-8.4.14_1.pm.patch generated against stock PVE 8.4.19, bundled as patches/ZFSPlugin/8.4.patch alongside existing 8.patch. Verified clean on pve01-hq (8.4.19) and pve02-hq (8.4.14). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
b936e42460
commit
3b3cc8d135
|
|
@ -187,6 +187,11 @@ jobs:
|
||||||
# PVE 8 patches (8.0.x – 8.3.x)
|
# PVE 8 patches (8.0.x – 8.3.x)
|
||||||
cp stable-8/perl5/PVE/Storage/ZFSPlugin.pm.patch \
|
cp stable-8/perl5/PVE/Storage/ZFSPlugin.pm.patch \
|
||||||
"${STAGING}/usr/share/freenas-proxmox/patches/ZFSPlugin/8.patch"
|
"${STAGING}/usr/share/freenas-proxmox/patches/ZFSPlugin/8.patch"
|
||||||
|
|
||||||
|
# PVE 8.4.x ZFSPlugin patch — indentation changed in 8.4, incompatible with 8.patch
|
||||||
|
cp stable-8/perl5/PVE/Storage/ZFSPlugin-8.4.14_1.pm.patch \
|
||||||
|
"${STAGING}/usr/share/freenas-proxmox/patches/ZFSPlugin/8.4.patch"
|
||||||
|
echo "Bundled PVE 8.4.x ZFSPlugin patch"
|
||||||
cp stable-8/pve-manager/js/pvemanagerlib.js.patch \
|
cp stable-8/pve-manager/js/pvemanagerlib.js.patch \
|
||||||
"${STAGING}/usr/share/freenas-proxmox/patches/pvemanagerlib/8.patch"
|
"${STAGING}/usr/share/freenas-proxmox/patches/pvemanagerlib/8.patch"
|
||||||
cp stable-8/pve-docs/api-viewer/apidoc.js.patch \
|
cp stable-8/pve-docs/api-viewer/apidoc.js.patch \
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ Package: freenas-proxmox
|
||||||
Version: ${VERSION}
|
Version: ${VERSION}
|
||||||
Architecture: all
|
Architecture: all
|
||||||
Maintainer: KSA Technologies, LLC <theprofessor@ksatechnologies.com>
|
Maintainer: KSA Technologies, LLC <theprofessor@ksatechnologies.com>
|
||||||
Depends: librest-client-perl
|
Depends: librest-client-perl, patch
|
||||||
Section: perl
|
Section: perl
|
||||||
Priority: optional
|
Priority: optional
|
||||||
Homepage: https://github.com/TheGrandWazoo/freenas-proxmox
|
Homepage: https://github.com/TheGrandWazoo/freenas-proxmox
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,106 @@
|
||||||
|
--- /tmp/ZFSPlugin-8.4.19-stock.pm 2026-05-19 23:09:15.498561777 -0400
|
||||||
|
+++ /tmp/ZFSPlugin-8.4.19-patched.pm 2026-05-19 23:13:40.830560931 -0400
|
||||||
|
@@ -11,6 +11,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,6 +27,7 @@
|
||||||
|
modify_lu => 1,
|
||||||
|
add_view => 1,
|
||||||
|
list_view => 1,
|
||||||
|
+ list_extent => 1,
|
||||||
|
list_lu => 1,
|
||||||
|
};
|
||||||
|
|
||||||
|
@@ -44,6 +46,8 @@
|
||||||
|
return PVE::Storage::LunCmd::Istgt::get_base($scfg);
|
||||||
|
} elsif ($scfg->{iscsiprovider} eq 'iet') {
|
||||||
|
return PVE::Storage::LunCmd::Iet::get_base($scfg);
|
||||||
|
+ } elsif ($scfg->{iscsiprovider} eq 'freenas') {
|
||||||
|
+ return PVE::Storage::LunCmd::FreeNAS::get_base($scfg);
|
||||||
|
} elsif ($scfg->{iscsiprovider} eq 'LIO') {
|
||||||
|
return PVE::Storage::LunCmd::LIO::get_base($scfg);
|
||||||
|
} else {
|
||||||
|
@@ -67,6 +71,8 @@
|
||||||
|
$msg = PVE::Storage::LunCmd::Istgt::run_lun_command($scfg, $timeout, $method, @params);
|
||||||
|
} elsif ($scfg->{iscsiprovider} eq 'iet') {
|
||||||
|
$msg = PVE::Storage::LunCmd::Iet::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 'LIO') {
|
||||||
|
$msg = PVE::Storage::LunCmd::LIO::run_lun_command($scfg, $timeout, $method, @params);
|
||||||
|
} else {
|
||||||
|
@@ -158,7 +164,7 @@
|
||||||
|
sub zfs_get_lun_number {
|
||||||
|
my ($class, $scfg, $guid) = @_;
|
||||||
|
|
||||||
|
- die "could not find lun_number for guid $guid" if !$guid;
|
||||||
|
+ die "could not find lun_number for guid $guid" if !defined $guid;
|
||||||
|
|
||||||
|
if ($class->zfs_request($scfg, undef, 'list_view', $guid) =~ /^(\d+)$/) {
|
||||||
|
return $1;
|
||||||
|
@@ -167,6 +173,14 @@
|
||||||
|
die "lun_number for guid $guid is not a number";
|
||||||
|
}
|
||||||
|
|
||||||
|
+sub zfs_get_wwid_number {
|
||||||
|
+ my ($class, $scfg, $guid) = @_;
|
||||||
|
+
|
||||||
|
+ die "could not find lun_number for guid $guid" if !defined $guid;
|
||||||
|
+
|
||||||
|
+ return $class->zfs_request($scfg, undef, 'list_extent', $guid);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
# Configuration
|
||||||
|
|
||||||
|
sub type {
|
||||||
|
@@ -186,6 +200,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
|
||||||
|
@@ -224,6 +264,12 @@
|
||||||
|
blocksize => { fixed => 1 },
|
||||||
|
iscsiprovider => { fixed => 1 },
|
||||||
|
nowritecache => { 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 },
|
||||||
|
sparse => { optional => 1 },
|
||||||
|
comstar_hg => { optional => 1 },
|
||||||
|
comstar_tg => { optional => 1 },
|
||||||
Loading…
Reference in New Issue