Skip to content

OCPBUGS-74513: OCPBUGS-74519: OCPBUGS-78487: Remove MachineConfigNodes and PinnedImages feature gates and v1alpha1 references#2715

Draft
isabella-janssen wants to merge 2 commits intoopenshift:masterfrom
isabella-janssen:ocpbugs-74513
Draft

OCPBUGS-74513: OCPBUGS-74519: OCPBUGS-78487: Remove MachineConfigNodes and PinnedImages feature gates and v1alpha1 references#2715
isabella-janssen wants to merge 2 commits intoopenshift:masterfrom
isabella-janssen:ocpbugs-74513

Conversation

@isabella-janssen
Copy link
Member

@isabella-janssen isabella-janssen commented Feb 17, 2026

This removes the MachineConfigNodes and PinnedImages feature gates as well as the v1alpha1 APIs for each, which were replaced with v1 APIs in 4.19 (#2255 & #2198).

@openshift-ci-robot
Copy link

Pipeline controller notification
This repo is configured to use the pipeline controller. Second-stage tests will be triggered either automatically or after lgtm label is added, depending on the repository configuration. The pipeline controller will automatically detect which contexts are required and will utilize /test Prow commands to trigger the second stage.

For optional jobs, comment /test ? to see a list of all defined jobs. To trigger manually all jobs from second stage use /pipeline required command.

This repository is configured in: LGTM mode

@openshift-ci-robot openshift-ci-robot added jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. jira/valid-bug Indicates that a referenced Jira bug is valid for the branch this PR is targeting. labels Feb 17, 2026
@openshift-ci-robot
Copy link

@isabella-janssen: This pull request references Jira Issue OCPBUGS-74513, which is valid.

3 validation(s) were run on this bug
  • bug is open, matching expected state (open)
  • bug target version (4.22.0) matches configured target version for branch (4.22.0)
  • bug is in the state POST, which is one of the valid states (NEW, ASSIGNED, POST)

Requesting review from QA contact:
/cc @sergiordlr

The bug has been updated to refer to the pull request using the external bug tracker.

Details

In response to this:

This removes the MachineConfigNodes and PinnedImages feature gates and should merge after openshift/machine-config-operator#5609.

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 openshift-eng/jira-lifecycle-plugin repository.

@coderabbitai
Copy link

coderabbitai bot commented Feb 17, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Central YAML (inherited)

Review profile: CHILL

Plan: Pro

Run ID: c3e475f7-1254-4210-9d5e-9e75a5932d11

📥 Commits

Reviewing files that changed from the base of the PR and between fe4319e and 018317a.

⛔ Files ignored due to path filters (14)
  • machineconfiguration/v1/zz_generated.featuregated-crd-manifests.yaml is excluded by !**/zz_generated*
  • machineconfiguration/v1/zz_generated.featuregated-crd-manifests/machineconfignodes.machineconfiguration.openshift.io/AAA_ungated.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • machineconfiguration/v1/zz_generated.featuregated-crd-manifests/machineconfigpools.machineconfiguration.openshift.io/AAA_ungated.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • machineconfiguration/v1/zz_generated.featuregated-crd-manifests/machineconfigpools.machineconfiguration.openshift.io/OSStreams.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • machineconfiguration/v1/zz_generated.featuregated-crd-manifests/machineconfigpools.machineconfiguration.openshift.io/PinnedImages.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • machineconfiguration/v1/zz_generated.featuregated-crd-manifests/pinnedimagesets.machineconfiguration.openshift.io/AAA_ungated.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • machineconfiguration/v1alpha1/zz_generated.crd-manifests/0000_80_machine-config_01_machineconfignodes.crd.yaml is excluded by !**/zz_generated.crd-manifests/*
  • machineconfiguration/v1alpha1/zz_generated.crd-manifests/0000_80_machine-config_01_pinnedimagesets.crd.yaml is excluded by !**/zz_generated.crd-manifests/*
  • machineconfiguration/v1alpha1/zz_generated.deepcopy.go is excluded by !**/zz_generated*
  • machineconfiguration/v1alpha1/zz_generated.featuregated-crd-manifests.yaml is excluded by !**/zz_generated*
  • machineconfiguration/v1alpha1/zz_generated.featuregated-crd-manifests/machineconfignodes.machineconfiguration.openshift.io/MachineConfigNodes.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • machineconfiguration/v1alpha1/zz_generated.featuregated-crd-manifests/pinnedimagesets.machineconfiguration.openshift.io/PinnedImages.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • machineconfiguration/v1alpha1/zz_generated.swagger_doc_generated.go is excluded by !**/zz_generated*
  • openapi/generated_openapi/zz_generated.openapi.go is excluded by !openapi/**, !**/zz_generated*
📒 Files selected for processing (23)
  • features.md
  • features/features.go
  • machineconfiguration/v1/tests/machineconfignodes.machineconfiguration.openshift.io/IrreconcilableMachineConfig.yaml
  • machineconfiguration/v1/tests/machineconfignodes.machineconfiguration.openshift.io/MachineConfigNodes.yaml
  • machineconfiguration/v1/tests/machineconfignodes.machineconfiguration.openshift.io/NoRegistryClusterInstall.yaml
  • machineconfiguration/v1/tests/machineconfigpools.machineconfiguration.openshift.io/PinnedImages.yaml
  • machineconfiguration/v1/tests/pinnedimagesets.machineconfiguration.openshift.io/PinnedImages.yaml
  • machineconfiguration/v1/types.go
  • machineconfiguration/v1/types_machineconfignode.go
  • machineconfiguration/v1/types_pinnedimageset.go
  • machineconfiguration/v1alpha1/register.go
  • machineconfiguration/v1alpha1/tests/machineconfignodes.machineconfiguration.openshift.io/MachineConfigNodes.yaml
  • machineconfiguration/v1alpha1/tests/pinnedimagesets.machineconfiguration.openshift.io/PinnedImages.yaml
  • machineconfiguration/v1alpha1/types_machineconfignode.go
  • machineconfiguration/v1alpha1/types_pinnedimageset.go
  • payload-manifests/featuregates/featureGate-4-10-Hypershift-Default.yaml
  • payload-manifests/featuregates/featureGate-4-10-Hypershift-DevPreviewNoUpgrade.yaml
  • payload-manifests/featuregates/featureGate-4-10-Hypershift-OKD.yaml
  • payload-manifests/featuregates/featureGate-4-10-Hypershift-TechPreviewNoUpgrade.yaml
  • payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-Default.yaml
  • payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-DevPreviewNoUpgrade.yaml
  • payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-OKD.yaml
  • payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-TechPreviewNoUpgrade.yaml
💤 Files with no reviewable changes (18)
  • features.md
  • payload-manifests/featuregates/featureGate-4-10-Hypershift-Default.yaml
  • machineconfiguration/v1alpha1/types_pinnedimageset.go
  • machineconfiguration/v1/tests/machineconfignodes.machineconfiguration.openshift.io/MachineConfigNodes.yaml
  • machineconfiguration/v1alpha1/register.go
  • machineconfiguration/v1/types_machineconfignode.go
  • machineconfiguration/v1alpha1/types_machineconfignode.go
  • machineconfiguration/v1/tests/pinnedimagesets.machineconfiguration.openshift.io/PinnedImages.yaml
  • payload-manifests/featuregates/featureGate-4-10-Hypershift-DevPreviewNoUpgrade.yaml
  • payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-DevPreviewNoUpgrade.yaml
  • payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-TechPreviewNoUpgrade.yaml
  • machineconfiguration/v1/types.go
  • payload-manifests/featuregates/featureGate-4-10-Hypershift-TechPreviewNoUpgrade.yaml
  • machineconfiguration/v1/tests/machineconfignodes.machineconfiguration.openshift.io/IrreconcilableMachineConfig.yaml
  • machineconfiguration/v1alpha1/tests/machineconfignodes.machineconfiguration.openshift.io/MachineConfigNodes.yaml
  • payload-manifests/featuregates/featureGate-4-10-Hypershift-OKD.yaml
  • payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-Default.yaml
  • payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-OKD.yaml
🚧 Files skipped from review as they are similar to previous changes (2)
  • machineconfiguration/v1alpha1/tests/pinnedimagesets.machineconfiguration.openshift.io/PinnedImages.yaml
  • machineconfiguration/v1/tests/machineconfignodes.machineconfiguration.openshift.io/NoRegistryClusterInstall.yaml

📝 Walkthrough

Walkthrough

Removed two OpenShift feature gates, MachineConfigNodes and PinnedImages. Their feature-gate variables and entries were removed from features/features.go and features.md, and those gates were deleted from multiple payload featureGate YAMLs. Feature-gate annotations and gated entries were removed from machineconfiguration v1 type files and CRD test YAMLs. Entire v1alpha1 API type files and tests for MachineConfigNode and PinnedImageSet were deleted and those types were removed from machineconfiguration/v1alpha1/register.go. No other control-flow changes were made.

🚥 Pre-merge checks | ✅ 7 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Test Structure And Quality ⚠️ Warning Pull request introduces Ginkgo test code with 62% of assertions lacking meaningful failure messages and 13 cluster operations missing proper timeout handling via Eventually blocks. Add meaningful failure messages to all Expect assertions and wrap cluster-interactive operations lacking Eventually blocks with proper timeout handling.
✅ Passed checks (7 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and specifically summarizes the main changes: removal of two feature gates (MachineConfigNodes and PinnedImages) and their v1alpha1 API references.
Description check ✅ Passed The description is directly related to the changeset, explaining what was removed (two feature gates and v1alpha1 APIs) and providing context about why (they were replaced with v1 APIs in 4.19).
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Stable And Deterministic Test Names ✅ Passed The PR does not introduce any Ginkgo test names with dynamic or unstable content. All test names in the modified test YAML files are static and descriptive, clearly indicating what each test validates (e.g., "Should be able to create a minimal MachineConfigNode", "Node name must match the Object name"). No test names contain fmt.Sprintf, variable interpolation, timestamps, UUIDs, pod/node names, or any other values that could change between test runs.
Microshift Test Compatibility ✅ Passed Shell script searches confirm no new Ginkgo e2e tests are being introduced in this PR; it is exclusively a deprecation/removal PR with no new test patterns.
Single Node Openshift (Sno) Test Compatibility ✅ Passed This PR does not add any new Ginkgo e2e tests. The pull request is exclusively a removal/cleanup operation: it removes feature gates, deletes v1alpha1 API type definitions, removes feature gate annotations from v1 types, and cleans up associated test YAML manifests. Since the SNO compatibility check is designed to assess new Ginkgo e2e tests for multi-node assumptions, and no new e2e tests are introduced in this PR, the check is not applicable.
Ipv6 And Disconnected Network Test Compatibility ✅ Passed This PR does not add any new Ginkgo e2e tests; it exclusively removes deprecated API definitions, feature gate entries, and test fixture files.

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

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
📝 Coding Plan
  • Generate coding plan for human review comments

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.3)

Error: build linters: unable to load custom analyzer "kubeapilinter": tools/_output/bin/kube-api-linter.so, plugin: not implemented
The command is terminated due to an error: build linters: unable to load custom analyzer "kubeapilinter": tools/_output/bin/kube-api-linter.so, plugin: not implemented


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

@openshift-ci
Copy link
Contributor

openshift-ci bot commented Feb 17, 2026

@isabella-janssen: This PR was included in a payload test run from openshift/machine-config-operator#5609
trigger 1 job(s) for the /payload-(with-prs|job|aggregate|job-with-prs|aggregate-with-prs) command

  • periodic-ci-openshift-machine-config-operator-release-4.21-periodics-e2e-aws-mco-disruptive-techpreview-1of2

See details on https://pr-payload-tests.ci.openshift.org/runs/ci/6aa05d40-0c44-11f1-9ce4-4d5ce96c4ea8-0

@openshift-ci
Copy link
Contributor

openshift-ci bot commented Feb 17, 2026

@isabella-janssen: This PR was included in a payload test run from openshift/machine-config-operator#5609
trigger 1 job(s) for the /payload-(with-prs|job|aggregate|job-with-prs|aggregate-with-prs) command

  • periodic-ci-openshift-machine-config-operator-release-4.21-periodics-e2e-aws-mco-disruptive-techpreview-2of2

See details on https://pr-payload-tests.ci.openshift.org/runs/ci/843dfb40-0c44-11f1-9e48-755722ba80a8-0

@openshift-ci
Copy link
Contributor

openshift-ci bot commented Feb 18, 2026

@isabella-janssen: This PR was included in a payload test run from openshift/machine-config-operator#5609
trigger 1 job(s) for the /payload-(with-prs|job|aggregate|job-with-prs|aggregate-with-prs) command

  • periodic-ci-openshift-machine-config-operator-release-4.22-periodics-e2e-aws-mco-disruptive-techpreview-1of2

See details on https://pr-payload-tests.ci.openshift.org/runs/ci/4e394a80-0cfe-11f1-9008-fbd59384bacd-0

@openshift-ci
Copy link
Contributor

openshift-ci bot commented Feb 18, 2026

@isabella-janssen: This PR was included in a payload test run from openshift/machine-config-operator#5609
trigger 1 job(s) for the /payload-(with-prs|job|aggregate|job-with-prs|aggregate-with-prs) command

  • periodic-ci-openshift-machine-config-operator-release-4.22-periodics-e2e-aws-mco-disruptive-techpreview-2of2

See details on https://pr-payload-tests.ci.openshift.org/runs/ci/524f9610-0cfe-11f1-8b6a-9e13349dc0d7-0

@openshift-ci
Copy link
Contributor

openshift-ci bot commented Feb 18, 2026

@isabella-janssen: This PR was included in a payload test run from openshift/machine-config-operator#5609
trigger 1 job(s) for the /payload-(with-prs|job|aggregate|job-with-prs|aggregate-with-prs) command

  • periodic-ci-openshift-release-main-ci-4.22-e2e-aws-ovn-techpreview-serial-2of3

See details on https://pr-payload-tests.ci.openshift.org/runs/ci/5fc92400-0cfe-11f1-9bf2-4de395b04ad1-0

@openshift-ci
Copy link
Contributor

openshift-ci bot commented Feb 18, 2026

@isabella-janssen: This PR was included in a payload test run from openshift/machine-config-operator#5609
trigger 1 job(s) for the /payload-(with-prs|job|aggregate|job-with-prs|aggregate-with-prs) command

  • periodic-ci-openshift-release-main-ci-4.22-e2e-aws-ovn-techpreview-serial-1of3

See details on https://pr-payload-tests.ci.openshift.org/runs/ci/5da83fd0-0cfe-11f1-8b6b-9146d3917b7a-0

@openshift-ci
Copy link
Contributor

openshift-ci bot commented Feb 18, 2026

@isabella-janssen: This PR was included in a payload test run from openshift/machine-config-operator#5609
trigger 1 job(s) for the /payload-(with-prs|job|aggregate|job-with-prs|aggregate-with-prs) command

  • periodic-ci-openshift-release-main-ci-4.22-e2e-aws-ovn-techpreview-serial-3of3

See details on https://pr-payload-tests.ci.openshift.org/runs/ci/633fd430-0cfe-11f1-96e2-6f48c960f3ec-0

@openshift-ci
Copy link
Contributor

openshift-ci bot commented Feb 19, 2026

@isabella-janssen: This PR was included in a payload test run from openshift/machine-config-operator#5609
trigger 1 job(s) for the /payload-(with-prs|job|aggregate|job-with-prs|aggregate-with-prs) command

  • periodic-ci-openshift-release-main-ci-4.22-e2e-aws-ovn-techpreview-serial-1of3

See details on https://pr-payload-tests.ci.openshift.org/runs/ci/7b4b40c0-0dbf-11f1-8257-094951812dc9-0

@openshift-ci
Copy link
Contributor

openshift-ci bot commented Feb 19, 2026

@isabella-janssen: This PR was included in a payload test run from openshift/machine-config-operator#5609
trigger 1 job(s) for the /payload-(with-prs|job|aggregate|job-with-prs|aggregate-with-prs) command

  • periodic-ci-openshift-release-main-ci-4.22-e2e-aws-ovn-techpreview-serial-2of3

See details on https://pr-payload-tests.ci.openshift.org/runs/ci/7da906e0-0dbf-11f1-8e35-60e130204d6c-0

@openshift-ci
Copy link
Contributor

openshift-ci bot commented Feb 19, 2026

@isabella-janssen: This PR was included in a payload test run from openshift/machine-config-operator#5609
trigger 1 job(s) for the /payload-(with-prs|job|aggregate|job-with-prs|aggregate-with-prs) command

  • periodic-ci-openshift-release-main-ci-4.22-e2e-aws-ovn-techpreview-serial-3of3

See details on https://pr-payload-tests.ci.openshift.org/runs/ci/804c8890-0dbf-11f1-95a3-c5ba819bee74-0

@openshift-ci openshift-ci bot added the size/M Denotes a PR that changes 30-99 lines, ignoring generated files. label Mar 11, 2026
@JoelSpeed
Copy link
Contributor

/lgtm

Changes here are good when you're ready for this to go

@openshift-ci openshift-ci bot added the lgtm Indicates that a PR is ready to be merged. label Mar 11, 2026
@openshift-ci-robot
Copy link

Scheduling tests matching the pipeline_run_if_changed or not excluded by pipeline_skip_if_only_changed parameters:
/test e2e-aws-ovn
/test e2e-aws-ovn-hypershift
/test e2e-aws-ovn-hypershift-conformance
/test e2e-aws-ovn-techpreview
/test e2e-aws-serial-1of2
/test e2e-aws-serial-2of2
/test e2e-aws-serial-techpreview-1of2
/test e2e-aws-serial-techpreview-2of2
/test e2e-azure
/test e2e-gcp
/test e2e-upgrade
/test e2e-upgrade-out-of-change
/test minor-e2e-upgrade-minor

@openshift-ci
Copy link
Contributor

openshift-ci bot commented Mar 11, 2026

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: JoelSpeed

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

The pull request process is described 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

@openshift-ci openshift-ci bot added the approved Indicates a PR has been approved by an approver from all required OWNERS files. label Mar 11, 2026
@isabella-janssen isabella-janssen marked this pull request as ready for review March 12, 2026 14:31
@isabella-janssen
Copy link
Member Author

/retest-required

@qodo-code-review
Copy link

ⓘ You are approaching your monthly quota for Qodo. Upgrade your plan

Review Summary by Qodo

Remove MachineConfigNodes and PinnedImages feature gates

✨ Enhancement

Grey Divider

Walkthroughs

Description
• Remove MachineConfigNodes feature gate definition and references
• Remove PinnedImages feature gate definition and references
• Update feature gate manifest files across all cluster profiles
• Fix indentation inconsistencies in feature gate definitions
Diagram
flowchart LR
  A["Feature Gate Definitions"] -->|Remove MachineConfigNodes| B["Updated features.go"]
  A -->|Remove PinnedImages| B
  B -->|Update documentation| C["features.md"]
  B -->|Update manifests| D["Manifest Files"]
  D -->|8 cluster profile variants| E["Cleaned Feature Gates"]
Loading

Grey Divider

File Changes

1. features/features.go ✨ Enhancement +13/-29

Remove two feature gate definitions and fix indentation

features/features.go


2. features.md 📝 Documentation +0/-2

Remove feature gate rows from documentation table

features.md


3. payload-manifests/featuregates/featureGate-4-10-Hypershift-Default.yaml ⚙️ Configuration changes +0/-6

Remove MachineConfigNodes and PinnedImages entries

payload-manifests/featuregates/featureGate-4-10-Hypershift-Default.yaml


View more (7)
4. payload-manifests/featuregates/featureGate-4-10-Hypershift-DevPreviewNoUpgrade.yaml ⚙️ Configuration changes +0/-6

Remove MachineConfigNodes and PinnedImages entries

payload-manifests/featuregates/featureGate-4-10-Hypershift-DevPreviewNoUpgrade.yaml


5. payload-manifests/featuregates/featureGate-4-10-Hypershift-OKD.yaml ⚙️ Configuration changes +0/-6

Remove MachineConfigNodes and PinnedImages entries

payload-manifests/featuregates/featureGate-4-10-Hypershift-OKD.yaml


6. payload-manifests/featuregates/featureGate-4-10-Hypershift-TechPreviewNoUpgrade.yaml ⚙️ Configuration changes +0/-6

Remove MachineConfigNodes and PinnedImages entries

payload-manifests/featuregates/featureGate-4-10-Hypershift-TechPreviewNoUpgrade.yaml


7. payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-Default.yaml ⚙️ Configuration changes +0/-6

Remove MachineConfigNodes and PinnedImages entries

payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-Default.yaml


8. payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-DevPreviewNoUpgrade.yaml ⚙️ Configuration changes +0/-6

Remove MachineConfigNodes and PinnedImages entries

payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-DevPreviewNoUpgrade.yaml


9. payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-OKD.yaml ⚙️ Configuration changes +0/-6

Remove MachineConfigNodes and PinnedImages entries

payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-OKD.yaml


10. payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-TechPreviewNoUpgrade.yaml ⚙️ Configuration changes +0/-6

Remove MachineConfigNodes and PinnedImages entries

payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-TechPreviewNoUpgrade.yaml


Grey Divider

Qodo Logo

@qodo-code-review
Copy link

qodo-code-review bot commented Mar 12, 2026

Code Review by Qodo

🐞 Bugs (2) 📘 Rule violations (0) 📎 Requirement gaps (0)

Grey Divider


Action required

1. MachineConfigNodes CRDs filtered out 🐞 Bug ✓ Correctness
Description
MachineConfigNodes is removed from the rendered FeatureGate enabled list, but MachineConfigNode
CRDs/types are still annotated as gated on MachineConfigNodes, so manifest-merge will exclude
those manifests for every FeatureSet/profile. This will change generated CRD outputs (and likely
fail verify-codegen-crds) and can drop MachineConfigNode gated content from rendered payloads.
Code

payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-Default.yaml[L316-318]

-                    {
-                        "name": "MachineConfigNodes"
-                    },
Evidence
The payload FeatureGate manifest no longer lists MachineConfigNodes as enabled, while the CRD/type
inputs remain annotated with feature-gate.release.openshift.io/MachineConfigNodes. The
manifest-merge filter explicitly includes gated manifests only when all their
feature-gate.release.openshift.io/* annotations are present in the enabled set read from the
payload FeatureGate YAML; verify-codegen-crds runs this generator in verify mode.

payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-Default.yaml[313-342]
machineconfiguration/v1alpha1/types_machineconfignode.go[10-20]
machineconfiguration/v1alpha1/zz_generated.featuregated-crd-manifests/machineconfignodes.machineconfiguration.openshift.io/MachineConfigNodes.yaml[4-13]
tools/codegen/pkg/manifestmerge/filters.go[440-475]
tools/codegen/pkg/manifestmerge/filters.go[509-522]
hack/verify-codegen-crds.sh[5-7]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
`MachineConfigNodes` was removed from the payload FeatureGate enabled lists, but some CRDs/types are still marked with `+openshift:enable:FeatureGate=MachineConfigNodes` and generated partial manifests still carry `feature-gate.release.openshift.io/MachineConfigNodes`. The manifest-merge generator filters gated manifests by the enabled feature gates from payload FeatureGate YAMLs, so these inputs become unselectable and will change generated outputs / fail `--verify`.

### Issue Context
The intent of this PR is to remove the feature gate entirely (i.e., feature becomes unconditional). That requires removing the API/CRD gating markers as well and regenerating the derived manifests.

### Fix Focus Areas
- machineconfiguration/v1alpha1/types_machineconfignode.go[10-20]
- machineconfiguration/v1/types_machineconfignode.go[10-20]
- machineconfiguration/v1alpha1/zz_generated.featuregated-crd-manifests/machineconfignodes.machineconfiguration.openshift.io/MachineConfigNodes.yaml[4-13]
- tools/codegen/pkg/manifestmerge/filters.go[440-475]

After removing the gating markers, run the repo’s CRD codegen update (the same generators used by `hack/verify-codegen-crds.sh`) and commit the updated generated outputs (including any featuregated test cases that still mention `MachineConfigNodes`).

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. PinnedImages CRDs filtered out 🐞 Bug ✓ Correctness
Description
PinnedImages is removed from the rendered FeatureGate enabled list, but several APIs/CRD partial
manifests are still gated on PinnedImages, so manifest-merge will exclude those manifests for
every FeatureSet/profile. This will change generated CRD outputs (and likely fail
verify-codegen-crds) and can drop pinned-images related schema/CRDs from rendered payloads.
Code

payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-Default.yaml[L340-342]

-                    {
-                        "name": "PinnedImages"
-                    },
Evidence
The payload FeatureGate manifest no longer lists PinnedImages as enabled, but the pinned-images
APIs and CRD partials still include +openshift:enable:FeatureGate=PinnedImages and
feature-gate.release.openshift.io/PinnedImages. The manifest-merge filter includes a manifest only
if its feature-gate.release.openshift.io/* annotations are all present in the enabled set loaded
from the payload FeatureGate YAML.

payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-Default.yaml[331-342]
machineconfiguration/v1alpha1/types_pinnedimageset.go[10-20]
machineconfiguration/v1/types.go[440-455]
machineconfiguration/v1alpha1/zz_generated.featuregated-crd-manifests/pinnedimagesets.machineconfiguration.openshift.io/PinnedImages.yaml[4-13]
machineconfiguration/v1/zz_generated.featuregated-crd-manifests/machineconfigpools.machineconfiguration.openshift.io/PinnedImages.yaml[4-12]
tools/codegen/pkg/manifestmerge/filters.go[509-522]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
The `PinnedImages` feature gate was removed from the payload FeatureGate enabled lists, but several APIs/CRD partial manifests are still gated on `PinnedImages` via `+openshift:enable:FeatureGate=PinnedImages` and `feature-gate.release.openshift.io/PinnedImages`. The manifest-merge generator filters gated manifests by the enabled feature gates from payload FeatureGate YAMLs, so these manifests become unselectable and will change generated outputs / fail `--verify`.

### Issue Context
If `PinnedImages` is intended to be always-on, remove the gating markers and regenerate the CRD outputs so the schema/CRDs are no longer conditioned on a non-existent feature gate.

### Fix Focus Areas
- machineconfiguration/v1alpha1/types_pinnedimageset.go[10-20]
- machineconfiguration/v1/types.go[440-548]
- machineconfiguration/v1alpha1/zz_generated.featuregated-crd-manifests/pinnedimagesets.machineconfiguration.openshift.io/PinnedImages.yaml[4-13]
- machineconfiguration/v1/zz_generated.featuregated-crd-manifests/machineconfigpools.machineconfiguration.openshift.io/PinnedImages.yaml[4-12]
- tools/codegen/pkg/manifestmerge/filters.go[440-475]

After removing the gating markers, run the CRD generators invoked by `hack/verify-codegen-crds.sh` and commit updated generated files (including any featuregated tests that still list `PinnedImages`).

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

ⓘ The new review experience is currently in Beta. Learn more

Grey Divider

Qodo Logo

Comment on lines -316 to 318
{
"name": "MachineConfigNodes"
},
{
"name": "ManagedBootImagesCPMS"
},

Choose a reason for hiding this comment

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

Action required

1. Machineconfignodes crds filtered out 🐞 Bug ✓ Correctness

MachineConfigNodes is removed from the rendered FeatureGate enabled list, but MachineConfigNode
CRDs/types are still annotated as gated on MachineConfigNodes, so manifest-merge will exclude
those manifests for every FeatureSet/profile. This will change generated CRD outputs (and likely
fail verify-codegen-crds) and can drop MachineConfigNode gated content from rendered payloads.
Agent Prompt
### Issue description
`MachineConfigNodes` was removed from the payload FeatureGate enabled lists, but some CRDs/types are still marked with `+openshift:enable:FeatureGate=MachineConfigNodes` and generated partial manifests still carry `feature-gate.release.openshift.io/MachineConfigNodes`. The manifest-merge generator filters gated manifests by the enabled feature gates from payload FeatureGate YAMLs, so these inputs become unselectable and will change generated outputs / fail `--verify`.

### Issue Context
The intent of this PR is to remove the feature gate entirely (i.e., feature becomes unconditional). That requires removing the API/CRD gating markers as well and regenerating the derived manifests.

### Fix Focus Areas
- machineconfiguration/v1alpha1/types_machineconfignode.go[10-20]
- machineconfiguration/v1/types_machineconfignode.go[10-20]
- machineconfiguration/v1alpha1/zz_generated.featuregated-crd-manifests/machineconfignodes.machineconfiguration.openshift.io/MachineConfigNodes.yaml[4-13]
- tools/codegen/pkg/manifestmerge/filters.go[440-475]

After removing the gating markers, run the repo’s CRD codegen update (the same generators used by `hack/verify-codegen-crds.sh`) and commit the updated generated outputs (including any featuregated test cases that still mention `MachineConfigNodes`).

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

{
"name": "OpenShiftPodSecurityAdmission"
},
{

Choose a reason for hiding this comment

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

Action required

2. Pinnedimages crds filtered out 🐞 Bug ✓ Correctness

PinnedImages is removed from the rendered FeatureGate enabled list, but several APIs/CRD partial
manifests are still gated on PinnedImages, so manifest-merge will exclude those manifests for
every FeatureSet/profile. This will change generated CRD outputs (and likely fail
verify-codegen-crds) and can drop pinned-images related schema/CRDs from rendered payloads.
Agent Prompt
### Issue description
The `PinnedImages` feature gate was removed from the payload FeatureGate enabled lists, but several APIs/CRD partial manifests are still gated on `PinnedImages` via `+openshift:enable:FeatureGate=PinnedImages` and `feature-gate.release.openshift.io/PinnedImages`. The manifest-merge generator filters gated manifests by the enabled feature gates from payload FeatureGate YAMLs, so these manifests become unselectable and will change generated outputs / fail `--verify`.

### Issue Context
If `PinnedImages` is intended to be always-on, remove the gating markers and regenerate the CRD outputs so the schema/CRDs are no longer conditioned on a non-existent feature gate.

### Fix Focus Areas
- machineconfiguration/v1alpha1/types_pinnedimageset.go[10-20]
- machineconfiguration/v1/types.go[440-548]
- machineconfiguration/v1alpha1/zz_generated.featuregated-crd-manifests/pinnedimagesets.machineconfiguration.openshift.io/PinnedImages.yaml[4-13]
- machineconfiguration/v1/zz_generated.featuregated-crd-manifests/machineconfigpools.machineconfiguration.openshift.io/PinnedImages.yaml[4-12]
- tools/codegen/pkg/manifestmerge/filters.go[440-475]

After removing the gating markers, run the CRD generators invoked by `hack/verify-codegen-crds.sh` and commit updated generated files (including any featuregated tests that still list `PinnedImages`).

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

@openshift-ci openshift-ci bot removed the lgtm Indicates that a PR is ready to be merged. label Mar 12, 2026
@openshift-ci
Copy link
Contributor

openshift-ci bot commented Mar 12, 2026

New changes are detected. LGTM label has been removed.

@openshift-ci openshift-ci bot added size/XXL Denotes a PR that changes 1000+ lines, ignoring generated files. and removed size/M Denotes a PR that changes 30-99 lines, ignoring generated files. labels Mar 12, 2026
Copy link

@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.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
machineconfiguration/v1alpha1/tests/pinnedimagesets.machineconfiguration.openshift.io/PinnedImages.yaml (1)

1-3: ⚠️ Potential issue | 🟡 Minor

Remove the stale [TechPreview] prefix.

This manifest is no longer gated in the header, so the title should stop describing it as TechPreview as well.

Suggested fix
-name: "[TechPreview] PinnedImageSet"
+name: "PinnedImageSet"
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@machineconfiguration/v1alpha1/tests/pinnedimagesets.machineconfiguration.openshift.io/PinnedImages.yaml`
around lines 1 - 3, The manifest's metadata "name" field currently contains the
stale prefix "[TechPreview] PinnedImageSet"; remove that prefix so the name
reads "PinnedImageSet" (ensure the entry originally shown as name:
"[TechPreview] PinnedImageSet" is updated) and keep crdName:
pinnedimagesets.machineconfiguration.openshift.io and apiVersion unchanged; this
aligns the title with the manifest's non-gated status and avoids the outdated
TechPreview label.
machineconfiguration/v1/tests/machineconfigpools.machineconfiguration.openshift.io/PinnedImages.yaml (1)

1-3: ⚠️ Potential issue | 🟡 Minor

Drop the stale [TechPreview] label.

The feature-gate header was removed here, so this manifest title now advertises the schema as gated when it no longer is. Please rename it to avoid misleading generated output and future readers.

Suggested fix
-name: "[TechPreview] MachineConfigPool"
+name: "MachineConfigPool"
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@machineconfiguration/v1/tests/machineconfigpools.machineconfiguration.openshift.io/PinnedImages.yaml`
around lines 1 - 3, The manifest's resource title still uses the stale label
"name: \"[TechPreview] MachineConfigPool\"" which is misleading after the
feature-gate header was removed; update the name value to remove the
"[TechPreview]" prefix (e.g., "MachineConfigPool") so the manifest title matches
the ungated schema, ensuring the crdName
(machineconfigpools.machineconfiguration.openshift.io) remains unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Outside diff comments:
In
`@machineconfiguration/v1/tests/machineconfigpools.machineconfiguration.openshift.io/PinnedImages.yaml`:
- Around line 1-3: The manifest's resource title still uses the stale label
"name: \"[TechPreview] MachineConfigPool\"" which is misleading after the
feature-gate header was removed; update the name value to remove the
"[TechPreview]" prefix (e.g., "MachineConfigPool") so the manifest title matches
the ungated schema, ensuring the crdName
(machineconfigpools.machineconfiguration.openshift.io) remains unchanged.

In
`@machineconfiguration/v1alpha1/tests/pinnedimagesets.machineconfiguration.openshift.io/PinnedImages.yaml`:
- Around line 1-3: The manifest's metadata "name" field currently contains the
stale prefix "[TechPreview] PinnedImageSet"; remove that prefix so the name
reads "PinnedImageSet" (ensure the entry originally shown as name:
"[TechPreview] PinnedImageSet" is updated) and keep crdName:
pinnedimagesets.machineconfiguration.openshift.io and apiVersion unchanged; this
aligns the title with the manifest's non-gated status and avoids the outdated
TechPreview label.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Central YAML (inherited)

Review profile: CHILL

Plan: Pro

Run ID: 430cef31-8993-428b-b32d-0c33951e607b

📥 Commits

Reviewing files that changed from the base of the PR and between 7e5f270 and 25e4204.

⛔ Files ignored due to path filters (9)
  • machineconfiguration/v1/zz_generated.featuregated-crd-manifests.yaml is excluded by !**/zz_generated*
  • machineconfiguration/v1/zz_generated.featuregated-crd-manifests/machineconfignodes.machineconfiguration.openshift.io/AAA_ungated.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • machineconfiguration/v1/zz_generated.featuregated-crd-manifests/machineconfigpools.machineconfiguration.openshift.io/AAA_ungated.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • machineconfiguration/v1/zz_generated.featuregated-crd-manifests/machineconfigpools.machineconfiguration.openshift.io/OSStreams.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • machineconfiguration/v1/zz_generated.featuregated-crd-manifests/machineconfigpools.machineconfiguration.openshift.io/PinnedImages.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • machineconfiguration/v1/zz_generated.featuregated-crd-manifests/pinnedimagesets.machineconfiguration.openshift.io/AAA_ungated.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • machineconfiguration/v1alpha1/zz_generated.featuregated-crd-manifests.yaml is excluded by !**/zz_generated*
  • machineconfiguration/v1alpha1/zz_generated.featuregated-crd-manifests/machineconfignodes.machineconfiguration.openshift.io/AAA_ungated.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • machineconfiguration/v1alpha1/zz_generated.featuregated-crd-manifests/pinnedimagesets.machineconfiguration.openshift.io/AAA_ungated.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
📒 Files selected for processing (22)
  • features.md
  • features/features.go
  • machineconfiguration/v1/tests/machineconfignodes.machineconfiguration.openshift.io/IrreconcilableMachineConfig.yaml
  • machineconfiguration/v1/tests/machineconfignodes.machineconfiguration.openshift.io/MachineConfigNodes.yaml
  • machineconfiguration/v1/tests/machineconfignodes.machineconfiguration.openshift.io/NoRegistryClusterInstall.yaml
  • machineconfiguration/v1/tests/machineconfigpools.machineconfiguration.openshift.io/PinnedImages.yaml
  • machineconfiguration/v1/tests/pinnedimagesets.machineconfiguration.openshift.io/PinnedImages.yaml
  • machineconfiguration/v1/types.go
  • machineconfiguration/v1/types_machineconfignode.go
  • machineconfiguration/v1/types_pinnedimageset.go
  • machineconfiguration/v1alpha1/tests/machineconfignodes.machineconfiguration.openshift.io/MachineConfigNodes.yaml
  • machineconfiguration/v1alpha1/tests/pinnedimagesets.machineconfiguration.openshift.io/PinnedImages.yaml
  • machineconfiguration/v1alpha1/types_machineconfignode.go
  • machineconfiguration/v1alpha1/types_pinnedimageset.go
  • payload-manifests/featuregates/featureGate-4-10-Hypershift-Default.yaml
  • payload-manifests/featuregates/featureGate-4-10-Hypershift-DevPreviewNoUpgrade.yaml
  • payload-manifests/featuregates/featureGate-4-10-Hypershift-OKD.yaml
  • payload-manifests/featuregates/featureGate-4-10-Hypershift-TechPreviewNoUpgrade.yaml
  • payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-Default.yaml
  • payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-DevPreviewNoUpgrade.yaml
  • payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-OKD.yaml
  • payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-TechPreviewNoUpgrade.yaml
💤 Files with no reviewable changes (17)
  • machineconfiguration/v1alpha1/types_pinnedimageset.go
  • payload-manifests/featuregates/featureGate-4-10-Hypershift-DevPreviewNoUpgrade.yaml
  • payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-DevPreviewNoUpgrade.yaml
  • payload-manifests/featuregates/featureGate-4-10-Hypershift-OKD.yaml
  • payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-OKD.yaml
  • payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-Default.yaml
  • machineconfiguration/v1/types.go
  • machineconfiguration/v1alpha1/tests/machineconfignodes.machineconfiguration.openshift.io/MachineConfigNodes.yaml
  • features.md
  • machineconfiguration/v1alpha1/types_machineconfignode.go
  • payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-TechPreviewNoUpgrade.yaml
  • machineconfiguration/v1/tests/machineconfignodes.machineconfiguration.openshift.io/MachineConfigNodes.yaml
  • machineconfiguration/v1/tests/machineconfignodes.machineconfiguration.openshift.io/IrreconcilableMachineConfig.yaml
  • machineconfiguration/v1/types_machineconfignode.go
  • machineconfiguration/v1/tests/pinnedimagesets.machineconfiguration.openshift.io/PinnedImages.yaml
  • payload-manifests/featuregates/featureGate-4-10-Hypershift-Default.yaml
  • payload-manifests/featuregates/featureGate-4-10-Hypershift-TechPreviewNoUpgrade.yaml
✅ Files skipped from review due to trivial changes (1)
  • machineconfiguration/v1/tests/machineconfignodes.machineconfiguration.openshift.io/NoRegistryClusterInstall.yaml
🚧 Files skipped from review as they are similar to previous changes (1)
  • features/features.go

@isabella-janssen
Copy link
Member Author

/test integration

@qodo-code-review
Copy link

qodo-code-review bot commented Mar 12, 2026

PR-Agent: could not fine a component named integration in a supported language in this PR.

@openshift-ci-robot
Copy link

@isabella-janssen: This pull request references Jira Issue OCPBUGS-74513, which is valid.

3 validation(s) were run on this bug
  • bug is open, matching expected state (open)
  • bug target version (4.22.0) matches configured target version for branch (4.22.0)
  • bug is in the state POST, which is one of the valid states (NEW, ASSIGNED, POST)

Requesting review from QA contact:
/cc @sergiordlr

Details

In response to this:

This removes the MachineConfigNodes and PinnedImages feature gates as well as the v1alpha1 APIs for each, which were replaces with v1 APIs in 4.19 (#2255 & #2198).

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 openshift-eng/jira-lifecycle-plugin repository.

@openshift-ci openshift-ci bot requested a review from sergiordlr March 12, 2026 16:51
@isabella-janssen isabella-janssen changed the title OCPBUGS-74513: OCPBUGS-74519: Remove MachineConfigNodes and PinnedImages feature gates OCPBUGS-74513: OCPBUGS-74519: OCPBUGS-78487: Remove MachineConfigNodes and PinnedImages feature gates and v1alpha1 references Mar 13, 2026
@isabella-janssen
Copy link
Member Author

/jira refresh

@openshift-ci-robot
Copy link

@isabella-janssen: This pull request references Jira Issue OCPBUGS-74513, which is valid.

3 validation(s) were run on this bug
  • bug is open, matching expected state (open)
  • bug target version (4.22.0) matches configured target version for branch (4.22.0)
  • bug is in the state POST, which is one of the valid states (NEW, ASSIGNED, POST)

Requesting review from QA contact:
/cc @sergiordlr

The bug has been updated to refer to the pull request using the external bug tracker.

Details

In response to this:

/jira refresh

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 openshift-eng/jira-lifecycle-plugin repository.

@isabella-janssen isabella-janssen marked this pull request as draft March 13, 2026 17:12
@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 Mar 13, 2026
@isabella-janssen
Copy link
Member Author

/test integration

@isabella-janssen
Copy link
Member Author

/test verify

@isabella-janssen
Copy link
Member Author

/test verify-deps

@openshift-ci
Copy link
Contributor

openshift-ci bot commented Mar 13, 2026

@isabella-janssen: The following test 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/verify 756044c link true /test verify

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.

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

Labels

approved Indicates a PR has been approved by an approver from all required OWNERS files. do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. jira/valid-bug Indicates that a referenced Jira bug is valid for the branch this PR is targeting. jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. size/XXL Denotes a PR that changes 1000+ lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants