Skip to content

feat(ER-ORCH-005): Complete IPoIB IPv6 pipeline — DNS-free Slurm IB, minimal discovery mode - #5457

Open
sujit-jadhav wants to merge 8 commits into
pub/rhel10.2from
feature/ipv6-ib-config-clean
Open

sujit-jadhav wants to merge 8 commits into
pub/rhel10.2from
feature/ipv6-ib-config-clean

Conversation

@sujit-jadhav

@sujit-jadhav sujit-jadhav commented Oct 6, 2026 •

Copy link
Copy Markdown
Collaborator

feat(ER-ORCH-005): Complete IPoIB IPv6 pipeline — DNS-free Slurm IB, minimal discovery mode

Author: Sujit Jadhav (sujit.jadhav@dell.com)

Summary

Complete IPoIB IPv6 pipeline with minimal node discovery mode, IB IP assignment via cloud-init, and documentation updates.

Changes

1. IB IPv6/IPv4 assignment via cloud-init

  • configure-ib-network.sh.j2 assigns IB IPv4 and IPv6 addresses on all functional groups
  • Fix SIGPIPE bug: set -euo pipefail + awk '{ exit }' in dmidecode pipeline caused silent script death
  • Added to os_x86_64, os_aarch64, and default_x86_64 templates (previously only Slurm/K8s groups)

2. Minimal node discovery mode (node_discovery_mode: minimal)

  • Renamed from dynamic to minimal to avoid confusion with Slurm native dynamic nodes (slurmd -Z)
  • Skips iDRAC Redfish calls for CPU/GPU discovery — generates minimal NodeName entries
  • slurmd auto-reports CPU, Memory, GPU via AutoDetect: nvml
  • Best for large clusters where iDRAC discovery is slow

3. NodeAddr injection from PXE mapping

  • inject_ib_nodeaddr.yml falls back to PXE mapping CSV (IB_IPV6/IB_IPV4 columns) when IB allocation file is absent
  • Auto-enables CommunicationParameters=EnableIPv6 when IPv6 addresses are found
  • Login/compiler-login nodes also get NodeAddr

4. IB interface auto-discovery

  • Added discover_ib_interfaces.sh to detect actual IB interface names (ibp161s0, ibp181s0, etc.)
  • Validation and evidence collection use discovered names instead of hardcoded ib0

5. Documentation updates

  • Updated ipv6-infiniband-configuration.md with predictable interface naming notes
  • Updated troubleshooting.md to use dynamic IB interface discovery instead of hardcoded ib0
  • Removed misleading claims about Slurm/MPI dependency on IB IPv6
  • Added Known Limitation for predictable interface naming

6. Other changes

  • Default slurm_preferred_addr_family: "ipv6" in network_spec.yml
  • Add gpu and cpu convenience partitions in build_slurm_conf.yml
  • Disable ib_ipv6_manage_hosts (default false) — removed hosts-block injection

Files Changed

File Change
input/omnia_config.yml Add minimal discovery mode docs + set node_discovery_mode: minimal
input/network_spec.yml Set slurm_preferred_addr_family: "ipv6"
schema/omnia_config.json Add "minimal" to enum (renamed from "dynamic")
ib_ipv6_config/defaults/main.yml Set ib_ipv6_manage_hosts: false
ib_ipv6_config/tasks/main.yml Skip /etc/hosts update when disabled
provision_common/tasks/configure_metadata_svc.yml Remove hosts-block loading
doca-ofed/configure-ib-network.sh.j2 Fix SIGPIPE bug
10x ms-group-*.yaml.j2 Remove ib_hosts_entries, add IB script to os/default groups
slurm_config/tasks/build_slurm_conf.yml Login NodeAddr + gpu/cpu partitions
slurm_config/tasks/confs.yml Minimal discovery mode logic (renamed from dynamic)
slurm_config/tasks/inject_ib_nodeaddr.yml PXE mapping fallback
scripts/discover_ib_interfaces.sh IB interface auto-discovery
validate_ib_ipv6_release.yml Replace oim with localhost, use discovered interfaces
docs/ipv6-infiniband-configuration.md Predictable naming, remove ib0, update claims
docs/troubleshooting.md Replace ib0 with dynamic discovery

Test Validation

Category Tests Status
UT (orchestrator unit tests) 410 410 pass, 6 skip, 0 fail
Schema validation (YAML, JSON, Python) 4 All pass
Ansible syntax check 2 All pass
Live cluster (3-node IB testbed) 7 All pass

Test Plan

  • IB IPv4 ping between all 3 nodes (192.168.0.11/12/13)
  • IB IPv6 ping between all 3 nodes (fd00:1b::11/12/13)
  • Slurm single-node jobs on normal, gpu, cpu partitions
  • Slurm multi-node job across nid002 + nid003
  • CommunicationParameters=EnableIPv6 active in slurmctld
  • NodeAddr uses IB IPv6 addresses in slurm.conf
  • Full orchestrator playbook run completes (3/3 nodes verified)
  • IB interface auto-discovery works on all 3 nodes

… compat, 221 tests

Implements the full IPoIB IPv6 configuration pipeline for Omnia
orchestrator, covering allocation validation, NM config rendering,
cloud-init publication, Slurm NodeAddr injection, and release evidence.

Core pipeline (Stories 1-3):
- Versioned allocation export JSON Schema (16 fields, dual-stack)
- Allocation validator with prefix, duplicate, and atomicity checks
- NM renderer producing nmcli scripts with infiniband.mtu property
- SMD component registration and BSS cloud-init publication
- Managed /etc/hosts block with IPoIB entries in cloud-init templates
- IB interface auto-discovery (predictable naming: ibp10s0, ibp181s0)

Slurm integration (Story 3):
- inject_ib_nodeaddr.yml reads ib_addr_mode and slurm_preferred_addr_family
- Dual-stack requires explicit preference; mismatch emits warning
- CommunicationParameters EnableIPv6=yes for ipv6-only/dual-stack

Release evidence and NFT (Stories 4-5):
- collect_ib_ipv6_evidence module for HCA, switch, OS, IPoIB info
- benchmark_ib_ipv6 module for throughput parity measurement
- verify_ib_ipv6_state module for address, route, privacy checks

Backward compatibility:
- Legacy IB_IP CSV header auto-detected and normalized to IB_IPV4
- Legacy subnet/netmask_bits accepted alongside ipv4_subnet/ipv4_prefix
- ib_addr_mode defaults to ipv4-only when unset

Test automation (438 UT + 40 FVT + 20 NFT):
- 6 UT modules covering backward compat, diagnostics, docs quality,
  NM publication, release evidence, and Slurm NodeAddr
- 2 FVT modules for allocation validation and NM publication
- 1 NFT module for performance benchmarks

Signed-off-by: Sujit Jadhav <sujit_jadhav@dell.com>
Signed-off-by: Sujit Jadhav <sujit.jadhav@dell.com>
@sujit-jadhav
sujit-jadhav force-pushed the feature/ipv6-ib-config-clean branch from bcb9b82 to d06bb33 Compare October 6, 2026 08:33
Comment thread src/orchestrator/docs/contracts/input-contract.md Outdated
Comment thread src/orchestrator/CHANGELOG.md Outdated
Comment thread src/orchestrator/roles/orchestrator_setup/vars/main.yml
Comment thread src/orchestrator/playbooks/validate/validate_ib_ipv6_release.yml Outdated
@sujit-jadhav sujit-jadhav changed the title feat(ER-ORCH-005): Complete IPoIB IPv6 pipeline — 5 Stories, backward… feat(ER-ORCH-005): Complete IPoIB IPv6 pipeline — DNS-free Slurm IB, dynamic discovery Oct 8, 2026
…convenience partitions

Major changes on top of the initial IPoIB IPv6 pipeline:

1. Eliminate /etc/hosts and DNS dependency for Slurm IB communication
   - Disable ib_ipv6_manage_hosts (default false)
   - Remove IPoIB hosts-block injection from all cloud-init templates
     (7 ms-group-*.yaml.j2 files)
   - Remove hosts-block loading from configure_metadata_svc.yml
   - Slurm uses NodeAddr in slurm.conf for all inter-daemon communication

2. Add dynamic node discovery mode (node_discovery_mode: dynamic)
   - Skip iDRAC discovery entirely — generate minimal NodeName entries
   - Add dynamic to omnia_config.json schema enum
   - Add dynamic mode logic in confs.yml
   - Best for large clusters (2000+ nodes) where iDRAC is slow/unnecessary

3. PXE mapping fallback for NodeAddr injection
   - inject_ib_nodeaddr.yml now falls back to PXE mapping CSV
     (IB_IPV6/IB_IPV4 columns) when IB allocation file is absent
   - Enables NodeAddr without running the full ib_ipv6_config pipeline
   - Auto-enables CommunicationParameters=EnableIPv6 when IPv6 found

4. Login/compiler-login nodes now get NodeAddr
   - build_slurm_conf.yml looks up NodeAddr from PXE mapping or
     IB allocation when appending login and compiler-login nodes
   - Previously login nodes were appended as bare NodeName entries

5. Fix SIGPIPE bug in configure-ib-network.sh.j2
   - set -euo pipefail + awk exit in a dmidecode pipeline caused
     silent script death via SIGPIPE (exit code 141)
   - Fix: capture dmidecode output into variable before piping to awk

6. Add gpu and cpu convenience partitions
   - build_slurm_conf.yml now creates gpu and cpu partitions alongside
     the existing normal partition for user convenience

Signed-off-by: Sujit Jadhav <sujit.jadhav@dell.com>
@sujit-jadhav
sujit-jadhav force-pushed the feature/ipv6-ib-config-clean branch from de54adb to f15650a Compare October 8, 2026 03:08
1. Revert input-contract.md to upstream (contract override reverted)
2. Move CHANGELOG entries under 2.3.0 (remove separate 2.3.1 section)
3. Restore removed error messages in orchestrator_setup/vars/main.yml
4. Replace oim with localhost in validate_ib_ipv6_release.yml

Signed-off-by: Sujit Jadhav <sujit.jadhav@dell.com>
@sujit-jadhav

Copy link
Copy Markdown
Collaborator Author

All 4 review comments from @abhishek-sa1 addressed in commit 583910f:

  1. input-contract.md — Reverted to upstream (contract override removed)
  2. CHANGELOG.md — Moved all IPoIB entries under 2.3.0 (removed 2.3.1 section)
  3. orchestrator_setup/vars/main.yml — Restored all removed error messages
  4. validate_ib_ipv6_release.yml — Replaced oim with localhost and removed redundant delegate_to

… source_loader

- test_docs_ipv6_quality: Update CHANGELOG version assertion from 2.3.1 to 2.3.0
  (entries moved per review), replace Known Limitations check with ConnectX check
- test_nm_config_publication_ipv6: Invert ib_hosts_entries assertions to verify
  templates do NOT contain hosts injection (DNS-free: Slurm uses NodeAddr)
- Restore missing ut/source_loader.py and ut/__init__.py for test_address_verifier
  and test_allocation_validation imports

Signed-off-by: Sujit Jadhav <sujit.jadhav@dell.com>
… evidence collection

IB interface names use predictable naming based on PCI topology
(e.g., ibp10s0, ibp181s0, ibp47s0) not generic ib0/ib1. The
validate_ib_ipv6_release.yml playbook now runs discover_ib_interfaces.sh
before benchmarks and evidence collection to find actual interface names.

- Add discover_ib_interfaces.sh: lists /sys/class/net/ib* with ib0 fallback
- validate_ib_ipv6_release.yml: use ansible.builtin.script for discovery
  before throughput parity benchmark and evidence collection tasks

Signed-off-by: Sujit Jadhav <sujit.jadhav@dell.com>
…ork_spec.yml

Signed-off-by: Sujit Jadhav <sujit.jadhav@dell.com>
… IB to os/default groups

- Rename node_discovery_mode: dynamic -> minimal in omnia_config.yml,
  omnia_config.json schema, and confs.yml runtime logic to avoid
  confusion with Slurm native dynamic nodes (slurmd -Z)
- Add configure-ib-network.sh to os_x86_64, os_aarch64, and
  default_x86_64 cloud-init templates so all functional groups get
  IB IPv4/IPv6 assigned during PXE boot

Signed-off-by: Sujit Jadhav <sujit.jadhav@dell.com>
@sujit-jadhav sujit-jadhav changed the title feat(ER-ORCH-005): Complete IPoIB IPv6 pipeline — DNS-free Slurm IB, dynamic discovery feat(ER-ORCH-005): Complete IPoIB IPv6 pipeline — DNS-free Slurm IB, minimal discovery mode Oct 8, 2026
…eading claims

- Replace hardcoded ib0 with dynamic discovery () in
  ipv6-infiniband-configuration.md and troubleshooting.md
- Add predictable interface naming note (ibp161s0, not ib0)
- Remove misleading claim about Slurm/MPI dependency on IB IPv6
- Add Known Limitation item for predictable interface naming
- Update Last updated to October 2026

Signed-off-by: Sujit Jadhav <sujit.jadhav@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.

2 participants