Skip to content

docs: document expected machine interfaces - #4418

Open
chet wants to merge 1 commit into
NVIDIA:mainfrom
chet:gh-issue-4151-docs
Open

docs: document expected machine interfaces#4418
chet wants to merge 1 commit into
NVIDIA:mainfrom
chet:gh-issue-4151-docs

Conversation

@chet

@chet chet commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Explain the interface roles and IP allocation policies available during Expected Machine ingestion.

Cover segment selection, Host BMC compatibility, legacy aliases, update behavior, and reservation-only network segments.

Related issues

Type of Change

  • Add - New feature or capability
  • Change - Changes in existing functionality
  • Fix - Bug fixes
  • Remove - Removed features or deprecated functionality
  • Internal - Internal changes (refactoring, tests, docs, etc.)

Breaking Changes

  • This PR contains breaking changes

Testing

  • Unit tests added/updated
  • Integration tests added/updated
  • Manual testing performed
  • No testing required (docs, internal refactor, etc.)

Validated with:

  • cargo test -p nico-admin-cli cfg::cli_options::tests
  • cargo make format-nightly
  • cargo make clippy
  • cargo make carbide-lints
  • JSON example parsing and documentation link/anchor checks

Additional Notes

This is a docs-only PR so the documentation review can proceed independently from the implementation changes.

The generated CLI source help still says a Retained address never expires. These docs use the current behavior more precisely: the address remains Static for the lifetime of the interface record. A small code follow-up can align the source help text.

@chet
chet requested a review from polarweasel as a code owner July 30, 2026 22:08
@coderabbitai

coderabbitai Bot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Summary by CodeRabbit

  • Documentation
    • Updated “Provisioning (Day 0)” navigation and added guidance for declaring Expected Machine network interface allocations (interfaces/ExpectedInterface), including role defaults, primary boot-selection rules, and host BMC uniqueness constraints.
    • Updated Day 0 IP/DHCP provisioning to use interface-based dynamic/fixed/retained allocation and reserved segments that require pre-provisioned fixed reservations.
    • Revised host ingestion/configuration docs to clarify bmc_ip_allocation behavior, JSON field expectations, and to avoid setting host_nics and interfaces together.
  • Documentation (CLI)
    • Updated expected-machine add/patch docs to replace --host_nics with --interfaces, expand --bmc-ip-allocation, and refresh examples with a --bmc-password security note/placeholder.

Walkthrough

Documents the interfaces-based Expected Machine model, including allocation policies, BMC handling, DHCP and segment selection, CLI add/patch options, compatibility aliases, examples, and Day 0 navigation.

Changes

Expected Machine Interfaces

