Skip to content

fix(orchestrator): apply PowerVault mount options, redirect CUDA dnf cache to NFS, fix firewall test podman zone - #5810

Open
SujalS27 wants to merge 18 commits into
dell:stagingfrom
SujalS27:staging
Open

SujalS27 wants to merge 18 commits into
dell:stagingfrom
SujalS27:staging

Conversation

@SujalS27

Copy link
Copy Markdown
Collaborator

PR Title

fix(orchestrator): apply PowerVault mount options, redirect CUDA dnf cache to NFS, fix firewall test podman zone

Description of the Solution

This PR fixes three independent FVT failures: (1) PowerVault iSCSI mount ignoring configured mount options from storage_config.yml, (2) CUDA toolkit installation failing due to dnf cache exhausting the LiveOS rootfs overlay, and (3) firewall test falsely expecting container-internal ports to be open on the host-facing default zone. All three were discovered during
FVT runs on a stateless PXE-booted cluster.

Related Issue

#4849

  • Fixes # [OMN-DEF] FVT: ORCH_FVT_PREPARE_V006 firewall test checks ports that are intentionally closed on the host firewall 1538
  • Fixes # [OMN-DEF] setup_iscsi_storage.sh.j2 mounts PowerVault without mount options -- noatime from fstab/mount_params ignored on first mount 1539
  • Fixes # [OMN-DEF] install_cuda_toolkit.sh dnf cache fills LiveOS rootfs, causing CUDA installation to fail 1540

Changes

PowerVault iSCSI Mount (src/orchestrator/roles/mount_config/templates/setup_iscsi_storage.sh.j2)

  • Pass MOUNT_OPTS to the mount command so fstab options (noatime, _netdev, etc.) are applied on the initial mount i
    nstead of falling back to kernel defaults (relatime). The fstab entry was already written correctly but the mount comma
    nd was invoked without -o, silently ignoring all user-configured mount options.

CUDA Toolkit Installer (src/orchestrator/roles/provision_common/templates/hpc_tools/install_cuda_toolkit.sh.j2)

  • Redirect the dnf download cache to NFS (--setopt=cachedir=$LOCK_ROOT/.dnf-cache/$(hostname -s)) to prevent the ~4 GB RP
    M cache from consuming LiveOS rootfs overlay space. This reduces rootfs requirement from ~15 GB to ~11 GB during install.
  • Clean up the NFS-based dnf cache on both success and failure paths.
  • Add setup_cuda_env call in the "already installed on VAST" code path (lock acquired, nvcc found) so /etc/profile.d/cud a.sh is always created regardless of how CUDA presence is detected.

Firewall Test (test/orchestrator/library/vars/prepare_vars.py, `test/orchestrator/library/functions/network_prepare_

func.py`)

  • Remove 5432/tcp (PostgreSQL), 27778/tcp (unused), and 27779/tcp (SMD) from host-facing FIREWALL_PORTS. These port
    s are intentionally not exposed on the host firewall; services are accessed via HAProxy on 8443/tcp.
  • Add new FIREWALL_PODMAN_ZONE_PORTS tuple with 5432/tcp and 27779/tcp, checked against the podman firewall zone fo
    r container-to-container traffic.
  • Add firewall_podman_port command to PREPARE_COMMANDS using firewall-cmd --zone=podman --query-port=.
  • Drop stale 27778/tcp entirely -- not referenced anywhere in the deploy role.

Files Changed

File Change Type Description
src/orchestrator/roles/mount_config/templates/setup_iscsi_storage.sh.j2 Modified Pass -o "${MOUNT_OPTS}" to mount
command
src/orchestrator/roles/provision_common/templates/hpc_tools/install_cuda_toolkit.sh.j2 Modified Redirect dnf cache
to NFS, add cache cleanup, add setup_cuda_env to already-installed path
test/orchestrator/library/vars/prepare_vars.py Modified Move internal ports to FIREWALL_PODMAN_ZONE_PORTS, add `f
irewall_podman_port` command
test/orchestrator/library/functions/network_prepare_func.py Modified Import and check FIREWALL_PODMAN_ZONE_PORTS
against podman zone

Testing

  • ORCH_FVT_PXEBOOT_V413 (PowerVault mount options): Previously failed with Missing mount opts noatime on /mnt/slurm.
    Root cause confirmed -- bare mount command ignored fstab options. Fix passes -o "${MOUNT_OPTS}" to apply configured opt ions on first mount.
  • ORCH_FVT_PXEBOOT_V056/V502/V507/V508/V512/V514/V522 (CUDA toolkit): Previously failed with At least 1969MB more space needed on the / filesystem. Root cause confirmed -- dnf cache (~4.1 GB) consumed rootfs alongside installed packages (~7.8 GB). Fix redirects cache to NFS. Manual verification: CUDA installed successfully with --setopt=cachedir on NFS, nvcc --version confirmed on nid008, nid009, nid010.
  • ORCH_FVT_PREPARE_V006 (Firewall ports): Previously failed with 5432/tcp closed, 27778/tcp closed, 27779/tcp closed. Root cause confirmed -- deploy role intentionally opens these ports only in the podman zone, not the default zone. Fix validates ports against the correct zone. Python import validation passed.

