mirror of
https://github.com/GoodOlClint/PSProxmoxVE.git
synced 2026-09-04 11:15:34 +00:00
fix(storage): implement Portal defaulting for iSCSI, fix Pool/CephPool selection, add NFS format validation
Co-authored-by: GoodOlClint <151449+GoodOlClint@users.noreply.github.com> Agent-Logs-Url: https://github.com/GoodOlClint/PSProxmoxVE/sessions/d84722e4-409e-4ced-bfbc-f323715b8bdc
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Management.Automation;
|
using System.Management.Automation;
|
||||||
using Newtonsoft.Json.Linq;
|
using Newtonsoft.Json.Linq;
|
||||||
@@ -114,14 +115,32 @@ namespace PSProxmoxVE.Cmdlets.Storage
|
|||||||
|
|
||||||
AddIfNotEmpty(data, "content", Content);
|
AddIfNotEmpty(data, "content", Content);
|
||||||
AddIfNotEmpty(data, "path", Path);
|
AddIfNotEmpty(data, "path", Path);
|
||||||
AddIfNotEmpty(data, "server", Server);
|
|
||||||
AddIfNotEmpty(data, "export", Export);
|
AddIfNotEmpty(data, "export", Export);
|
||||||
AddIfNotEmpty(data, "vgname", VgName);
|
AddIfNotEmpty(data, "vgname", VgName);
|
||||||
AddIfNotEmpty(data, "thinpool", ThinPool);
|
AddIfNotEmpty(data, "thinpool", ThinPool);
|
||||||
AddIfNotEmpty(data, "pool", Pool ?? CephPool);
|
AddIfNotEmpty(data, "pool", !string.IsNullOrEmpty(Pool) ? Pool : CephPool);
|
||||||
AddIfNotEmpty(data, "monhost", MonHost);
|
AddIfNotEmpty(data, "monhost", MonHost);
|
||||||
AddIfNotEmpty(data, "target", Target);
|
AddIfNotEmpty(data, "target", Target);
|
||||||
AddIfNotEmpty(data, "portal", Portal);
|
|
||||||
|
// For iSCSI types, 'server' is not a valid API field; derive portal from Server if Portal omitted.
|
||||||
|
bool isIscsiType = string.Equals(Type, "iscsi", StringComparison.OrdinalIgnoreCase)
|
||||||
|
|| string.Equals(Type, "iscsidirect", StringComparison.OrdinalIgnoreCase);
|
||||||
|
if (isIscsiType)
|
||||||
|
{
|
||||||
|
string? portalValue;
|
||||||
|
if (!string.IsNullOrEmpty(Portal))
|
||||||
|
portalValue = Portal;
|
||||||
|
else if (!string.IsNullOrEmpty(Server))
|
||||||
|
portalValue = $"{Server}:3260";
|
||||||
|
else
|
||||||
|
portalValue = null;
|
||||||
|
AddIfNotEmpty(data, "portal", portalValue);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
AddIfNotEmpty(data, "server", Server);
|
||||||
|
AddIfNotEmpty(data, "portal", Portal);
|
||||||
|
}
|
||||||
AddIfNotEmpty(data, "nodes", Nodes);
|
AddIfNotEmpty(data, "nodes", Nodes);
|
||||||
if (Shared.IsPresent) data["shared"] = "1";
|
if (Shared.IsPresent) data["shared"] = "1";
|
||||||
if (Disable.IsPresent) data["disable"] = "1";
|
if (Disable.IsPresent) data["disable"] = "1";
|
||||||
|
|||||||
@@ -95,6 +95,13 @@ Describe 'Shared Storage — Integration' -Tag 'Integration' {
|
|||||||
|
|
||||||
# Parse server and export from the full NFS export path (e.g. "10.0.0.1:/srv/nfs/shared")
|
# Parse server and export from the full NFS export path (e.g. "10.0.0.1:/srv/nfs/shared")
|
||||||
$nfsParts = $script:NfsExport -split ':', 2
|
$nfsParts = $script:NfsExport -split ':', 2
|
||||||
|
if (-not $nfsParts -or
|
||||||
|
$nfsParts.Count -ne 2 -or
|
||||||
|
[string]::IsNullOrWhiteSpace($nfsParts[0]) -or
|
||||||
|
[string]::IsNullOrWhiteSpace($nfsParts[1])) {
|
||||||
|
Set-ItResult -Skipped -Because "PVETEST_NFS_EXPORT must be in 'server:/export/path' format (current value: '$($script:NfsExport)')"
|
||||||
|
return
|
||||||
|
}
|
||||||
$nfsServer = $nfsParts[0]
|
$nfsServer = $nfsParts[0]
|
||||||
$nfsExportPath = $nfsParts[1]
|
$nfsExportPath = $nfsParts[1]
|
||||||
|
|
||||||
|
|||||||
@@ -53,6 +53,9 @@ services:
|
|||||||
privileged: true
|
privileged: true
|
||||||
volumes:
|
volumes:
|
||||||
- nfs-data:/srv/nfs/shared
|
- nfs-data:/srv/nfs/shared
|
||||||
|
# NOTE: /lib/modules is required by the NFS kernel module loader.
|
||||||
|
# This mount is Linux-host-specific and will fail on macOS/Windows Docker Desktop.
|
||||||
|
# Integration tests using this compose file must run on a Linux host (e.g. GitHub-hosted runners or the dev container).
|
||||||
- /lib/modules:/lib/modules:ro
|
- /lib/modules:/lib/modules:ro
|
||||||
environment:
|
environment:
|
||||||
NFS_EXPORT_0: /srv/nfs/shared *(rw,sync,no_subtree_check,no_root_squash)
|
NFS_EXPORT_0: /srv/nfs/shared *(rw,sync,no_subtree_check,no_root_squash)
|
||||||
|
|||||||
Reference in New Issue
Block a user