Layer / File(s) Summary
Interface declaration and allocation contract
docs/provisioning/expected-machine-interfaces.md
Defines interface fields, roles, allocation policies, segment selection, BMC behavior, patch semantics, examples, and compatibility rules.
Provisioning and network configuration
docs/provisioning/boot-interfaces-and-dpu-modes.md, docs/provisioning/ingesting-hosts.md, docs/provisioning/ip-and-network-configuration.md
Updates provisioning, ingestion, DHCP, network, boot-interface, compatibility, and checklist guidance for interfaces.
Expected Machine CLI options
docs/manuals/nico-admin-cli/commands/expected-machine/*
Documents --interfaces and --bmc-ip-allocation for add and patch commands, including payloads, examples, and password-handling notes.
Documentation navigation
docs/index.yml
Adds the new Expected Machine Interfaces page under Provisioning Day 0.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Possibly related issues

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly matches the main change: documenting expected machine interfaces.
Description check ✅ Passed The description is directly aligned with the docs updates and covers the main topics changed.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Comment @coderabbitai help to get the list of available commands.

chet commented Jul 30, 2026

Copy link
Copy Markdown
Contributor Author

@coderabbitai full_review, thanks!

@coderabbitai

coderabbitai Bot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

@chet: Understood — I’ll perform a complete re-review of #4418.

🐇🔍

✅ Action performed

Full review finished.

@github-actions

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@docs/manuals/nico-admin-cli/commands/expected-machine/expected-machine-add.md`:
- Around line 67-78: Document the supported legacy --host_nics alias alongside
--interfaces in both
docs/manuals/nico-admin-cli/commands/expected-machine/expected-machine-add.md
lines 67-78 and
docs/manuals/nico-admin-cli/commands/expected-machine/expected-machine-patch.md
lines 164-173, keeping the existing interface option description consistent
across both pages.

In `@docs/provisioning/expected-machine-interfaces.md`:
- Around line 179-181: Replace every copyable BMC password in the listed
Markdown examples with a clearly non-secret placeholder; update
docs/provisioning/expected-machine-interfaces.md at lines 179-181 and 226-232,
docs/provisioning/ip-and-network-configuration.md at lines 124-126,
docs/provisioning/ingesting-hosts.md at lines 246-248, and
docs/provisioning/boot-interfaces-and-dpu-modes.md at lines 110-112 and 129-131.
For the command-argument examples at expected-machine-interfaces.md lines
226-232 and boot-interfaces-and-dpu-modes.md lines 129-131, explicitly document
the shell-history and process-list exposure risk while keeping the examples
realistic and safe.

In `@docs/provisioning/ingesting-hosts.md`:
- Around line 228-233: Update the documentation for bmc_ip_address and
bmc_ip_allocation to state that Auto infers Fixed when an address is present,
while an explicit top-level allocation takes precedence over both the inferred
value and nested policy; clarify that an address is not necessarily reserved
when a different allocation is explicitly selected.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 6623cdbb-25a5-4cc6-9544-7f66ed9ccd0c

📥 Commits

Reviewing files that changed from the base of the PR and between e4a4af9 and 541e97d.

📒 Files selected for processing (7)
  • docs/index.yml
  • docs/manuals/nico-admin-cli/commands/expected-machine/expected-machine-add.md
  • docs/manuals/nico-admin-cli/commands/expected-machine/expected-machine-patch.md
  • docs/provisioning/boot-interfaces-and-dpu-modes.md
  • docs/provisioning/expected-machine-interfaces.md
  • docs/provisioning/ingesting-hosts.md
  • docs/provisioning/ip-and-network-configuration.md

Comment thread docs/provisioning/expected-machine-interfaces.md Outdated
Comment thread docs/provisioning/ingesting-hosts.md Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@docs/manuals/nico-admin-cli/commands/expected-machine/expected-machine-add.md`:
- Around line 199-201: Update the three expected-machine add examples to replace
the literal BMC password “mypassword” with a clearly non-secret placeholder, and
add an explicit warning that command-line passwords may be exposed through shell
history and process listings.
- Around line 145-152: Update the retained-address description in
docs/manuals/nico-admin-cli/commands/expected-machine/expected-machine-add.md
lines 145-152 to say it remains static for the lifetime of the interface record
instead of “never expires.” Apply the same wording correction in
docs/manuals/nico-admin-cli/commands/expected-machine/expected-machine-patch.md
lines 142-149 and link it to the retained-address lifetime section.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 652d4fd9-0949-4700-9a7b-a60b3a833787

📥 Commits

Reviewing files that changed from the base of the PR and between e4a4af9 and 541e97d.

📒 Files selected for processing (7)
  • docs/index.yml
  • docs/manuals/nico-admin-cli/commands/expected-machine/expected-machine-add.md
  • docs/manuals/nico-admin-cli/commands/expected-machine/expected-machine-patch.md
  • docs/provisioning/boot-interfaces-and-dpu-modes.md
  • docs/provisioning/expected-machine-interfaces.md
  • docs/provisioning/ingesting-hosts.md
  • docs/provisioning/ip-and-network-configuration.md

Comment thread docs/manuals/nico-admin-cli/commands/expected-machine/expected-machine-add.md Outdated
Comment thread docs/manuals/nico-admin-cli/commands/expected-machine/expected-machine-add.md Outdated
Explain the interface roles and IP allocation policies available during Expected Machine ingestion.

Cover segment selection, Host BMC compatibility, legacy aliases, update behavior, and reservation-only network segments.

This supports NVIDIA#4151

Signed-off-by: Chet Nichols III <chetn@nvidia.com>
@chet
chet force-pushed the gh-issue-4151-docs branch from 541e97d to ff8d460 Compare July 30, 2026 22:24

chet commented Jul 30, 2026

Copy link
Copy Markdown
Contributor Author

@coderabbitai full_review, thanks!

@coderabbitai

coderabbitai Bot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

@chet: Understood — starting a complete re-review of #4418.

🐇🔍

✅ Action performed

Full review finished.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/provisioning/expected-machine-interfaces.md`:
- Around line 132-136: Clarify the segment-guard wording in the explicit
allocation policy or DPU role section so rejection occurs only when a
network_segment_type guard is supplied and the selected segment has a different
type. State that the role alone does not impose a segment constraint, while
preserving the existing DHCP or fixed-address selection behavior and example.
- Around line 148-166: Update the “Allow Only Reserved Addresses” documentation
to explicitly describe how retained Expected Machine reservations behave on
reserved segments: state whether retained is unsupported or requires a
pre-seeded fixed reservation, and clarify the resulting interface
address-acquisition behavior so operators avoid an unusable configuration.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 11f7469a-3c68-4bb0-9ac6-06627d0e0f73

📥 Commits

Reviewing files that changed from the base of the PR and between 541e97d and ff8d460.

📒 Files selected for processing (7)
  • docs/index.yml
  • docs/manuals/nico-admin-cli/commands/expected-machine/expected-machine-add.md
  • docs/manuals/nico-admin-cli/commands/expected-machine/expected-machine-patch.md
  • docs/provisioning/boot-interfaces-and-dpu-modes.md
  • docs/provisioning/expected-machine-interfaces.md
  • docs/provisioning/ingesting-hosts.md
  • docs/provisioning/ip-and-network-configuration.md
🚧 Files skipped from review as they are similar to previous changes (6)
  • docs/provisioning/ingesting-hosts.md
  • docs/index.yml
  • docs/manuals/nico-admin-cli/commands/expected-machine/expected-machine-patch.md
  • docs/manuals/nico-admin-cli/commands/expected-machine/expected-machine-add.md
  • docs/provisioning/boot-interfaces-and-dpu-modes.md
  • docs/provisioning/ip-and-network-configuration.md

Comment thread docs/provisioning/expected-machine-interfaces.md
Comment thread docs/provisioning/expected-machine-interfaces.md

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@docs/manuals/nico-admin-cli/commands/expected-machine/expected-machine-add.md`:
- Around line 145-166: The BMC allocation documentation omits the meaning of
unspecified and the invalid bmc_ip_address combinations. Update the
bmc-ip-allocation sections in
docs/manuals/nico-admin-cli/commands/expected-machine/expected-machine-add.md
lines 145-166 and
docs/manuals/nico-admin-cli/commands/expected-machine/expected-machine-patch.md
lines 142-163 to define unspecified according to the server contract and state
that supplying bmc_ip_address with dynamic or retained allocation is rejected;
keep both pages consistent.
- Around line 67-78: Update the shared CLI source that generates the
expected-machine interface option documentation to identify --host_nics as the
legacy alias for --interfaces, then regenerate both pages:
docs/manuals/nico-admin-cli/commands/expected-machine/expected-machine-add.md
lines 67-78 and
docs/manuals/nico-admin-cli/commands/expected-machine/expected-machine-patch.md
lines 165-175. Ensure both generated descriptions consistently document the
alias.

In
`@docs/manuals/nico-admin-cli/commands/expected-machine/expected-machine-patch.md`:
- Around line 171-175: Update the patch description covering stored MAC matching
to explicitly state that omitting network_segment_type clears the stored segment
guard, distinguishing this from the preservation behavior documented for role
and ip_allocation.

In `@docs/provisioning/expected-machine-interfaces.md`:
- Around line 163-166: Clarify the Retained address behavior for
reservation-only segments in both
docs/provisioning/expected-machine-interfaces.md lines 163-166 and
docs/provisioning/ip-and-network-configuration.md lines 213-217: explicitly
state whether Retained is unsupported or requires a pre-seeded reservation, and
apply the same rule consistently in both procedures.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 5dde8219-53a5-4824-882e-3921ab392c32

📥 Commits

Reviewing files that changed from the base of the PR and between e4a4af9 and ff8d460.

📒 Files selected for processing (7)
  • docs/index.yml
  • docs/manuals/nico-admin-cli/commands/expected-machine/expected-machine-add.md
  • docs/manuals/nico-admin-cli/commands/expected-machine/expected-machine-patch.md
  • docs/provisioning/boot-interfaces-and-dpu-modes.md
  • docs/provisioning/expected-machine-interfaces.md
  • docs/provisioning/ingesting-hosts.md
  • docs/provisioning/ip-and-network-configuration.md

Comment on lines +67 to +78
**--interfaces** *\<INTERFACES\>*\
Interfaces as a JSON array of ExpectedInterface objects (fields:
mac_address, role, ip_allocation, network_segment_type, fixed_ip,
fixed_mask, fixed_gateway, primary; legacy: nic_type). Accepted values:
role=host\|dpu_os\|dpu_bmc\|host_bmc and
ip_allocation=dynamic\|fixed\|retained. An omitted role defaults to host.
When ip_allocation is omitted, fixed_ip implies fixed; without fixed_ip,
host_bmc defaults to retained and every other role defaults to dynamic.
Explicit fixed policies, DPU fixed addresses, and inferred host_bmc fixed
addresses with a segment guard must fall within a configured managed
prefix. Legacy host entries with an omitted policy and unguarded inferred
host_bmc fixed addresses keep the static-assignments fallback.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Document the legacy interface-option alias consistently.

Both generated pages advertise --interfaces but omit the supported --host_nics alias.

  • docs/manuals/nico-admin-cli/commands/expected-machine/expected-machine-add.md#L67-L78: document --host_nics as the legacy alias for --interfaces.
  • docs/manuals/nico-admin-cli/commands/expected-machine/expected-machine-patch.md#L165-L175: document the same alias and regenerate both pages from the shared CLI source.
📍 Affects 2 files
  • docs/manuals/nico-admin-cli/commands/expected-machine/expected-machine-add.md#L67-L78 (this comment)
  • docs/manuals/nico-admin-cli/commands/expected-machine/expected-machine-patch.md#L165-L175
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@docs/manuals/nico-admin-cli/commands/expected-machine/expected-machine-add.md`
around lines 67 - 78, Update the shared CLI source that generates the
expected-machine interface option documentation to identify --host_nics as the
legacy alias for --interfaces, then regenerate both pages:
docs/manuals/nico-admin-cli/commands/expected-machine/expected-machine-add.md
lines 67-78 and
docs/manuals/nico-admin-cli/commands/expected-machine/expected-machine-patch.md
lines 165-175. Ensure both generated descriptions consistently document the
alias.

Source: Learnings

Comment on lines +145 to +166
**--bmc-ip-allocation** *\<BMC_IP_ALLOCATION\>*\
Per-host control over how this BMC's IP is assigned and retained.
\`auto\` (default): infer from \`--bmc-ip-address\` -- a configured
address is \`fixed\`, no address is \`retained\`; \`dynamic\`: a normal
DHCP lease that may expire and change; \`fixed\`: the operator-specified
\`--bmc-ip-address\` (static); \`retained\`: an auto-allocated address
kept Static for the lifetime of its interface record. Unset defers to
the server default (\`auto\`). See
[Retained Address Lifetime](../../../../provisioning/expected-machine-interfaces.md#retained-address-lifetime).\

\
*Possible values:*

- unspecified

- auto

- dynamic

- fixed

- retained

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Align BMC allocation documentation with the server contract.

Both pages list unspecified without defining it and omit the invalid combination rules for bmc_ip_address with Dynamic or Retained allocation.

  • docs/manuals/nico-admin-cli/commands/expected-machine/expected-machine-add.md#L145-L166: define unspecified and state the rejected combinations for add.
  • docs/manuals/nico-admin-cli/commands/expected-machine/expected-machine-patch.md#L142-L163: define unspecified and state the same rejected combinations for patch.
📍 Affects 2 files
  • docs/manuals/nico-admin-cli/commands/expected-machine/expected-machine-add.md#L145-L166 (this comment)
  • docs/manuals/nico-admin-cli/commands/expected-machine/expected-machine-patch.md#L142-L163
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@docs/manuals/nico-admin-cli/commands/expected-machine/expected-machine-add.md`
around lines 145 - 166, The BMC allocation documentation omits the meaning of
unspecified and the invalid bmc_ip_address combinations. Update the
bmc-ip-allocation sections in
docs/manuals/nico-admin-cli/commands/expected-machine/expected-machine-add.md
lines 145-166 and
docs/manuals/nico-admin-cli/commands/expected-machine/expected-machine-patch.md
lines 142-163 to define unspecified according to the server contract and state
that supplying bmc_ip_address with dynamic or retained allocation is rejected;
keep both pages consistent.

Comment on lines +171 to +175
machine's full interface list. For a matching stored MAC, omitting role
preserves the stored role; role=unspecified resets it to host. Omitting
ip_allocation preserves the stored policy when the presence of fixed_ip
is unchanged; ip_allocation=unspecified resets it to fixed_ip inference.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Document that omitted network_segment_type clears the stored guard.

The patch description explains preservation/reset behavior for role and ip_allocation, but omits the distinct behavior for network_segment_type: when omitted, the stored segment guard is cleared. State this explicitly to prevent operators from assuming the guard is preserved.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@docs/manuals/nico-admin-cli/commands/expected-machine/expected-machine-patch.md`
around lines 171 - 175, Update the patch description covering stored MAC
matching to explicitly state that omitting network_segment_type clears the
stored segment guard, distinguishing this from the preservation behavior
documented for role and ip_allocation.

Comment on lines +163 to +166
On a reserved segment, configure a `fixed` Expected Machine reservation before
the interface sends DHCP. NICo does not create a dynamic address for an
interface that has no existing reservation. The default segment allocation
strategy is `dynamic`.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Define Retained behavior for reservation-only segments.

Both pages explain Fixed reservations but leave Retained address acquisition ambiguous on allocation_strategy = "reserved" segments.

  • docs/provisioning/expected-machine-interfaces.md#L163-L166: state whether Retained is unsupported or requires a pre-seeded reservation.
  • docs/provisioning/ip-and-network-configuration.md#L213-L217: apply the same rule to the reservation-only configuration procedure.
📍 Affects 2 files
  • docs/provisioning/expected-machine-interfaces.md#L163-L166 (this comment)
  • docs/provisioning/ip-and-network-configuration.md#L213-L217
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/provisioning/expected-machine-interfaces.md` around lines 163 - 166,
Clarify the Retained address behavior for reservation-only segments in both
docs/provisioning/expected-machine-interfaces.md lines 163-166 and
docs/provisioning/ip-and-network-configuration.md lines 213-217: explicitly
state whether Retained is unsupported or requires a pre-seeded reservation, and
apply the same rule consistently in both procedures.

Source: Path instructions

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.

1 participant