Backward Compatibility

  • No breaking changes.
  • PowerVault mount behavior changes from kernel defaults to user-configured options on first mount. This is the intended behavior that was previously broken.
  • CUDA installer now writes dnf cache to $LOCK_ROOT/.dnf-cache/<hostname> on NFS during installation. This directory is cleaned up after install completes (success or failure). No persistent storage impact.
  • Firewall test now checks fewer ports on the host default zone and additionally checks the podman zone. Existing deployments that correctly configure the podman zone will pass. The removed 27778/tcp was never opened by the deploy role in any configuration.

SujalS27 and others added 18 commits October 30, 2026 10:52
Added the same input logic as other domains

Signed-off-by: SujalS27 <Sujal.Sooryavamshi@dell.com>
The test function get_ome_device_details filtered only iDRAC NICs when
selecting the first active NIC MAC, while the production code in
ome_server_inventory.py filters both iDRAC and InfiniBand NICs. On
GPU/IB nodes where the InfiniBand adapter (e.g. NVIDIA ConnectX-7)
appears before the Ethernet NIC in the OME inventory, the test picked
the InfiniBand MAC instead of the Ethernet management MAC, causing
DISCOVERY_FVT_EXECUTE_V012 (test_admin_mac_validation) to fail.

Align the test NIC filter with production by also skipping NICs whose
NicId contains "INFINIBAND".

Fixes: dell#1346

Signed-off-by: SujalS27 <sujal.sooryavamshi@dell.com>
…V016-V021

- Fix V008 check_ip_correlation: remove stale IB_IP column fallback
  (src now produces IB_IPV4), only check IB_IPV4 correlation when
  IB_NIC_NAME is present on the row
- Update _get_network_spec_subnets to also return ipv6_subnet
- Add V016 test_ib_conditional_population: verify IB columns populated
  consistently with IB_NIC_NAME presence and subnet configuration
- Add V017 test_ib_ipv4_format: validate every non-empty IB_IPV4 is a
  valid IPv4 address
- Add V018 test_ib_ipv6_format: validate every non-empty IB_IPV6 is a
  valid IPv6 address
- Add V019 test_ib_ip_uniqueness: no duplicate IB IPs, no collision
  with ADMIN_IP/BMC_IP; skips when no IB subnet configured
- Add V020 test_pxe_mapping_all_columns: verify all 12 output contract
  columns present in PXE mapping CSV header
- Add V021 test_bmc_mac_populated: verify every row has non-empty
  BMC_MAC

Signed-off-by: SujalS27 <sujal.sooryavamshi@dell.com>
- V016: show exact breakdown (N with IB_NIC_NAME, M without)
- V017: show populated vs empty IB_IPV4 counts
- V018: show populated vs empty IB_IPV6 counts
- V020: list all 12 column names in detail output

Signed-off-by: SujalS27 <sujal.sooryavamshi@dell.com>
- V016: skip when neither ib_subnet nor ipv6_subnet is configured
- V017: skip when ib_subnet (IPv4) is not configured
- V018: skip when ipv6_subnet is not configured
- Prevents misleading "0 populated, 16 empty" results when IB is
  not configured in network_spec.yml

Signed-off-by: SujalS27 <sujal.sooryavamshi@dell.com>
Fix V016-V019 to call tl.skipped() instead of tl.passed() when
IB subnet is not configured, so test output correctly shows SKIPPED
instead of PASS.

Signed-off-by: SujalS27 <sujal.sooryavamshi@dell.com>
… podman zone

- setup_iscsi_storage.sh.j2: pass MOUNT_OPTS to mount command so fstab
  options (noatime, _netdev) are applied on first mount instead of using
  kernel defaults (relatime)

- install_cuda_toolkit.sh.j2: redirect dnf cache to NFS via
  --setopt=cachedir to avoid filling the LiveOS rootfs overlay (~4 GB
  savings), clean up cache on success and failure, and call setup_cuda_env
  in the already-installed-on-VAST code path

- prepare_vars.py / network_prepare_func.py: move 5432/tcp and 27779/tcp
  from host-facing FIREWALL_PORTS to new FIREWALL_PODMAN_ZONE_PORTS
  checked against the podman zone; drop stale 27778/tcp

Signed-off-by: SujalS27 <sujal.sooryavamshi@dell.com>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants