Skip to content

[AISOS-358] Implementation for AISOS-358#10507

Open
eshulman2 wants to merge 7 commits intoopenshift:mainfrom
eshulman2:forge/aisos-358
Open

[AISOS-358] Implementation for AISOS-358#10507
eshulman2 wants to merge 7 commits intoopenshift:mainfrom
eshulman2:forge/aisos-358

Conversation

@eshulman2
Copy link
Copy Markdown
Member

@eshulman2 eshulman2 commented Apr 16, 2026

Summary

This PR introduces a new bootstrapFlavor configuration option for OpenStack deployments, enabling users to specify a separate flavor for the bootstrap machine independent of the control plane flavor. This addresses NFV/NUMA-constrained deployments where control plane flavors with CPU pinning or NUMA node requirements may cause scheduling issues for the temporary bootstrap node, which doesn't require these specialized resources.

Changes

Type Definition

  • Added BootstrapFlavor field to Platform struct in pkg/types/openstack/platform.go with json:"bootstrapFlavor,omitempty" tag for backward compatibility

Validation

  • pkg/asset/openstack/validation/cloudinfo.go: Extended flavor fetching to include bootstrapFlavor from OpenStack Compute API
  • pkg/asset/openstack/validation/platform.go: Added validateBootstrapFlavor() function that returns field.NotFound error when specified flavor doesn't exist
  • pkg/asset/openstack/validation/platform_test.go: Added TestBootstrapFlavor covering not specified, valid, and invalid flavor scenarios

CAPI Machine Generation

  • pkg/asset/machines/openstack/openstackmachines.go: Modified generateMachineSpec() to use BootstrapFlavor for bootstrap machines when specified, falling back to control plane flavor
  • pkg/asset/machines/openstack/openstackmachines_test.go: Added TestBootstrapFlavorSelection with table-driven tests

MAPI Machine Generation

  • pkg/asset/machines/openstack/machines.go: Updated generateProviderSpec() with same bootstrap flavor selection logic for consistency across both code paths
  • pkg/asset/machines/openstack/machines_test.go: Added TestMAPIBootstrapFlavorSelection with parallel test coverage

Documentation

  • docs/user/openstack/customization.md: Added bootstrapFlavor to cluster-scoped properties, documented NFV/NUMA use case with example configuration, updated machine pools section to reference the new field

Implementation Notes

  • The BootstrapFlavor field is a plain string type, so no deepcopy generation changes were required—existing *out = *in handling covers scalar fields
  • Validation follows the established pattern: fetch flavor from OpenStack API, record absence if 404, validator reports field.NotFound
  • Both CAPI and MAPI paths use identical flavor selection logic: check platform.BootstrapFlavor for bootstrap role, fall back to mpool.FlavorName when empty
  • Full backward compatibility maintained—empty bootstrapFlavor preserves existing behavior of using control plane flavor

Testing

  • Unit tests added for validation covering: no flavor specified (backward compatible), valid flavor present, invalid flavor absent
  • Unit tests added for CAPI machine generation covering bootstrap with flavor set, bootstrap with fallback, and master unaffected
  • Unit tests added for MAPI machine generation with same coverage as CAPI
  • All existing unit tests continue to pass
  • Build verification: go build, go vet, and gofmt all pass cleanly

Related Tickets


Generated by Forge SDLC Orchestrator

Summary by CodeRabbit

  • New Features

    • Added optional bootstrapFlavor to control the OpenStack flavor used for the temporary bootstrap instance; bootstrap now respects this field and falls back to the control-plane flavor when unset.
  • Documentation

    • Added docs and examples describing bootstrapFlavor behavior and scope (bootstrap-only), including NFV/NUMA guidance.
  • Tests

    • Added unit tests covering bootstrapFlavor selection and validation behavior.
  • Chores

    • Updated ignore rules to exclude local workflow state files.

Forge added 6 commits April 16, 2026 12:42
Detailed description:
- Added BootstrapFlavor string field to Platform struct in pkg/types/openstack/platform.go
- Field uses json:"bootstrapFlavor,omitempty" tag for backward compatibility
- Field is optional; when not set, bootstrap uses the control plane flavor (existing behavior)
- No deepcopy changes needed: plain string fields are covered by the existing *out = *in assignment
- All existing unit tests pass

Closes: AISOS-360
…nition

Auto-committed by Forge container fallback.
…rm validation

Detailed description:
- cloudinfo.go: Fetch bootstrapFlavor from OpenStack Compute API when specified,
  following the same pattern used for DefaultMachinePlatform and ControlPlane flavors.
  A 404 from OpenStack means the flavor is absent and is recorded as such (not fetched
  into ci.Flavors), enabling the validator to report it as not found.
- platform.go: Add validateBootstrapFlavor() that returns a field.NotFound error when
  the specified bootstrapFlavor is absent from ci.Flavors. The function is a no-op when
  BootstrapFlavor is empty, preserving backward compatibility.
- platform_test.go: Add TestBootstrapFlavor covering three scenarios:
    1. Flavor not specified -> no error (backward compatible)
    2. Valid flavor present in CloudInfo -> no error
    3. Invalid flavor absent from CloudInfo -> field.NotFound error

Closes: AISOS-361
…Flavor

Detailed description:
- Modified generateMachineSpec() in pkg/asset/machines/openstack/openstackmachines.go
  to select platform.BootstrapFlavor for the bootstrap machine when the field is set.
  Falls back to mpool.FlavorName when BootstrapFlavor is empty, preserving backward
  compatibility. Master machines continue to use FlavorName unconditionally.
- Added TestBootstrapFlavorSelection in openstackmachines_test.go with three
  table-driven sub-tests covering: bootstrap+flavor set, bootstrap+flavor empty
  (fallback), and master+flavor set (master unaffected).

Closes: AISOS-362
Detailed description:
- pkg/asset/machines/openstack/machines.go: Updated generateProviderSpec()
  to check platform.BootstrapFlavor when role == bootstrapRole. When
  BootstrapFlavor is set, it is used as the flavor; otherwise falls back
  to mpool.FlavorName (control plane flavor). Master and worker machines
  are unaffected.
- pkg/asset/machines/openstack/machines_test.go: Added
  TestMAPIBootstrapFlavorSelection with three table-driven sub-tests
  covering: bootstrap uses BootstrapFlavor when specified, bootstrap falls
  back to control plane flavor when empty, master always uses FlavorName.

This mirrors the equivalent change already made in the CAPI code path
(openstackmachines.go) and ensures consistency across both CAPI and MAPI
machine generation for the bootstrapFlavor feature.

Closes: AISOS-363
Detailed description:
- Added bootstrapFlavor to the Cluster-scoped properties list with a
  description of its purpose, optional nature, and fallback behavior
- Added a new 'Bootstrap flavor for NFV/NUMA workloads' example section
  explaining why the field is needed (NFV flavors with hw:numa_nodes or
  CPU pinning may cause scheduling issues for the temporary bootstrap node)
  and providing a complete install-config.yaml YAML example
- Updated the Table of Contents to include the new example subsection
- Updated the Machine pools bootstrap note to reference bootstrapFlavor
  as a way to independently override the bootstrap instance flavor
- Fallback chain is clearly documented: bootstrapFlavor falls back to the
  controlPlane machine pool type, which in turn falls back to
  defaultMachinePlatform.type

Closes: AISOS-365
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Apr 16, 2026

Walkthrough

Adds an optional OpenStack bootstrapFlavor field to types/CRD and docs; fetches and validates the bootstrap flavor in cloud-info collection; uses bootstrapFlavor for bootstrap machine/provider specs when set; updates tests and gitignore.

Changes

Cohort / File(s) Summary
Repository config & CRD
/.gitignore, data/data/install.openshift.io_installconfigs.yaml
Ignore .forge/; add spec.platform.openstack.bootstrapFlavor (string) to InstallConfig CRD schema.
Types
pkg/types/openstack/platform.go
Add BootstrapFlavor string (json:"bootstrapFlavor,omitempty") to openstack.Platform.
Documentation
docs/user/openstack/customization.md
Document new cluster-scoped bootstrapFlavor, add "Bootstrap flavor for NFV/NUMA workloads" section with example and fallback rules.
Cloud info & Validation
pkg/asset/installconfig/openstack/validation/cloudinfo.go, pkg/asset/installconfig/openstack/validation/platform.go
Collect bootstrap flavor into CloudInfo.Flavors if set (suppress 404); validate platform.BootstrapFlavor exists in CloudInfo.Flavors, return field.NotFound when missing.
Validation tests
pkg/asset/installconfig/openstack/validation/platform_test.go
Add TestBootstrapFlavor covering unset/present/missing bootstrap flavor scenarios.
Machine/provider spec generation
pkg/asset/machines/openstack/machines.go, pkg/asset/machines/openstack/openstackmachines.go
Select platform.BootstrapFlavor for bootstrap-role machines when non-empty; otherwise use machine pool flavor. Other roles unchanged.
Machine tests
pkg/asset/machines/openstack/machines_test.go, pkg/asset/machines/openstack/openstackmachines_test.go
Add tests (TestMAPIBootstrapFlavorSelection, TestBootstrapFlavorSelection) and helpers to verify bootstrap vs master flavor selection and fallback behavior.
sequenceDiagram
    participant IC as InstallConfig
    participant CI as CloudInfo
    participant OS as OpenStack API
    participant VAL as Validator
    participant MG as MachineGenerator

    rect rgba(0,128,255,0.5)
        IC->>CI: provide OpenStack.BootstrapFlavor (optional)
    end
    rect rgba(0,200,100,0.5)
        CI->>OS: get flavor info (if BootstrapFlavor set and not cached)
        OS-->>CI: flavor metadata / 404
    end
    rect rgba(255,165,0,0.5)
        VAL->>CI: validate platform.BootstrapFlavor exists in CI.Flavors
        CI-->>VAL: success or NotFound
    end
    rect rgba(128,0,128,0.5)
        MG->>CI: request flavor for machine role (bootstrap/master)
        CI-->>MG: flavor name (BootstrapFlavor or pool flavor)
        MG->>OS: create machine with selected flavor
    end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

🚥 Pre-merge checks | ✅ 8 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 57.14% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Title check ❓ Inconclusive The PR title '[AISOS-358] Implementation for AISOS-358' is vague and generic, using a ticket reference without clearly describing the actual change (adding BootstrapFlavor support for OpenStack). Replace with a descriptive title that clarifies the main change, such as 'Add BootstrapFlavor support for OpenStack bootstrap machines' or similar.
✅ Passed checks (8 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Stable And Deterministic Test Names ✅ Passed The pull request does not use Ginkgo test framework; all tests are standard Go unit tests using the testing package with stable function names.
Test Structure And Quality ✅ Passed The custom check reviews Ginkgo test code quality, but this PR contains only Go standard testing package tests, making the check non-applicable.
Microshift Test Compatibility ✅ Passed PR contains only standard Go unit tests, not Ginkgo e2e tests, so the check for unsupported APIs in e2e tests does not apply.
Single Node Openshift (Sno) Test Compatibility ✅ Passed This pull request does not add any Ginkgo e2e tests. The changes include only standard Go unit tests using the testing package, and contain no Ginkgo patterns.
Topology-Aware Scheduling Compatibility ✅ Passed PR adds OpenStack BootstrapFlavor field for infrastructure provisioning without introducing topology-aware scheduling constraints.
Ote Binary Stdout Contract ✅ Passed PR introduces no violations of OTE Binary Stdout Contract. Changes are limited to OpenStack bootstrap flavor configuration support with no process-level code modifications or stdout writes.
Ipv6 And Disconnected Network Test Compatibility ✅ Passed The PR contains only standard Go unit tests, not Ginkgo e2e tests, so the custom check is not applicable.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 golangci-lint (2.11.4)

Error: can't load config: unsupported version of the configuration: "" See https://golangci-lint.run/docs/product/migration-guide for migration instructions
The command is terminated due to an error: can't load config: unsupported version of the configuration: "" See https://golangci-lint.run/docs/product/migration-guide for migration instructions


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@eshulman2 eshulman2 marked this pull request as draft April 16, 2026 13:20
@openshift-ci openshift-ci Bot added the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Apr 16, 2026
@openshift-ci openshift-ci Bot requested review from andfasano and dlaw4608 April 16, 2026 13:20
@openshift-ci
Copy link
Copy Markdown
Contributor

openshift-ci Bot commented Apr 16, 2026

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:
Once this PR has been reviewed and has the lgtm label, please assign bfournie for approval. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@docs/user/openstack/customization.md`:
- Around line 156-160: The second blockquote has an extra blank line breaking
the blockquote sequence and triggering MD028; fix the markdown by making the
blockquote lines contiguous (ensure each line begins with '>' with no blank line
between the two notes), so the two notes about bootstrapFlavor form a single
proper blockquote sequence in the content that includes both the "The bootstrap
instance..." and "If `bootstrapFlavor` is not set..." lines.
🪄 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: Repository: openshift/coderabbit/.coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: ff4d9ab8-3912-4028-b492-f9ea35e18539

📥 Commits

Reviewing files that changed from the base of the PR and between 4ec0828 and 8099f55.

📒 Files selected for processing (10)
  • .gitignore
  • docs/user/openstack/customization.md
  • pkg/asset/installconfig/openstack/validation/cloudinfo.go
  • pkg/asset/installconfig/openstack/validation/platform.go
  • pkg/asset/installconfig/openstack/validation/platform_test.go
  • pkg/asset/machines/openstack/machines.go
  • pkg/asset/machines/openstack/machines_test.go
  • pkg/asset/machines/openstack/openstackmachines.go
  • pkg/asset/machines/openstack/openstackmachines_test.go
  • pkg/types/openstack/platform.go

Comment thread docs/user/openstack/customization.md
@eshulman2 eshulman2 marked this pull request as ready for review April 16, 2026 14:19
@openshift-ci openshift-ci Bot removed the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Apr 16, 2026
@openshift-ci openshift-ci Bot requested a review from bfournie April 16, 2026 14:20
Regenerate data/data/install.openshift.io_installconfigs.yaml to include
the bootstrapFlavor field added to the OpenStack Platform type. This
fixes the ci/prow/verify-codegen CI failure caused by codegen drift.

Closes: AISOS-358-ci-fix
@eshulman2
Copy link
Copy Markdown
Member Author

@coderabbitai help

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Apr 19, 2026

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

CodeRabbit commands

These commands are invoked using PR/Issue comments.

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai evaluate custom pre-merge check --instructions <custom-checks-instructions> --name <custom-checks-title> [--mode <error|warning>] to validate the custom pre-merge checks instructions. Defaults to error when --mode is omitted.
  • @coderabbitai ignore pre-merge checks to override pre-merge checks and get an approval on PR.
  • @coderabbitai run pre-merge checks to run pre-merge checks on the pull request.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai generate unit tests to generate unit tests for this PR.
  • @coderabbitai resolve merge conflict to automatically resolve merge conflicts.
  • @coderabbitai autofix to automatically fix issues identified in unresolved review comments.
  • @coderabbitai resolve to resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai generate configuration to create a PR that adds the current resolved configuration as .coderabbit.yaml (or show it if already present).
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore or @coderabbit ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

Status, support, documentation and community

  • Visit our status page to check the current availability of CodeRabbit.
  • Create a ticket on our support page for assistance with any issues or questions.
  • Visit our documentation site for detailed information on how to use CodeRabbit.
  • Join our Discord community to connect with other users and get help from the community.
  • Follow us on X/Twitter for updates and announcements.

@eshulman2
Copy link
Copy Markdown
Member Author

@coderabbitai review

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Apr 19, 2026

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@eshulman2
Copy link
Copy Markdown
Member Author

@coderabbitai full review

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Apr 19, 2026

✅ Actions performed

Full review triggered.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

♻️ Duplicate comments (1)
docs/user/openstack/customization.md (1)

156-160: ⚠️ Potential issue | 🟡 Minor

Fix the blockquote blank line for MD028.

Line 158 is a plain blank line between adjacent blockquote notes, which markdownlint flags as MD028.

🧹 Proposed markdown fix
 > **Note**
 > The bootstrap instance is temporary and is removed once the cluster is fully operational. The `bootstrapFlavor` has no effect on control plane or worker machine flavors.
-
+>
 > **Note**
 > If `bootstrapFlavor` is not set, the bootstrap instance uses the flavor from the `controlPlane` machine pool. If that is also unset, it falls back to `defaultMachinePlatform.type`.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/user/openstack/customization.md` around lines 156 - 160, Remove the
blank line separating the two adjacent blockquote notes so they remain as two
consecutive blockquotes (fixing MD028); locate the two "**Note**" blockquotes
that mention `bootstrapFlavor` and `defaultMachinePlatform.type` and ensure
there is no empty line between them so each stays its own blockquote paragraph.
🧹 Nitpick comments (2)
pkg/asset/machines/openstack/machines.go (1)

254-267: Flavor selection logic looks correct and mirrors the CAPI path.

Bootstrap-only override with fallback to mpool.FlavorName matches generateMachineSpec in openstackmachines.go, preserving backward compatibility when BootstrapFlavor is unset.

Nit: the comment on line 256 says “Master machines always use FlavorName” but this fallback also applies to worker role here (this function is used for all roles via Machines(...)). Consider tightening the comment to avoid implying role-specific behavior that isn't enforced at this site.

Proposed comment tweak
-	// Determine the flavor to use for this machine.
-	// Bootstrap machines use BootstrapFlavor when specified; otherwise fall back to the
-	// control plane flavor from the machine pool. Master machines always use FlavorName.
+	// Determine the flavor to use for this machine.
+	// Bootstrap machines use platform.BootstrapFlavor when specified; all other roles
+	// (and bootstrap when BootstrapFlavor is unset) use the machine pool's FlavorName.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@pkg/asset/machines/openstack/machines.go` around lines 254 - 267, The comment
describing flavor selection is misleading because it implies role-specific
behavior ("Master machines always use FlavorName") even though this function
(used by Machines(...) for all roles) applies the same fallback to
mpool.FlavorName; update the comment above the flavor selection logic to
accurately state that bootstrapRole uses platform.BootstrapFlavor when set,
otherwise all roles (including master/worker) fall back to mpool.FlavorName;
reference the variables flavorName, mpool.FlavorName, platform.BootstrapFlavor,
role and bootstrapRole so the intent is clear.
pkg/asset/installconfig/openstack/validation/cloudinfo.go (1)

196-208: Repeated flavor-fetch block — consider extracting a helper.

This is the fourth near-identical copy of the "if flavorName != '' && not seen → getFlavor → swallow 404 → store" pattern (lines 153-165, 167-179, 181-195, now 196-208). The new block is correct and consistent with the others, so no functional concern, but the duplication is now pronounced enough that a small helper would improve maintainability and ensure future changes (e.g., logging, retries, different error handling) stay uniform.

Proposed refactor
// fetchFlavorIfNeeded fetches the given flavor into ci.Flavors unless already present.
// A 404 response is silently ignored; validation elsewhere reports the missing flavor.
func (ci *CloudInfo) fetchFlavorIfNeeded(ctx context.Context, flavorName string) error {
    if flavorName == "" {
        return nil
    }
    if _, seen := ci.Flavors[flavorName]; seen {
        return nil
    }
    flavor, err := ci.getFlavor(ctx, flavorName)
    if gophercloud.ResponseCodeIs(err, http.StatusNotFound) {
        return nil
    }
    if err != nil {
        return err
    }
    ci.Flavors[flavorName] = flavor
    return nil
}

Then each call site collapses to e.g. if err := ci.fetchFlavorIfNeeded(ctx, ic.OpenStack.BootstrapFlavor); err != nil { return err }.

Also minor: line 196 drops the blank separator line that existed between the previous flavor blocks (195 } is immediately followed by the new block's comment on 197). Cosmetic only.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@pkg/asset/installconfig/openstack/validation/cloudinfo.go` around lines 196 -
208, Extract the repeated "check flavor name, skip if blank or already present,
call ci.getFlavor, ignore 404, store in ci.Flavors or return error" logic into a
helper on CloudInfo (e.g. func (ci *CloudInfo) fetchFlavorIfNeeded(ctx
context.Context, flavorName string) error) that returns nil for empty name, for
already-seen names, and when getFlavor returns a 404, otherwise returns any
error and sets ci.Flavors[flavorName]=flavor; then replace each duplicated block
(the four places that reference ic.OpenStack.BootstrapFlavor,
ic.OpenStack.MasterFlavorName, etc.) with calls like if err :=
ci.fetchFlavorIfNeeded(ctx, ic.OpenStack.BootstrapFlavor); err != nil { return
err } to keep behavior identical.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Duplicate comments:
In `@docs/user/openstack/customization.md`:
- Around line 156-160: Remove the blank line separating the two adjacent
blockquote notes so they remain as two consecutive blockquotes (fixing MD028);
locate the two "**Note**" blockquotes that mention `bootstrapFlavor` and
`defaultMachinePlatform.type` and ensure there is no empty line between them so
each stays its own blockquote paragraph.

---

Nitpick comments:
In `@pkg/asset/installconfig/openstack/validation/cloudinfo.go`:
- Around line 196-208: Extract the repeated "check flavor name, skip if blank or
already present, call ci.getFlavor, ignore 404, store in ci.Flavors or return
error" logic into a helper on CloudInfo (e.g. func (ci *CloudInfo)
fetchFlavorIfNeeded(ctx context.Context, flavorName string) error) that returns
nil for empty name, for already-seen names, and when getFlavor returns a 404,
otherwise returns any error and sets ci.Flavors[flavorName]=flavor; then replace
each duplicated block (the four places that reference
ic.OpenStack.BootstrapFlavor, ic.OpenStack.MasterFlavorName, etc.) with calls
like if err := ci.fetchFlavorIfNeeded(ctx, ic.OpenStack.BootstrapFlavor); err !=
nil { return err } to keep behavior identical.

In `@pkg/asset/machines/openstack/machines.go`:
- Around line 254-267: The comment describing flavor selection is misleading
because it implies role-specific behavior ("Master machines always use
FlavorName") even though this function (used by Machines(...) for all roles)
applies the same fallback to mpool.FlavorName; update the comment above the
flavor selection logic to accurately state that bootstrapRole uses
platform.BootstrapFlavor when set, otherwise all roles (including master/worker)
fall back to mpool.FlavorName; reference the variables flavorName,
mpool.FlavorName, platform.BootstrapFlavor, role and bootstrapRole so the intent
is clear.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository: openshift/coderabbit/.coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: c91cf3bf-fc17-4cf5-9a7a-d8476c803b10

📥 Commits

Reviewing files that changed from the base of the PR and between 4ec0828 and 1ceccc9.

📒 Files selected for processing (11)
  • .gitignore
  • data/data/install.openshift.io_installconfigs.yaml
  • docs/user/openstack/customization.md
  • pkg/asset/installconfig/openstack/validation/cloudinfo.go
  • pkg/asset/installconfig/openstack/validation/platform.go
  • pkg/asset/installconfig/openstack/validation/platform_test.go
  • pkg/asset/machines/openstack/machines.go
  • pkg/asset/machines/openstack/machines_test.go
  • pkg/asset/machines/openstack/openstackmachines.go
  • pkg/asset/machines/openstack/openstackmachines_test.go
  • pkg/types/openstack/platform.go

@openshift-ci
Copy link
Copy Markdown
Contributor

openshift-ci Bot commented Apr 19, 2026

@eshulman2: The following tests failed, say /retest to rerun all failed tests or /retest-required to rerun all mandatory failed tests:

Test name Commit Details Required Rerun command
ci/prow/e2e-openstack-ovn 1ceccc9 link true /test e2e-openstack-ovn
ci/prow/e2e-openstack-nfv-intel 1ceccc9 link false /test e2e-openstack-nfv-intel
ci/prow/e2e-openstack-proxy 1ceccc9 link false /test e2e-openstack-proxy

Full PR test history. Your PR dashboard.

Details

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here.

@mandre
Copy link
Copy Markdown
Member

mandre commented Apr 23, 2026

We've not agreed to this feature as a team.

/hold

@openshift-ci openshift-ci Bot added the do-not-merge/hold Indicates that a PR should not merge because someone has issued a /hold command. label Apr 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

do-not-merge/hold Indicates that a PR should not merge because someone has issued a /hold command.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants