Skip to content

OCPCLOUD-3359,OCPCLOUD-3345: Add support for TLS envsubst substitution - #519

Merged
openshift-merge-bot[bot] merged 12 commits into
openshift:mainfrom
openshift-cloud-team:manifest-substitutions
Apr 23, 2026
Merged

OCPCLOUD-3359,OCPCLOUD-3345: Add support for TLS envsubst substitution#519
openshift-merge-bot[bot] merged 12 commits into
openshift:mainfrom
openshift-cloud-team:manifest-substitutions

Conversation

@mdbooth

@mdbooth mdbooth commented Apr 10, 2026

Copy link
Copy Markdown
Contributor

Depends on openshift/api#2786

  • DNM: temporary o/api o/client-go overrides
  • make vendor
  • Set observedRevisionGeneration when writing revisions
  • working
  • Bump library-go
  • make vendor
  • update
  • lints

Summary by CodeRabbit

  • New Features

    • TLS-derived substitutions applied to installer revisions.
    • Automatic TLS profile detection with a watcher that triggers operator restart on profile changes.
    • New metrics Services, TLS secret mounts, and RBAC bindings to expose and secure operator metrics.
  • Improvements

    • Structured logging and more consistent, failure-propagating startup behavior.
    • Dependency updates across modules for compatibility.
  • Tests

    • New unit and e2e TLS negotiation tests covering multiple TLS profiles and handshake behaviors.
  • Bug Fixes

    • Adjusted health probe port in a deployment manifest.

@openshift-merge-bot

Copy link
Copy Markdown
Contributor

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 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 10, 2026
@openshift-ci

openshift-ci Bot commented Apr 10, 2026

Copy link
Copy Markdown
Contributor

Skipping CI for Draft Pull Request.
If you want CI signal for your change, please convert it to an actual PR.
You can still manually trigger a test run with /test all

@openshift-ci openshift-ci Bot added the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Apr 10, 2026
@coderabbitai

coderabbitai Bot commented Apr 10, 2026

Copy link
Copy Markdown

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

Replace the prior CommonOptions flow with InitOperatorConfig across CLIs; add TLS profile resolution and a SecurityProfileWatcher; return structured logger/operatorConfig and an initManager closure; propagate TLS-derived manifest substitutions into revision rendering; add TLS-focused unit and e2e tests and related manifest/RBAC changes.

Changes

Cohort / File(s) Summary
CLI mains
cmd/capi-controllers/main.go, cmd/capi-operator/main.go, cmd/crd-compatibility-checker/main.go, cmd/machine-api-migration/main.go
Switch from InitCommonOptions(...).Parse() to InitOperatorConfig(...); obtain logr.Logger, OperatorConfig, mgrOpts, and initManager closure; use context.WithCancel; delegate manager creation to initManager; change setup helpers to return errors instead of exiting.
Common options library & TLS
pkg/commoncmdoptions/commonoptions.go, pkg/commoncmdoptions/tls.go, pkg/commoncmdoptions/commonoptions_test.go, pkg/commoncmdoptions/helpers_test.go
Replace CommonOptions with OperatorConfig; add InitOperatorConfig that returns logger/operatorConfig/ctrl.Options/initManager; implement resolveTLSProfile and SecurityProfileWatcher wiring; move health/readiness registration into initManager; add subprocess-based tests and helpers.
Revision controller & tests
pkg/controllers/revision/revision_controller.go, pkg/controllers/revision/revision_controller_test.go, pkg/controllers/revision/helpers_test.go
Extend RevisionController.SetupWithManager to accept configv1.TLSProfileSpec; derive manifestSubstitutions (TLS_MIN_VERSION, TLS_CIPHER_SUITES) and inject into rendered revisions; update tests to assert manifest substitutions and observed-generation behavior.
Revision generator & transform
pkg/revisiongenerator/revision.go, pkg/revisiongenerator/revision_test.go, pkg/revisiongenerator/transform.go, pkg/revisiongenerator/transform_test.go
Add WithManifestSubstitutions option; thread substitutions through rendering and transformYaml; include substitutions into ContentID calculation; adjust API component shape for installer components; update tests accordingly.
Installer controller tests & helpers
pkg/controllers/installer/installer_controller_test.go, pkg/controllers/installer/helpers_test.go
Test fixtures updated to use ClusterAPIInstallerComponentSource{Type,Image}; add latestRevision helper and adjust revision-indexing logic and related-objects trimming test behavior.
E2E tests & framework
e2e/tls_test.go, e2e/e2e_common.go, e2e/framework/framework.go
Add TLS-focused e2e suite validating operator endpoint TLS negotiation across APIServer profiles; persist rest.Config in package var; add new namespace constants and kWithCtx helper.
Go modules / deps
go.mod, e2e/go.mod, manifests-gen/go.mod
Bump OpenShift/Kubernetes dependencies and add github.com/openshift/controller-runtime-common; update e2e module, add local manifests-gen replace and various indirect dependency changes.
Manifests & RBAC
manifests/... (multiple files, e.g., ..._role.yaml, ..._rbac_bindings.yaml, ..._metrics-service.yaml, ..._deployment.yaml)
Add ClusterRole to read config.openshift.io/apiservers TLS config and ClusterRoleBindings for service accounts; add metrics Services and mount TLS secret metrics-cert volumes into deployments; adjust compatibility-checker health port.
Misc tests & envtest
pkg/commoncmdoptions/helpers_test.go, pkg/commoncmdoptions/commonoptions_test.go, pkg/test/envtest.go
Add test helpers for subprocess re-exec, kubeconfig writing, env var filtering; extend envtest CRD set to include APIServer CRD; add comprehensive InitOperatorConfig/TLS resolution tests.

Sequence Diagram(s)

sequenceDiagram
    actor CLI as CLI
    participant Init as InitOperatorConfig
    participant API as configv1.APIServer
    participant TLSWatcher as SecurityProfileWatcher
    participant InitMgr as initManager
    participant Manager as ctrl.Manager
    participant Revision as RevisionController

    CLI->>Init: InitOperatorConfig(ctx,cfg,scheme,managerName,..)
    Init->>API: GET Apiserver (resolveTLSProfile)
    API-->>Init: return TLSSecurityProfile & adherence
    Init->>TLSWatcher: create SecurityProfileWatcher (with cancel callback)
    Init-->>CLI: return logger, operatorConfig, mgrOpts, initManager

    CLI->>InitMgr: initManager(ctx,cancel,mgrOpts)
    InitMgr-->>Manager: create ctrl.Manager (with health/readiness)

    CLI->>Revision: SetupWithManager(mgr, tlsProfileSpec)
    Revision->>Revision: derive manifestSubstitutions (TLS_MIN_VERSION, TLS_CIPHER_SUITES)
    Revision-->>Manager: register controller

    TLSWatcher->>API: watch for profile changes
    API-->>TLSWatcher: profile changed
    TLSWatcher->>InitMgr: invoke cancel() to trigger manager restart
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

🚥 Pre-merge checks | ✅ 6 | ❌ 4

❌ Failed checks (3 warnings, 1 inconclusive)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 45.31% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Microshift Test Compatibility ⚠️ Warning The new tls_test.go uses configv1.APIServer and configv1.FeatureGate APIs that are not available on MicroShift, with no compatibility protections like [apigroup:config.openshift.io] tags or runtime checks. Add [apigroup:config.openshift.io] tags to test declarations or implement exutil.IsMicroShiftCluster() runtime skip checks to ensure MicroShift compatibility.
Topology-Aware Scheduling Compatibility ⚠️ Warning All three deployments use nodeSelector targeting control-plane nodes, breaking topology compatibility on HyperShift where no control-plane nodes exist in hosted clusters. Remove nodeSelector constraints and rely on tolerations alone, or implement runtime topology detection to conditionally apply scheduling constraints based on topology type.
Ipv6 And Disconnected Network Test Compatibility ❓ Inconclusive The e2e/tls_test.go file could not be located in the current repository state despite multiple search attempts across various git states and the filesystem. Ensure the test file is committed or staged, then provide the actual e2e/tls_test.go content for assessment of IPv4 assumptions and external connectivity requirements.
✅ Passed checks (6 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main changes: adding TLS envsubst substitution support with reference to specific Jira issues.
Stable And Deterministic Test Names ✅ Passed All Ginkgo test names in the pull request are stable and deterministic. While e2e TLS tests use fmt.Sprintf(), all input data is static with no dynamic values like timestamps, UUIDs, or random suffixes that would change between test runs.
Test Structure And Quality ✅ Passed Test code demonstrates strong quality with context-based timeouts, comprehensive assertions, event-driven operations, proper Ginkgo patterns, and subprocess management with cleanup.
Single Node Openshift (Sno) Test Compatibility ✅ Passed The new TLS e2e test in e2e/tls_test.go is compatible with Single Node OpenShift. It finds individual pods by label selector and tests their TLS endpoints through port-forwarding, which operates independently of cluster topology and does not assume multiple nodes or cross-node communication.
Ote Binary Stdout Contract ✅ Passed The pull request complies with the OTE Binary Stdout Contract. All logging in process-level code is properly configured to write to stderr.

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

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

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

@mdbooth
mdbooth force-pushed the manifest-substitutions branch from 73a41c8 to d2ebb8e Compare April 10, 2026 08:22
@openshift-ci openshift-ci Bot removed the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Apr 10, 2026
@mdbooth
mdbooth force-pushed the manifest-substitutions branch from d2ebb8e to fb116ac Compare April 10, 2026 16:38
@mdbooth

mdbooth commented Apr 14, 2026

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Apr 14, 2026

Copy link
Copy Markdown
✅ 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.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 6

🧹 Nitpick comments (1)
pkg/controllers/revision/revision_controller_test.go (1)

524-529: Prefer order-independent assertions for manifest substitutions.

These assertions depend on slice position. Making this key-based will reduce brittleness if serialization order changes.

Proposed refactor
 rev := updatedClusterAPI.Status.Revisions[0]
 Expect(rev.ManifestSubstitutions).To(HaveLen(2))
-Expect(rev.ManifestSubstitutions[0].Key).To(Equal("TLS_CIPHER_SUITES"))
-Expect(*rev.ManifestSubstitutions[0].Value).To(Equal("TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"))
-Expect(rev.ManifestSubstitutions[1].Key).To(Equal("TLS_MIN_VERSION"))
-Expect(*rev.ManifestSubstitutions[1].Value).To(Equal("VersionTLS12"))
+subs := map[string]string{}
+for _, s := range rev.ManifestSubstitutions {
+	if s.Value != nil {
+		subs[s.Key] = *s.Value
+	}
+}
+Expect(subs).To(HaveKeyWithValue("TLS_CIPHER_SUITES", "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"))
+Expect(subs).To(HaveKeyWithValue("TLS_MIN_VERSION", "VersionTLS12"))
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@pkg/controllers/revision/revision_controller_test.go` around lines 524 - 529,
The test is brittle because it asserts ManifestSubstitutions by index; update
the checks to be order-independent by locating substitutions by Key instead of
slice position: iterate rev.ManifestSubstitutions (or convert it to a map keyed
by Key) and assert that entries for "TLS_CIPHER_SUITES" and "TLS_MIN_VERSION"
exist and their Value pointers dereference to
"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256" and "VersionTLS12" respectively;
reference the rev variable and its ManifestSubstitutions field when making these
key-based assertions.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@cmd/crd-compatibility-checker/main.go`:
- Around line 74-84: Register the OpenShift configv1 types into the controller
runtime scheme before calling InitOperatorConfig: call the configv1 scheme
registration (e.g., configv1.AddToScheme) on the same scheme variable used in
this file so that InitOperatorConfig can resolve configv1.APIServer without
unregistered-kind errors; ensure this registration happens prior to invoking
commoncmdoptions.InitOperatorConfig(ctx, log, cfg, scheme, managerName,
defaultManagerNamespace).

In `@pkg/commoncmdoptions/commonoptions.go`:
- Around line 107-115: The code currently calls pflag.Parse() on the global
pflag.CommandLine (which uses ExitOnError). Replace use of the global
CommandLine with a new flag set created via pflag.NewFlagSet("operator",
pflag.ContinueOnError), register flags with that FlagSet (use
capiflags.AddManagerOptions, textLoggerConfig.AddFlags, and
options.BindLeaderElectionFlags against the new FlagSet instead of
pflag.CommandLine), call fs.Parse(os.Args[1:]) and return or propagate any parse
error from InitOperatorConfig so callers can handle failures instead of os.Exit
being invoked. Ensure all references to pflag.Parse() and pflag.CommandLine in
this init path are switched to the new FlagSet (fs) and that parsing errors are
returned to the caller.

In `@pkg/controllers/revision/helpers_test.go`:
- Around line 53-56: The test currently creates a zero-valued tlsProfile from
tlsProfiles and always forwards it into the controller setup; instead, make
tlsProfile a pointer (e.g., tlsProfilePtr *configv1.TLSProfileSpec), set
tlsProfilePtr = &tlsProfiles[0] only when len(tlsProfiles) > 0, and pass
tlsProfilePtr into the controller setup call rather than the zero-value
tlsProfile so no implicit defaults are forwarded; update any function signatures
or call sites in this test helper that expect a non-pointer accordingly.

In `@pkg/controllers/revision/revision_controller_test.go`:
- Around line 506-508: The deferred cleanup unconditionally calls mgr.stop()
which may nil-deref if manager creation failed; modify the test to guard the
cleanup by either registering the DeferCleanup (or defer) only after assigning
mgr or by checking if mgr != nil before calling mgr.stop() in the cleanup
function (referencing the mgr variable and its stop method used in the existing
DeferCleanup block).

In `@pkg/revisiongenerator/revision.go`:
- Around line 258-263: In ToAPIRevision(), avoid returning r.substitutions by
reference: create and assign a copy of r.substitutions to the
ManifestSubstitutions field on the returned
operatorv1alpha1.ClusterAPIInstallerRevision so callers cannot mutate the cached
revision; locate ToAPIRevision(), r.substitutions and the return constructing
ClusterAPIInstallerRevision and perform a deep/appropriate copy (e.g., new
slice/map and copy elements) before setting ManifestSubstitutions.
- Around line 173-184: The loop over r.substitutions that calls h.Write on raw
s.Key and *s.Value can produce ambiguous byte streams; instead canonicalize each
substitution before hashing (e.g., write a clear frame per entry by prefixing
lengths or by marshaling a deterministic representation such as JSON for the
pair) so keys/values cannot concatenate into the same bytes (update the loop
that references r.substitutions and the calls to h.Write to write
framed/length-prefixed key and value entries, handling nil s.Value explicitly);
ensure this deterministic encoding is what feeds the ContentID hash.

---

Nitpick comments:
In `@pkg/controllers/revision/revision_controller_test.go`:
- Around line 524-529: The test is brittle because it asserts
ManifestSubstitutions by index; update the checks to be order-independent by
locating substitutions by Key instead of slice position: iterate
rev.ManifestSubstitutions (or convert it to a map keyed by Key) and assert that
entries for "TLS_CIPHER_SUITES" and "TLS_MIN_VERSION" exist and their Value
pointers dereference to "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256" and
"VersionTLS12" respectively; reference the rev variable and its
ManifestSubstitutions field when making these key-based assertions.
🪄 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 YAML (base), Central YAML (inherited)

Review profile: CHILL

Plan: Pro Plus

Run ID: 83f75de7-4016-42fd-be3c-b9df0a745ab5

📥 Commits

Reviewing files that changed from the base of the PR and between 50ba4c2 and 8f693f8.

⛔ Files ignored due to path filters (169)
  • e2e/go.sum is excluded by !**/*.sum
  • go.sum is excluded by !**/*.sum
  • go.work is excluded by !**/*.work
  • manifests-gen/go.sum is excluded by !**/*.sum
  • vendor/github.com/openshift/api/config/v1/types.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/types_apiserver.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/types_authentication.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/types_cluster_version.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/types_dns.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/types_infrastructure.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_00_cluster-version-operator_01_clusterversions-CustomNoUpgrade.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_00_cluster-version-operator_01_clusterversions-DevPreviewNoUpgrade.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_apiservers-CustomNoUpgrade.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_apiservers-DevPreviewNoUpgrade.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_apiservers-TechPreviewNoUpgrade.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_authentications-CustomNoUpgrade.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_authentications-Default.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_authentications-DevPreviewNoUpgrade.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_authentications-OKD.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_authentications-TechPreviewNoUpgrade.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_dnses-CustomNoUpgrade.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_dnses-Default.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_dnses-DevPreviewNoUpgrade.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_dnses-OKD.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_dnses-TechPreviewNoUpgrade.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_infrastructures-CustomNoUpgrade.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_infrastructures-Default.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_infrastructures-DevPreviewNoUpgrade.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_infrastructures-OKD.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_infrastructures-TechPreviewNoUpgrade.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.deepcopy.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/config/v1/zz_generated.featuregated-crd-manifests.yaml is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/config/v1/zz_generated.swagger_doc_generated.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/config/v1alpha1/register.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1alpha1/types_cluster_image_policy.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1alpha1/types_cluster_monitoring.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1alpha1/types_image_policy.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1alpha1/zz_generated.deepcopy.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/config/v1alpha1/zz_generated.featuregated-crd-manifests.yaml is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/config/v1alpha1/zz_generated.swagger_doc_generated.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/envtest-releases.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/features.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/features/features.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/features/legacyfeaturegates.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/openapi/generated_openapi/zz_generated.openapi.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/operator/v1/types_csi_cluster_driver.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/types_ingress.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/types_machineconfiguration.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/types_network.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_50_csi-driver_01_clustercsidrivers-CustomNoUpgrade.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_50_csi-driver_01_clustercsidrivers-Default.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_50_csi-driver_01_clustercsidrivers-DevPreviewNoUpgrade.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_50_csi-driver_01_clustercsidrivers-OKD.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_50_csi-driver_01_clustercsidrivers-TechPreviewNoUpgrade.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_50_ingress_00_ingresscontrollers-CustomNoUpgrade.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_50_ingress_00_ingresscontrollers-Default.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_50_ingress_00_ingresscontrollers-DevPreviewNoUpgrade.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_50_ingress_00_ingresscontrollers-OKD.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_50_ingress_00_ingresscontrollers-TechPreviewNoUpgrade.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_70_network_01_networks-CustomNoUpgrade.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_70_network_01_networks-Default.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_70_network_01_networks-DevPreviewNoUpgrade.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_70_network_01_networks-OKD.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_70_network_01_networks-TechPreviewNoUpgrade.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_80_machine-config_01_machineconfigurations-Default.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_80_machine-config_01_machineconfigurations-OKD.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.deepcopy.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/operator/v1/zz_generated.featuregated-crd-manifests.yaml is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/operator/v1/zz_generated.swagger_doc_generated.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/operator/v1alpha1/types_clusterapi.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1alpha1/zz_generated.crd-manifests/0000_30_cluster-api_01_clusterapis.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1alpha1/zz_generated.deepcopy.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/operator/v1alpha1/zz_generated.swagger_doc_generated.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/client-go/apiextensions/applyconfigurations/internal/internal.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/apiserverspec.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/awsdnsspec.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/infrastructurestatus.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/prefixedclaimmapping.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/update.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/usernameclaimmapping.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/additionalalertmanagerconfig.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/alertmanagercustomconfig.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/authorizationconfig.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/basicauth.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/clusterimagepolicy.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/clusterimagepolicyspec.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/clusterimagepolicystatus.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/clustermonitoringspec.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/containerresource.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/dropequalactionconfig.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/hashmodactionconfig.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/imagepolicy.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/imagepolicyfulciocawithrekorrootoftrust.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/imagepolicypkirootoftrust.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/imagepolicypublickeyrootoftrust.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/imagepolicyspec.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/imagepolicystatus.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/imagesigstoreverificationpolicy.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/keepequalactionconfig.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/label.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/labelmapactionconfig.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/lowercaseactionconfig.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/metadataconfig.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/metadataconfigcustom.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/metricsserverconfig.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/oauth2.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/oauth2endpointparam.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/openshiftstatemetricsconfig.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/pkicertificatesubject.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/policyfulciosubject.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/policyidentity.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/policymatchexactrepository.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/policymatchremapidentity.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/policyrootoftrust.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/prometheusconfig.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/prometheusoperatoradmissionwebhookconfig.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/prometheusoperatorconfig.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/prometheusremotewriteheader.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/queueconfig.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/relabelactionconfig.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/relabelconfig.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/remotewriteauthorization.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/remotewritespec.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/replaceactionconfig.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/retention.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/secretkeyselector.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/sigv4.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/telemeterclientconfig.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/tlsconfig.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/uppercaseactionconfig.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/internal/internal.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1alpha1/clusterimagepolicy.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1alpha1/config_client.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1alpha1/generated_expansion.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1alpha1/imagepolicy.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/informers/externalversions/config/v1alpha1/clusterimagepolicy.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/informers/externalversions/config/v1alpha1/imagepolicy.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/informers/externalversions/config/v1alpha1/interface.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/informers/externalversions/generic.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/listers/config/v1alpha1/clusterimagepolicy.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/listers/config/v1alpha1/expansion_generated.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/listers/config/v1alpha1/imagepolicy.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/machine/applyconfigurations/internal/internal.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/applyconfigurations/internal/internal.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/applyconfigurations/operator/v1/awscsidriverconfigspec.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/applyconfigurations/operator/v1/bgpmanagedconfig.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/applyconfigurations/operator/v1/ingresscontrollertuningoptions.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/applyconfigurations/operator/v1/nooverlayconfig.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/applyconfigurations/operator/v1/ovnkubernetesconfig.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/applyconfigurations/operator/v1alpha1/clusterapiinstallercomponent.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/applyconfigurations/operator/v1alpha1/clusterapiinstallerrevision.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/applyconfigurations/operator/v1alpha1/clusterapiinstallerrevisionmanifestsubstitution.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/applyconfigurations/operator/v1alpha1/clusterapistatus.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/controller-runtime-common/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/controller-runtime-common/pkg/tls/controller.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/controller-runtime-common/pkg/tls/tls.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/library-go/pkg/crypto/cert_config.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/library-go/pkg/crypto/keygen.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/library-go/pkg/crypto/options.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/library-go/pkg/crypto/tls_adherence.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/library-go/pkg/operator/certrotation/client_cert_rotation_controller.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/library-go/pkg/operator/certrotation/signer.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/library-go/pkg/operator/certrotation/target.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/library-go/pkg/operator/v1helpers/helpers.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/library-go/pkg/pki/profile.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/library-go/pkg/pki/provider.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/library-go/pkg/pki/resolve.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/library-go/pkg/pki/types.go is excluded by !**/vendor/**, !vendor/**
  • vendor/modules.txt is excluded by !**/vendor/**, !vendor/**
📒 Files selected for processing (18)
  • cmd/capi-controllers/main.go
  • cmd/capi-operator/main.go
  • cmd/crd-compatibility-checker/main.go
  • cmd/machine-api-migration/main.go
  • e2e/go.mod
  • go.mod
  • manifests-gen/go.mod
  • pkg/commoncmdoptions/commonoptions.go
  • pkg/commoncmdoptions/commonoptions_test.go
  • pkg/commoncmdoptions/helpers_test.go
  • pkg/commoncmdoptions/tls.go
  • pkg/controllers/revision/helpers_test.go
  • pkg/controllers/revision/revision_controller.go
  • pkg/controllers/revision/revision_controller_test.go
  • pkg/revisiongenerator/revision.go
  • pkg/revisiongenerator/revision_test.go
  • pkg/revisiongenerator/transform.go
  • pkg/revisiongenerator/transform_test.go

Comment thread cmd/crd-compatibility-checker/main.go Outdated
Comment thread pkg/commoncmdoptions/commonoptions.go Outdated
Comment thread pkg/controllers/revision/helpers_test.go Outdated
Comment thread pkg/controllers/revision/revision_controller_test.go
Comment thread pkg/revisiongenerator/revision.go
Comment thread pkg/revisiongenerator/revision.go
@theobarberbany

Copy link
Copy Markdown
Contributor

/test e2e-aws-capi-techpreview

checking if it's an outage - ignore matt :)

@mdbooth
mdbooth force-pushed the manifest-substitutions branch from 8f693f8 to 18ff2af Compare April 14, 2026 13:51

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 3

♻️ Duplicate comments (2)
pkg/revisiongenerator/revision.go (2)

255-265: ⚠️ Potential issue | 🟠 Major

Deep-copy ManifestSubstitutions before returning.

ToAPIRevision() still exposes r.substitutions directly. Mutating the returned API object mutates the cached revision without invalidating r.contentID, so later calls can report a stale identity.

Suggested fix
 	contentID, err := r.ContentID()
 	if err != nil {
 		return operatorv1alpha1.ClusterAPIInstallerRevision{}, fmt.Errorf("error calculating contentID: %w", err)
 	}
+
+	apiSubstitutions := make([]operatorv1alpha1.ClusterAPIInstallerRevisionManifestSubstitution, len(r.substitutions))
+	for i, s := range r.substitutions {
+		apiSubstitutions[i] = s
+		if s.Value != nil {
+			v := *s.Value
+			apiSubstitutions[i].Value = &v
+		}
+	}
 
 	return operatorv1alpha1.ClusterAPIInstallerRevision{
 		Name:                  r.revisionName,
 		Revision:              r.revisionIndex,
 		ContentID:             contentID,
-		ManifestSubstitutions: r.substitutions,
+		ManifestSubstitutions: apiSubstitutions,
 		Components:            apiComponents,
 	}, nil
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@pkg/revisiongenerator/revision.go` around lines 255 - 265, To avoid exposing
the internal r.substitutions and preventing external mutation from invalidating
r.contentID, deep-copy r.substitutions before assigning it to the returned
ClusterAPIInstallerRevision.ManifestSubstitutions in ToAPIRevision (the code
that builds the operatorv1alpha1.ClusterAPIInstallerRevision using
r.revisionName, r.revisionIndex and contentID). Create a new copy (allocate a
new slice/map and copy elements) and assign that copy to ManifestSubstitutions
instead of r.substitutions so callers cannot mutate the cached revision state.

173-184: ⚠️ Potential issue | 🔴 Critical

Frame substitution entries before hashing.

This still concatenates raw keys and values, so distinct substitution sets can alias the same ContentID ({"A":"BC"} vs {"AB":"C"}), which breaks revision identity.

Suggested fix
-		for _, s := range r.substitutions {
-			h.Write([]byte(s.Key))
-
-			if s.Value != nil {
-				h.Write([]byte(*s.Value))
-			}
-		}
+		data, err := json.Marshal(r.substitutions)
+		if err != nil {
+			return "", fmt.Errorf("error marshalling substitutions: %w", err)
+		}
+		h.Write(data)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@pkg/revisiongenerator/revision.go` around lines 173 - 184, The loop that
writes substitution entries into the hasher (r.substitutions -> h.Write using
s.Key and s.Value) must frame each field so different key/value boundaries
cannot concatenate into the same byte stream (e.g. {"A":"BC"} vs {"AB":"C"}).
Fix by producing a deterministic encoding for each entry before hashing: sort
r.substitutions by s.Key if ordering isn’t guaranteed, then write a
length-prefixed or delimiter-framed representation for s.Key and for s.Value
(and explicitly encode nil vs empty string) into h instead of raw concatenation
so boundaries are unambiguous when computing the ContentID.
🧹 Nitpick comments (5)
e2e/e2e_common.go (1)

61-61: Use rest.CopyConfig() to avoid sharing mutable pointer references.

The assignment at line 95 directly aliases the pointer from cfg, which is problematic since e2e/tls_test.go reads this global during port-forward operations. Copying the config prevents accidental shared-state mutations across tests:

-	restConfig = cfg
+	restConfig = rest.CopyConfig(cfg)

Also applies to: 95-95

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

In `@e2e/e2e_common.go` at line 61, The global restConfig field is being assigned
the original cfg pointer, causing shared-mutable state; instead use
rest.CopyConfig to clone cfg before storing it (replace the direct assignment to
restConfig with rest.CopyConfig(cfg) and handle the error if any), so locate the
assignment that sets restConfig from cfg and change it to use
rest.CopyConfig(cfg) to avoid pointer aliasing during tests like
e2e/tls_test.go.
cmd/machine-api-migration/main.go (1)

29-29: Inconsistent logging: klog still used in getFeatureGates.

The refactor replaces klog with structured logr.Logger logging throughout, but getFeatureGates still uses klog.Infof at line 240. Consider passing the logr.Logger to getFeatureGates for consistency.

♻️ Suggested fix

Update the function signature and replace klog:

-func getFeatureGates(ctx context.Context, mgr ctrl.Manager) (featuregates.FeatureGateAccess, error) {
+func getFeatureGates(ctx context.Context, log logr.Logger, mgr ctrl.Manager) (featuregates.FeatureGateAccess, error) {
 	select {
 	case <-featureGateAccessor.InitialFeatureGatesObserved():
 		featureGates, _ := featureGateAccessor.CurrentFeatureGates()
-		klog.Infof("FeatureGates initialized: %v", featureGates.KnownFeatures())
+		log.Info("FeatureGates initialized", "knownFeatures", featureGates.KnownFeatures())
 	case <-time.After(1 * time.Minute):

Then update the call site and remove the "k8s.io/klog" import.

Also applies to: 238-240

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

In `@cmd/machine-api-migration/main.go` at line 29, getFeatureGates currently uses
klog.Infof while the codebase was refactored to use structured logr.Logger;
update getFeatureGates to accept a logr.Logger parameter (e.g., add logger
logr.Logger to its signature), replace the klog.Infof call(s) inside
getFeatureGates with logger.Info invocations, update all call sites that invoke
getFeatureGates to pass the existing logr.Logger instance, and remove the
now-unused "k8s.io/klog" import from the file.
pkg/commoncmdoptions/helpers_test.go (1)

62-69: Consider using strings.HasPrefix for clarity.

The manual prefix check works but strings.HasPrefix(e, k+"=") would be more idiomatic and readable.

♻️ Suggested improvement
 	for _, e := range env {
 		for k := range keepSet {
-			if len(e) > len(k) && e[:len(k)+1] == k+"=" {
+			if strings.HasPrefix(e, k+"=") {
 				filtered = append(filtered, e)
 				break
 			}
 		}
 	}

Note: This would require adding "strings" to the imports.

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

In `@pkg/commoncmdoptions/helpers_test.go` around lines 62 - 69, Replace the
manual prefix check inside the loop that builds filtered (the code iterating
over env and keepSet) with strings.HasPrefix(e, k+"=") for clarity and idiomatic
style; update the import list to include "strings" and change the conditional
from len(e) > len(k) && e[:len(k)+1] == k+"=" to strings.HasPrefix(e, k+"=").
Ensure behavior is unchanged (keepSet, env, filtered variables remain the same).
pkg/commoncmdoptions/commonoptions_test.go (1)

284-301: Test uses deprecated TLS 1.1 to verify CLI override—intentional but worth documenting.

The test case at line 286 uses --tls-min-version=VersionTLS11 which is a deprecated TLS version. This appears intentional to verify that CLI flags can override cluster defaults, but a brief comment explaining this choice would improve clarity.

📝 Suggested documentation
 		{
-			name:  "TLS flags overridden by CLI",
+			name:  "TLS flags overridden by CLI",
+			// Uses TLS 1.1 intentionally to verify CLI override takes precedence
+			// over cluster profile (which defaults to TLS 1.2).
 			flags: []string{"--tls-min-version=VersionTLS11", "--tls-cipher-suites=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"},
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@pkg/commoncmdoptions/commonoptions_test.go` around lines 284 - 301, Add a
brief inline comment in the test case named "TLS flags overridden by CLI"
(inside the verify closure in commonoptions_test.go) explaining that the flag
"--tls-min-version=VersionTLS11" is intentionally using deprecated TLS 1.1
solely to verify that CLI flags override cluster defaults; place the comment
near the flags slice or the assert that checks ManagerTLSMinVersion so future
readers understand this is deliberate and not an oversight.
pkg/commoncmdoptions/commonoptions.go (1)

134-140: Potential panic from OrDie functions if cluster TLS profile is malformed.

TLSVersionOrDie and TLSVersionToNameOrDie will panic if the cluster's MinTLSVersion contains an unexpected value. While cluster configuration should be valid, consider whether graceful error handling would be more appropriate here, especially since the function signature supports returning errors.

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

In `@pkg/commoncmdoptions/commonoptions.go` around lines 134 - 140, The current
code calls libgocrypto.TLSVersionOrDie and TLSVersionToNameOrDie which can panic
on malformed cluster TLS values; change to the non-panicking equivalents (the
functions that return (value, error)) and handle errors when computing
capiManagerOptions.TLSMinVersion and capiManagerOptions.TLSCipherSuites: check
pflag.CommandLine.Changed("tls-min-version") and "tls-cipher-suites" as before,
call the safe TLSVersion and TLSVersionToName functions on
clusterTLSProfileSpec.MinTLSVersion and handle/return/log any error instead of
letting it panic, and likewise use a non-panicking OpenSSLToIANACipherSuites (or
validate clusterTLSProfileSpec.Ciphers) and handle errors before assigning
capiManagerOptions.TLSCipherSuites so the process can fail gracefully.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@e2e/tls_test.go`:
- Around line 263-280: The reject-case can incorrectly pass during rollout
because any connection error from tryTLSConnect(...) is treated as a successful
rejection; modify the test around the Eventually block using findRunningPodName,
portForwardToPod and tryTLSConnect so that when shouldSucceed==false you first
verify the server is actually accepting TLS handshakes with a known-good version
(e.g., perform a successful handshake with a safe TLS version or retry until
handshake succeeds) and only then assert that a connection using the tested
tlsVersion fails, or alternatively narrow the failure check to only treat
protocol-version handshake failures from tryTLSConnect as acceptable rejections
rather than any connection/port-forward error.
- Around line 133-143: The cleanup currently only calls setTLSConfig inside
DeferCleanup (restoring apiServer.Spec.TLSAdherence / TLSSecurityProfile) but
does not wait for the cluster-wide rollback to finish, which can let later tests
start while endpoints are mid-restart; update the DeferCleanup to apply the
restore via setTLSConfig and then block until the APIServer rollout/restore is
observed (e.g., poll the APIServer resource status or kube-apiserver pods with
an Eventually-style wait) ensuring the restored TLSAdherence and
TLSSecurityProfile are reflected and kube-apiserver pods are Ready before
returning so subsequent specs run against the fully-rolled-back cluster.
- Line 115: The test suite is accidentally focused: replace the use of FDescribe
in the TLS Security Profile suite with a normal Describe so the full e2e test
suite runs; locate the FDescribe("TLS Security Profile", Ordered, func() {
declaration and change it to Describe("TLS Security Profile", Ordered, func() {
before merging.

---

Duplicate comments:
In `@pkg/revisiongenerator/revision.go`:
- Around line 255-265: To avoid exposing the internal r.substitutions and
preventing external mutation from invalidating r.contentID, deep-copy
r.substitutions before assigning it to the returned
ClusterAPIInstallerRevision.ManifestSubstitutions in ToAPIRevision (the code
that builds the operatorv1alpha1.ClusterAPIInstallerRevision using
r.revisionName, r.revisionIndex and contentID). Create a new copy (allocate a
new slice/map and copy elements) and assign that copy to ManifestSubstitutions
instead of r.substitutions so callers cannot mutate the cached revision state.
- Around line 173-184: The loop that writes substitution entries into the hasher
(r.substitutions -> h.Write using s.Key and s.Value) must frame each field so
different key/value boundaries cannot concatenate into the same byte stream
(e.g. {"A":"BC"} vs {"AB":"C"}). Fix by producing a deterministic encoding for
each entry before hashing: sort r.substitutions by s.Key if ordering isn’t
guaranteed, then write a length-prefixed or delimiter-framed representation for
s.Key and for s.Value (and explicitly encode nil vs empty string) into h instead
of raw concatenation so boundaries are unambiguous when computing the ContentID.

---

Nitpick comments:
In `@cmd/machine-api-migration/main.go`:
- Line 29: getFeatureGates currently uses klog.Infof while the codebase was
refactored to use structured logr.Logger; update getFeatureGates to accept a
logr.Logger parameter (e.g., add logger logr.Logger to its signature), replace
the klog.Infof call(s) inside getFeatureGates with logger.Info invocations,
update all call sites that invoke getFeatureGates to pass the existing
logr.Logger instance, and remove the now-unused "k8s.io/klog" import from the
file.

In `@e2e/e2e_common.go`:
- Line 61: The global restConfig field is being assigned the original cfg
pointer, causing shared-mutable state; instead use rest.CopyConfig to clone cfg
before storing it (replace the direct assignment to restConfig with
rest.CopyConfig(cfg) and handle the error if any), so locate the assignment that
sets restConfig from cfg and change it to use rest.CopyConfig(cfg) to avoid
pointer aliasing during tests like e2e/tls_test.go.

In `@pkg/commoncmdoptions/commonoptions_test.go`:
- Around line 284-301: Add a brief inline comment in the test case named "TLS
flags overridden by CLI" (inside the verify closure in commonoptions_test.go)
explaining that the flag "--tls-min-version=VersionTLS11" is intentionally using
deprecated TLS 1.1 solely to verify that CLI flags override cluster defaults;
place the comment near the flags slice or the assert that checks
ManagerTLSMinVersion so future readers understand this is deliberate and not an
oversight.

In `@pkg/commoncmdoptions/commonoptions.go`:
- Around line 134-140: The current code calls libgocrypto.TLSVersionOrDie and
TLSVersionToNameOrDie which can panic on malformed cluster TLS values; change to
the non-panicking equivalents (the functions that return (value, error)) and
handle errors when computing capiManagerOptions.TLSMinVersion and
capiManagerOptions.TLSCipherSuites: check
pflag.CommandLine.Changed("tls-min-version") and "tls-cipher-suites" as before,
call the safe TLSVersion and TLSVersionToName functions on
clusterTLSProfileSpec.MinTLSVersion and handle/return/log any error instead of
letting it panic, and likewise use a non-panicking OpenSSLToIANACipherSuites (or
validate clusterTLSProfileSpec.Ciphers) and handle errors before assigning
capiManagerOptions.TLSCipherSuites so the process can fail gracefully.

In `@pkg/commoncmdoptions/helpers_test.go`:
- Around line 62-69: Replace the manual prefix check inside the loop that builds
filtered (the code iterating over env and keepSet) with strings.HasPrefix(e,
k+"=") for clarity and idiomatic style; update the import list to include
"strings" and change the conditional from len(e) > len(k) && e[:len(k)+1] ==
k+"=" to strings.HasPrefix(e, k+"="). Ensure behavior is unchanged (keepSet,
env, filtered variables remain the same).
🪄 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 YAML (base), Central YAML (inherited)

Review profile: CHILL

Plan: Pro Plus

Run ID: 6f587132-2560-41fe-828d-33575654ce0e

📥 Commits

Reviewing files that changed from the base of the PR and between 8f693f8 and 18ff2af.

⛔ Files ignored due to path filters (93)
  • e2e/go.sum is excluded by !**/*.sum
  • go.sum is excluded by !**/*.sum
  • vendor/github.com/gorilla/websocket/.gitignore is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/gorilla/websocket/AUTHORS is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/gorilla/websocket/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/gorilla/websocket/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/gorilla/websocket/client.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/gorilla/websocket/compression.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/gorilla/websocket/conn.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/gorilla/websocket/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/gorilla/websocket/join.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/gorilla/websocket/json.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/gorilla/websocket/mask.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/gorilla/websocket/mask_safe.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/gorilla/websocket/prepared.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/gorilla/websocket/proxy.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/gorilla/websocket/server.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/gorilla/websocket/util.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/moby/spdystream/CONTRIBUTING.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/moby/spdystream/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/moby/spdystream/MAINTAINERS is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/moby/spdystream/NOTICE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/moby/spdystream/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/moby/spdystream/connection.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/moby/spdystream/handlers.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/moby/spdystream/priority.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/moby/spdystream/spdy/dictionary.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/moby/spdystream/spdy/read.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/moby/spdystream/spdy/types.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/moby/spdystream/spdy/write.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/moby/spdystream/stream.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/moby/spdystream/utils.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/mxk/go-flowrate/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/mxk/go-flowrate/flowrate/flowrate.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/mxk/go-flowrate/flowrate/io.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/mxk/go-flowrate/flowrate/util.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/.golangci.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/types_infrastructure.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_infrastructures-Default.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_infrastructures-OKD.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.featuregated-crd-manifests.yaml is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/config/v1alpha1/types_cluster_monitoring.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1alpha1/zz_generated.deepcopy.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/config/v1alpha1/zz_generated.swagger_doc_generated.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/etcd/install.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/etcd/v1/Makefile is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/etcd/v1/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/etcd/v1/register.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/etcd/v1/types_pacemakercluster.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/etcd/v1/zz_generated.deepcopy.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/etcd/v1/zz_generated.featuregated-crd-manifests.yaml is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/etcd/v1/zz_generated.swagger_doc_generated.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/etcd/v1alpha1/types_pacemakercluster.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/etcd/v1alpha1/zz_generated.swagger_doc_generated.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/features.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/features/features.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/openapi/generated_openapi/zz_generated.openapi.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_20_kube-apiserver_01_kubeapiservers-Default.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_20_kube-apiserver_01_kubeapiservers-DevPreviewNoUpgrade.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_20_kube-apiserver_01_kubeapiservers-OKD.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_20_kube-apiserver_01_kubeapiservers-TechPreviewNoUpgrade.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_20_kube-apiserver_01_kubeapiservers.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1alpha1/types_clusterapi.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1alpha1/zz_generated.crd-manifests/0000_30_cluster-api_01_clusterapis.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1alpha1/zz_generated.deepcopy.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/operator/v1alpha1/zz_generated.swagger_doc_generated.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/quota/v1/generated.proto is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/quota/v1/types.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/quota/v1/zz_generated.featuregated-crd-manifests.yaml is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/golang.org/x/net/internal/socks/client.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/net/internal/socks/socks.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/net/proxy/dial.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/net/proxy/direct.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/net/proxy/per_host.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/net/proxy/proxy.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/net/proxy/socks5.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/apimachinery/pkg/util/httpstream/spdy/connection.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/apimachinery/pkg/util/httpstream/spdy/roundtripper.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/apimachinery/pkg/util/httpstream/spdy/upgrade.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/apimachinery/pkg/util/proxy/dial.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/apimachinery/pkg/util/proxy/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/apimachinery/pkg/util/proxy/transport.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/apimachinery/pkg/util/proxy/upgradeaware.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/apimachinery/third_party/forked/golang/netutil/addr.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/client-go/tools/portforward/OWNERS is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/client-go/tools/portforward/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/client-go/tools/portforward/fallback_dialer.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/client-go/tools/portforward/portforward.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/client-go/tools/portforward/tunneling_connection.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/client-go/tools/portforward/tunneling_dialer.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/client-go/transport/spdy/spdy.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/client-go/transport/websocket/roundtripper.go is excluded by !**/vendor/**, !vendor/**
  • vendor/modules.txt is excluded by !**/vendor/**, !vendor/**
📒 Files selected for processing (18)
  • cmd/capi-controllers/main.go
  • cmd/capi-operator/main.go
  • cmd/crd-compatibility-checker/main.go
  • cmd/machine-api-migration/main.go
  • e2e/e2e_common.go
  • e2e/framework/framework.go
  • e2e/go.mod
  • e2e/tls_test.go
  • go.mod
  • manifests/0000_20_crd-compatibility-checker_08_deployment.yaml
  • pkg/commoncmdoptions/commonoptions.go
  • pkg/commoncmdoptions/commonoptions_test.go
  • pkg/commoncmdoptions/helpers_test.go
  • pkg/commoncmdoptions/tls.go
  • pkg/controllers/installer/installer_controller_test.go
  • pkg/controllers/revision/revision_controller_test.go
  • pkg/revisiongenerator/revision.go
  • pkg/revisiongenerator/revision_test.go
✅ Files skipped from review due to trivial changes (1)
  • e2e/framework/framework.go
🚧 Files skipped from review as they are similar to previous changes (7)
  • e2e/go.mod
  • go.mod
  • cmd/capi-operator/main.go
  • pkg/controllers/revision/revision_controller_test.go
  • pkg/commoncmdoptions/tls.go
  • cmd/crd-compatibility-checker/main.go
  • pkg/revisiongenerator/revision_test.go

Comment thread e2e/tls_test.go Outdated
Comment thread e2e/tls_test.go Outdated
Comment thread e2e/tls_test.go Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

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 the current code and only fix it if needed.

Inline comments:
In `@e2e/tls_test.go`:
- Line 324: Fix the minor typo in the comment "// succeeds or fails at the
specified TLS version.." by removing the extra period so it reads "// succeeds
or fails at the specified TLS version." — update the comment in e2e/tls_test.go
(the line containing that comment) to use a single period.
- Around line 338-347: The closure passed to Eventually can call close(nil)
because portForwardToPod returns stopCh == nil on error; fix by only deferring
close(stopCh) after verifying err == nil (or checking stopCh != nil) inside the
closure used by Eventually so the deferred close is never called on a nil
channel (refer to the portForwardToPod call, the stopCh variable and the
deferred close(stopCh) in the Eventually closure).
🪄 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 YAML (base), Central YAML (inherited)

Review profile: CHILL

Plan: Pro Plus

Run ID: 5e3d9bef-8771-4138-a078-2aeaf5ba2524

📥 Commits

Reviewing files that changed from the base of the PR and between 18ff2af and 9a4f831.

📒 Files selected for processing (11)
  • e2e/tls_test.go
  • manifests/0000_20_cluster-api-tls-config_role.yaml
  • manifests/0000_20_crd-compatibility-checker_04_rbac_bindings.yaml
  • manifests/0000_20_crd-compatibility-checker_05_metrics-service.yaml
  • manifests/0000_20_crd-compatibility-checker_08_deployment.yaml
  • manifests/0000_30_cluster-api-installer_01_metrics-service.yaml
  • manifests/0000_30_cluster-api-installer_03_clusterrolebinding.yaml
  • manifests/0000_30_cluster-api-installer_05_deployment.yaml
  • manifests/0000_30_cluster-api_04_rbac_bindings.yaml
  • manifests/0000_30_cluster-api_10_metrics-service.yaml
  • manifests/0000_30_cluster-api_11_deployment.yaml
✅ Files skipped from review due to trivial changes (4)
  • manifests/0000_30_cluster-api-installer_01_metrics-service.yaml
  • manifests/0000_20_cluster-api-tls-config_role.yaml
  • manifests/0000_20_crd-compatibility-checker_05_metrics-service.yaml
  • manifests/0000_30_cluster-api_10_metrics-service.yaml

Comment thread e2e/tls_test.go Outdated
Comment thread e2e/tls_test.go Outdated
@damdo damdo changed the title Add support for TLS envsubst substitution OCPCLOUD-3359: Add support for TLS envsubst substitution Apr 15, 2026
@openshift-ci-robot

openshift-ci-robot commented Apr 15, 2026

Copy link
Copy Markdown

@mdbooth: This pull request references OCPCLOUD-3359 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the story to target the "5.0.0" version, but no target version was set.

Details

In response to this:

  • DNM: temporary o/api o/client-go overrides
  • make vendor
  • Set observedRevisionGeneration when writing revisions
  • working
  • Bump library-go
  • make vendor
  • update
  • lints

Summary by CodeRabbit

  • New Features

  • Inject TLS-derived manifest substitutions into installer revisions.

  • Automatic TLS profile detection and watcher that triggers operator restart on profile changes.

  • New metrics services, TLS secrets mounts, and RBAC to expose and secure operator metrics.

  • Improvements

  • Consistent structured logging and more robust startup/error handling.

  • Updated Go module dependencies for compatibility and security.

  • Tests

  • New unit and end-to-end TLS negotiation tests validating operator behavior under different TLS profiles.

  • Bug Fixes

  • Adjusted health probe port in a deployment manifest.

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-robot openshift-ci-robot added the jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. label Apr 15, 2026
@damdo damdo changed the title OCPCLOUD-3359: Add support for TLS envsubst substitution OCPCLOUD-3359,OCPCLOUD-3345: Add support for TLS envsubst substitution Apr 15, 2026
@openshift-ci-robot

openshift-ci-robot commented Apr 15, 2026

Copy link
Copy Markdown

@mdbooth: This pull request references OCPCLOUD-3359 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the story to target the "5.0.0" version, but no target version was set.

This pull request references OCPCLOUD-3345 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the story to target the "5.0.0" version, but no target version was set.

Details

In response to this:

  • DNM: temporary o/api o/client-go overrides
  • make vendor
  • Set observedRevisionGeneration when writing revisions
  • working
  • Bump library-go
  • make vendor
  • update
  • lints

Summary by CodeRabbit

  • New Features

  • Inject TLS-derived manifest substitutions into installer revisions.

  • Automatic TLS profile detection and watcher that triggers operator restart on profile changes.

  • New metrics services, TLS secrets mounts, and RBAC to expose and secure operator metrics.

  • Improvements

  • Consistent structured logging and more robust startup/error handling.

  • Updated Go module dependencies for compatibility and security.

  • Tests

  • New unit and end-to-end TLS negotiation tests validating operator behavior under different TLS profiles.

  • Bug Fixes

  • Adjusted health probe port in a deployment manifest.

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-robot

openshift-ci-robot commented Apr 15, 2026

Copy link
Copy Markdown

@mdbooth: This pull request references OCPCLOUD-3359 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the story to target the "5.0.0" version, but no target version was set.

This pull request references OCPCLOUD-3345 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the story to target the "5.0.0" version, but no target version was set.

Details

In response to this:

Depends on openshift/api#2786

  • DNM: temporary o/api o/client-go overrides
  • make vendor
  • Set observedRevisionGeneration when writing revisions
  • working
  • Bump library-go
  • make vendor
  • update
  • lints

Summary by CodeRabbit

  • New Features

  • Inject TLS-derived manifest substitutions into installer revisions.

  • Automatic TLS profile detection and watcher that triggers operator restart on profile changes.

  • New metrics services, TLS secrets mounts, and RBAC to expose and secure operator metrics.

  • Improvements

  • Consistent structured logging and more robust startup/error handling.

  • Updated Go module dependencies for compatibility and security.

  • Tests

  • New unit and end-to-end TLS negotiation tests validating operator behavior under different TLS profiles.

  • Bug Fixes

  • Adjusted health probe port in a deployment manifest.

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.

@mdbooth
mdbooth force-pushed the manifest-substitutions branch from 9a4f831 to 4ede719 Compare April 15, 2026 14:40
@openshift-ci-robot

openshift-ci-robot commented Apr 15, 2026

Copy link
Copy Markdown

@mdbooth: This pull request references OCPCLOUD-3359 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the story to target the "5.0.0" version, but no target version was set.

This pull request references OCPCLOUD-3345 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the story to target the "5.0.0" version, but no target version was set.

Details

In response to this:

Depends on openshift/api#2786

  • DNM: temporary o/api o/client-go overrides
  • make vendor
  • Set observedRevisionGeneration when writing revisions
  • working
  • Bump library-go
  • make vendor
  • update
  • lints

Summary by CodeRabbit

  • New Features

  • Inject TLS-derived substitutions into installer revisions.

  • Automatic TLS profile detection with a watcher that triggers operator restart on profile changes.

  • New metrics Services, TLS secret mounts, and RBAC to expose and secure operator metrics.

  • Improvements

  • Structured logging and more robust, consistent startup/error handling.

  • Dependency updates across modules for compatibility.

  • Tests

  • New unit and e2e TLS negotiation tests covering multiple TLS profiles and handshake behaviors.

  • Bug Fixes

  • Adjusted health probe port in deployment manifest.

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 coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 2

♻️ Duplicate comments (3)
pkg/revisiongenerator/revision.go (2)

173-184: ⚠️ Potential issue | 🔴 Critical

Frame each substitution before hashing.

This is still ambiguous: different substitution sets can serialize to the same byte stream here, so distinct revisions can end up with the same ContentID.

Suggested fix
-		for _, s := range r.substitutions {
-			h.Write([]byte(s.Key))
-
-			if s.Value != nil {
-				h.Write([]byte(*s.Value))
-			}
-		}
+		data, err := json.Marshal(r.substitutions)
+		if err != nil {
+			return "", fmt.Errorf("error marshalling substitutions: %w", err)
+		}
+
+		h.Write(data)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@pkg/revisiongenerator/revision.go` around lines 173 - 184, The current loop
over r.substitutions writes Key and Value bytes directly into the hasher
(h.Write) which can produce ambiguous concatenations and equal ContentID for
distinct substitution sets; update the loop in revision.go (the code that
computes ContentID from r.substitutions) to frame each substitution
unambiguously by prefixing length headers or explicit separators and by encoding
nil values distinctly (e.g., write uint32 length for Key then Key bytes, then a
marker for Value nil vs non-nil and if non-nil write uint32 length + Value
bytes) before calling h.Write, so each substitution produces a unique,
unambiguous byte sequence for the hash.

260-265: ⚠️ Potential issue | 🟠 Major

Return a copy of ManifestSubstitutions.

This still exposes r.substitutions by reference. A caller can mutate the returned API object and leave the cached contentID stale.

Suggested fix
 	contentID, err := r.ContentID()
 	if err != nil {
 		return operatorv1alpha1.ClusterAPIInstallerRevision{}, fmt.Errorf("error calculating contentID: %w", err)
 	}
+
+	apiSubs := make([]operatorv1alpha1.ClusterAPIInstallerRevisionManifestSubstitution, len(r.substitutions))
+	for i, s := range r.substitutions {
+		apiSubs[i] = s
+		if s.Value != nil {
+			v := *s.Value
+			apiSubs[i].Value = &v
+		}
+	}
 
 	return operatorv1alpha1.ClusterAPIInstallerRevision{
 		Name:                  r.revisionName,
 		Revision:              r.revisionIndex,
 		ContentID:             contentID,
-		ManifestSubstitutions: r.substitutions,
+		ManifestSubstitutions: apiSubs,
 		Components:            apiComponents,
 	}, nil
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@pkg/revisiongenerator/revision.go` around lines 260 - 265, The returned
ClusterAPIInstallerRevision currently assigns ManifestSubstitutions to
r.substitutions by reference, allowing callers to mutate the cached
substitutions and desynchronize contentID; to fix, create and assign a copied
value (deep copy) of r.substitutions when building the
operatorv1alpha1.ClusterAPIInstallerRevision in the function that returns it
(the block that sets Name, Revision, ContentID, ManifestSubstitutions,
Components). Ensure the copy duplicates the underlying collection elements
(e.g., copy map entries or clone slice elements) rather than pointing to
r.substitutions so the returned ManifestSubstitutions is independent of the
internal cache.
pkg/commoncmdoptions/commonoptions.go (1)

108-116: ⚠️ Potential issue | 🟠 Major

Don't let InitOperatorConfig terminate the process during flag parsing.

This still parses the global pflag.CommandLine, so parse failures bypass InitOperatorConfig's returned error path and can os.Exit(2) instead. That makes this API harder to call safely from binaries and tests.

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

In `@pkg/commoncmdoptions/commonoptions.go` around lines 108 - 116,
InitOperatorConfig currently calls pflag.Parse() on the global pflag.CommandLine
which will call os.Exit(2) on parse errors; change it to create and use a local
pflag.FlagSet so parse failures return an error instead of terminating the
process. Specifically, replace uses of pflag.CommandLine/pflag.Parse() in
InitOperatorConfig by creating fs := pflag.NewFlagSet("operator",
pflag.ContinueOnError), register flags with that fs (pass fs to
capiflags.AddManagerOptions and options.BindLeaderElectionFlags and use
textLoggerConfig.AddFlags on a compatible flag set), call
fs.AddGoFlagSet(flag.CommandLine) and then call fs.Parse(os.Args[1:]) and return
any parse error to the caller instead of letting pflag.Parse() abort; keep
references to symbols InitOperatorConfig, pflag.CommandLine, pflag.Parse,
capiflags.AddManagerOptions, textLoggerConfig.AddFlags, and
options.BindLeaderElectionFlags to locate the changes.
🧹 Nitpick comments (2)
cmd/capi-operator/main.go (1)

150-157: Minor: Redundant error logging before return.

The error is logged on line 155 and then wrapped and returned on line 156-157. The caller (main) also logs errors before exiting. Consider removing the inline log to avoid duplicate error messages in logs.

♻️ Suggested simplification
 	if err := (&revision.RevisionController{
 		Client:           mgr.GetClient(),
 		ProviderProfiles: providerProfiles,
 		ReleaseVersion:   util.GetReleaseVersion(),
 	}).SetupWithManager(mgr, operatorConfig.ClusterTLSProfileSpec); err != nil {
-		log.Error(err, "unable to create revision controller", "controller", "RevisionController")
 		return fmt.Errorf("unable to create revision controller: %w", err)
 	}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@cmd/capi-operator/main.go` around lines 150 - 157, The RevisionController
setup block logs the error with log.Error and then wraps and returns the same
error, causing duplicate logging; remove the inline log.Error call inside the
if-block and simply return the wrapped error from the SetupWithManager failure
path (i.e., inside the conditional that calls
(&revision.RevisionController{...}).SetupWithManager(mgr,
operatorConfig.ClusterTLSProfileSpec)), leaving error handling to the caller
(main) that already logs before exit.
cmd/machine-api-migration/main.go (1)

29-29: Unused import: klog is imported but only used once.

The klog import at line 29 appears to only be used at line 240 (klog.Infof), while the rest of the file uses the structured logr.Logger. Consider using the log parameter consistently or removing the klog import if full migration to structured logging is intended.

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

In `@cmd/machine-api-migration/main.go` at line 29, The klog import is unused
except for a single klog.Infof call; replace that call with the structured
logger passed into main (use the log parameter, e.g., log.Info with the same
message and key/value pairs) and then remove the klog import, or if you prefer
klog keep it but convert other logging to klog; update the call site reference
(klog.Infof) to use the logr.Logger variable (log) so the file consistently uses
structured logging.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@e2e/framework/util.go`:
- Around line 117-127: Replace direct cl.Get calls passed into Eventually with
komega.Get so Eventually will poll; specifically change the two calls that
currently use Eventually(cl.Get(ctx, client.ObjectKey{Name: "version"},
clusterVersion)) and Eventually(cl.Get(ctx, client.ObjectKey{Name: "cluster"},
featureGate)) to use komega.Get(ctx, cl, client.ObjectKey{Name: "version"},
clusterVersion) and komega.Get(ctx, cl, client.ObjectKey{Name: "cluster"},
featureGate) respectively (mirror the pattern used in
IsMachineAPIMigrationEnabled) so clusterVersion and featureGate retrievals are
retried until success.

In `@pkg/commoncmdoptions/commonoptions_test.go`:
- Around line 83-99: TestMain currently ignores a non-nil error returned from
runTests and exits with the test exit code only; change it so that when runTests
returns a non-nil err you log/print the error (using fmt.Fprintf(os.Stderr,
...)) and ensure the final exit code is non-zero (e.g., set code = 1 or code =
max(code,1)) so failures in runTests (envtest setup/teardown, cleanup) fail the
test process; update the logic around runTests, execMode, and TestMain to
propagate that non-zero exit.

---

Duplicate comments:
In `@pkg/commoncmdoptions/commonoptions.go`:
- Around line 108-116: InitOperatorConfig currently calls pflag.Parse() on the
global pflag.CommandLine which will call os.Exit(2) on parse errors; change it
to create and use a local pflag.FlagSet so parse failures return an error
instead of terminating the process. Specifically, replace uses of
pflag.CommandLine/pflag.Parse() in InitOperatorConfig by creating fs :=
pflag.NewFlagSet("operator", pflag.ContinueOnError), register flags with that fs
(pass fs to capiflags.AddManagerOptions and options.BindLeaderElectionFlags and
use textLoggerConfig.AddFlags on a compatible flag set), call
fs.AddGoFlagSet(flag.CommandLine) and then call fs.Parse(os.Args[1:]) and return
any parse error to the caller instead of letting pflag.Parse() abort; keep
references to symbols InitOperatorConfig, pflag.CommandLine, pflag.Parse,
capiflags.AddManagerOptions, textLoggerConfig.AddFlags, and
options.BindLeaderElectionFlags to locate the changes.

In `@pkg/revisiongenerator/revision.go`:
- Around line 173-184: The current loop over r.substitutions writes Key and
Value bytes directly into the hasher (h.Write) which can produce ambiguous
concatenations and equal ContentID for distinct substitution sets; update the
loop in revision.go (the code that computes ContentID from r.substitutions) to
frame each substitution unambiguously by prefixing length headers or explicit
separators and by encoding nil values distinctly (e.g., write uint32 length for
Key then Key bytes, then a marker for Value nil vs non-nil and if non-nil write
uint32 length + Value bytes) before calling h.Write, so each substitution
produces a unique, unambiguous byte sequence for the hash.
- Around line 260-265: The returned ClusterAPIInstallerRevision currently
assigns ManifestSubstitutions to r.substitutions by reference, allowing callers
to mutate the cached substitutions and desynchronize contentID; to fix, create
and assign a copied value (deep copy) of r.substitutions when building the
operatorv1alpha1.ClusterAPIInstallerRevision in the function that returns it
(the block that sets Name, Revision, ContentID, ManifestSubstitutions,
Components). Ensure the copy duplicates the underlying collection elements
(e.g., copy map entries or clone slice elements) rather than pointing to
r.substitutions so the returned ManifestSubstitutions is independent of the
internal cache.

---

Nitpick comments:
In `@cmd/capi-operator/main.go`:
- Around line 150-157: The RevisionController setup block logs the error with
log.Error and then wraps and returns the same error, causing duplicate logging;
remove the inline log.Error call inside the if-block and simply return the
wrapped error from the SetupWithManager failure path (i.e., inside the
conditional that calls (&revision.RevisionController{...}).SetupWithManager(mgr,
operatorConfig.ClusterTLSProfileSpec)), leaving error handling to the caller
(main) that already logs before exit.

In `@cmd/machine-api-migration/main.go`:
- Line 29: The klog import is unused except for a single klog.Infof call;
replace that call with the structured logger passed into main (use the log
parameter, e.g., log.Info with the same message and key/value pairs) and then
remove the klog import, or if you prefer klog keep it but convert other logging
to klog; update the call site reference (klog.Infof) to use the logr.Logger
variable (log) so the file consistently uses structured logging.
🪄 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 YAML (base), Central YAML (inherited)

Review profile: CHILL

Plan: Pro Plus

Run ID: 20238e2f-aa5c-4cfc-ac5a-b98e7b425a74

📥 Commits

Reviewing files that changed from the base of the PR and between 9a4f831 and 4ede719.

⛔ Files ignored due to path filters (245)
  • e2e/go.sum is excluded by !**/*.sum
  • go.sum is excluded by !**/*.sum
  • go.work is excluded by !**/*.work
  • manifests-gen/go.sum is excluded by !**/*.sum
  • vendor/github.com/gorilla/websocket/.gitignore is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/gorilla/websocket/AUTHORS is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/gorilla/websocket/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/gorilla/websocket/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/gorilla/websocket/client.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/gorilla/websocket/compression.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/gorilla/websocket/conn.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/gorilla/websocket/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/gorilla/websocket/join.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/gorilla/websocket/json.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/gorilla/websocket/mask.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/gorilla/websocket/mask_safe.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/gorilla/websocket/prepared.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/gorilla/websocket/proxy.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/gorilla/websocket/server.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/gorilla/websocket/util.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/moby/spdystream/CONTRIBUTING.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/moby/spdystream/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/moby/spdystream/MAINTAINERS is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/moby/spdystream/NOTICE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/moby/spdystream/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/moby/spdystream/connection.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/moby/spdystream/handlers.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/moby/spdystream/priority.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/moby/spdystream/spdy/dictionary.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/moby/spdystream/spdy/read.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/moby/spdystream/spdy/types.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/moby/spdystream/spdy/write.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/moby/spdystream/stream.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/moby/spdystream/utils.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/mxk/go-flowrate/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/mxk/go-flowrate/flowrate/flowrate.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/mxk/go-flowrate/flowrate/io.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/mxk/go-flowrate/flowrate/util.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/.golangci.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/types.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/types_apiserver.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/types_authentication.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/types_cluster_version.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/types_dns.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/types_infrastructure.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_00_cluster-version-operator_01_clusterversions-CustomNoUpgrade.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_00_cluster-version-operator_01_clusterversions-DevPreviewNoUpgrade.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_apiservers-CustomNoUpgrade.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_apiservers-DevPreviewNoUpgrade.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_apiservers-TechPreviewNoUpgrade.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_authentications-CustomNoUpgrade.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_authentications-Default.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_authentications-DevPreviewNoUpgrade.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_authentications-OKD.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_authentications-TechPreviewNoUpgrade.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_dnses-CustomNoUpgrade.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_dnses-Default.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_dnses-DevPreviewNoUpgrade.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_dnses-OKD.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_dnses-TechPreviewNoUpgrade.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_infrastructures-CustomNoUpgrade.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_infrastructures-Default.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_infrastructures-DevPreviewNoUpgrade.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_infrastructures-OKD.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_infrastructures-TechPreviewNoUpgrade.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.deepcopy.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/config/v1/zz_generated.featuregated-crd-manifests.yaml is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/config/v1/zz_generated.swagger_doc_generated.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/config/v1alpha1/register.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1alpha1/types_cluster_image_policy.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1alpha1/types_cluster_monitoring.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1alpha1/types_image_policy.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1alpha1/zz_generated.deepcopy.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/config/v1alpha1/zz_generated.featuregated-crd-manifests.yaml is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/config/v1alpha1/zz_generated.swagger_doc_generated.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/envtest-releases.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/etcd/install.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/etcd/v1/Makefile is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/etcd/v1/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/etcd/v1/register.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/etcd/v1/types_pacemakercluster.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/etcd/v1/zz_generated.deepcopy.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/etcd/v1/zz_generated.featuregated-crd-manifests.yaml is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/etcd/v1/zz_generated.swagger_doc_generated.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/etcd/v1alpha1/types_pacemakercluster.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/etcd/v1alpha1/zz_generated.swagger_doc_generated.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/features.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/features/features.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/features/legacyfeaturegates.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/openapi/generated_openapi/zz_generated.openapi.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/operator/v1/types_csi_cluster_driver.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/types_ingress.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/types_machineconfiguration.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/types_network.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_20_kube-apiserver_01_kubeapiservers-Default.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_20_kube-apiserver_01_kubeapiservers-DevPreviewNoUpgrade.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_20_kube-apiserver_01_kubeapiservers-OKD.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_20_kube-apiserver_01_kubeapiservers-TechPreviewNoUpgrade.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_20_kube-apiserver_01_kubeapiservers.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_50_csi-driver_01_clustercsidrivers-CustomNoUpgrade.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_50_csi-driver_01_clustercsidrivers-Default.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_50_csi-driver_01_clustercsidrivers-DevPreviewNoUpgrade.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_50_csi-driver_01_clustercsidrivers-OKD.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_50_csi-driver_01_clustercsidrivers-TechPreviewNoUpgrade.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_50_ingress_00_ingresscontrollers-CustomNoUpgrade.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_50_ingress_00_ingresscontrollers-Default.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_50_ingress_00_ingresscontrollers-DevPreviewNoUpgrade.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_50_ingress_00_ingresscontrollers-OKD.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_50_ingress_00_ingresscontrollers-TechPreviewNoUpgrade.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_70_network_01_networks-CustomNoUpgrade.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_70_network_01_networks-Default.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_70_network_01_networks-DevPreviewNoUpgrade.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_70_network_01_networks-OKD.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_70_network_01_networks-TechPreviewNoUpgrade.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_80_machine-config_01_machineconfigurations-Default.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_80_machine-config_01_machineconfigurations-OKD.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.deepcopy.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/operator/v1/zz_generated.featuregated-crd-manifests.yaml is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/operator/v1/zz_generated.swagger_doc_generated.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/operator/v1alpha1/types_clusterapi.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1alpha1/zz_generated.crd-manifests/0000_30_cluster-api_01_clusterapis.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1alpha1/zz_generated.deepcopy.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/operator/v1alpha1/zz_generated.swagger_doc_generated.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/quota/v1/generated.proto is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/quota/v1/types.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/quota/v1/zz_generated.featuregated-crd-manifests.yaml is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/client-go/apiextensions/applyconfigurations/internal/internal.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/apiserverspec.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/awsdnsspec.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/infrastructurestatus.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/prefixedclaimmapping.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/update.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1/usernameclaimmapping.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/additionalalertmanagerconfig.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/alertmanagercustomconfig.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/authorizationconfig.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/basicauth.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/clusterimagepolicy.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/clusterimagepolicyspec.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/clusterimagepolicystatus.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/clustermonitoringspec.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/containerresource.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/dropequalactionconfig.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/hashmodactionconfig.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/imagepolicy.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/imagepolicyfulciocawithrekorrootoftrust.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/imagepolicypkirootoftrust.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/imagepolicypublickeyrootoftrust.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/imagepolicyspec.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/imagepolicystatus.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/imagesigstoreverificationpolicy.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/keepequalactionconfig.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/label.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/labelmapactionconfig.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/lowercaseactionconfig.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/metadataconfig.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/metadataconfigcustom.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/metricsserverconfig.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/oauth2.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/oauth2endpointparam.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/openshiftstatemetricsconfig.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/pkicertificatesubject.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/policyfulciosubject.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/policyidentity.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/policymatchexactrepository.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/policymatchremapidentity.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/policyrootoftrust.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/prometheusconfig.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/prometheusoperatoradmissionwebhookconfig.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/prometheusoperatorconfig.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/prometheusremotewriteheader.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/queueconfig.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/relabelactionconfig.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/relabelconfig.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/remotewriteauthorization.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/remotewritespec.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/replaceactionconfig.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/retention.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/secretkeyselector.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/sigv4.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/telemeterclientconfig.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/tlsconfig.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/config/v1alpha1/uppercaseactionconfig.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/applyconfigurations/internal/internal.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1alpha1/clusterimagepolicy.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1alpha1/config_client.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1alpha1/generated_expansion.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/clientset/versioned/typed/config/v1alpha1/imagepolicy.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/informers/externalversions/config/v1alpha1/clusterimagepolicy.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/informers/externalversions/config/v1alpha1/imagepolicy.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/informers/externalversions/config/v1alpha1/interface.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/informers/externalversions/generic.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/listers/config/v1alpha1/clusterimagepolicy.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/listers/config/v1alpha1/expansion_generated.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/config/listers/config/v1alpha1/imagepolicy.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/machine/applyconfigurations/internal/internal.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/applyconfigurations/internal/internal.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/applyconfigurations/operator/v1/awscsidriverconfigspec.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/applyconfigurations/operator/v1/bgpmanagedconfig.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/applyconfigurations/operator/v1/ingresscontrollertuningoptions.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/applyconfigurations/operator/v1/nooverlayconfig.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/applyconfigurations/operator/v1/ovnkubernetesconfig.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/applyconfigurations/operator/v1alpha1/clusterapiinstallercomponent.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/applyconfigurations/operator/v1alpha1/clusterapiinstallerrevision.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/applyconfigurations/operator/v1alpha1/clusterapiinstallerrevisionmanifestsubstitution.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/client-go/operator/applyconfigurations/operator/v1alpha1/clusterapistatus.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/controller-runtime-common/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/controller-runtime-common/pkg/tls/controller.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/controller-runtime-common/pkg/tls/tls.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/library-go/pkg/crypto/cert_config.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/library-go/pkg/crypto/keygen.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/library-go/pkg/crypto/options.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/library-go/pkg/crypto/tls_adherence.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/library-go/pkg/operator/certrotation/client_cert_rotation_controller.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/library-go/pkg/operator/certrotation/signer.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/library-go/pkg/operator/certrotation/target.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/library-go/pkg/operator/v1helpers/helpers.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/library-go/pkg/pki/profile.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/library-go/pkg/pki/provider.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/library-go/pkg/pki/resolve.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/library-go/pkg/pki/types.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/net/internal/socks/client.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/net/internal/socks/socks.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/net/proxy/dial.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/net/proxy/direct.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/net/proxy/per_host.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/net/proxy/proxy.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/net/proxy/socks5.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/apimachinery/pkg/util/httpstream/spdy/connection.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/apimachinery/pkg/util/httpstream/spdy/roundtripper.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/apimachinery/pkg/util/httpstream/spdy/upgrade.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/apimachinery/pkg/util/proxy/dial.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/apimachinery/pkg/util/proxy/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/apimachinery/pkg/util/proxy/transport.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/apimachinery/pkg/util/proxy/upgradeaware.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/apimachinery/third_party/forked/golang/netutil/addr.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/client-go/tools/portforward/OWNERS is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/client-go/tools/portforward/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/client-go/tools/portforward/fallback_dialer.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/client-go/tools/portforward/portforward.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/client-go/tools/portforward/tunneling_connection.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/client-go/tools/portforward/tunneling_dialer.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/client-go/transport/spdy/spdy.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/client-go/transport/websocket/roundtripper.go is excluded by !**/vendor/**, !vendor/**
  • vendor/modules.txt is excluded by !**/vendor/**, !vendor/**
📒 Files selected for processing (35)
  • cmd/capi-controllers/main.go
  • cmd/capi-operator/main.go
  • cmd/crd-compatibility-checker/main.go
  • cmd/machine-api-migration/main.go
  • e2e/e2e_common.go
  • e2e/framework/framework.go
  • e2e/framework/util.go
  • e2e/go.mod
  • e2e/tls_test.go
  • go.mod
  • manifests-gen/go.mod
  • manifests/0000_20_cluster-api-tls-config_role.yaml
  • manifests/0000_20_crd-compatibility-checker_04_rbac_bindings.yaml
  • manifests/0000_20_crd-compatibility-checker_05_metrics-service.yaml
  • manifests/0000_20_crd-compatibility-checker_08_deployment.yaml
  • manifests/0000_30_cluster-api-installer_01_metrics-service.yaml
  • manifests/0000_30_cluster-api-installer_03_clusterrolebinding.yaml
  • manifests/0000_30_cluster-api-installer_05_deployment.yaml
  • manifests/0000_30_cluster-api_04_rbac_bindings.yaml
  • manifests/0000_30_cluster-api_10_metrics-service.yaml
  • manifests/0000_30_cluster-api_11_deployment.yaml
  • pkg/commoncmdoptions/commonoptions.go
  • pkg/commoncmdoptions/commonoptions_test.go
  • pkg/commoncmdoptions/helpers_test.go
  • pkg/commoncmdoptions/tls.go
  • pkg/controllers/installer/helpers_test.go
  • pkg/controllers/installer/installer_controller_test.go
  • pkg/controllers/revision/helpers_test.go
  • pkg/controllers/revision/revision_controller.go
  • pkg/controllers/revision/revision_controller_test.go
  • pkg/revisiongenerator/revision.go
  • pkg/revisiongenerator/revision_test.go
  • pkg/revisiongenerator/transform.go
  • pkg/revisiongenerator/transform_test.go
  • pkg/test/envtest.go
✅ Files skipped from review due to trivial changes (10)
  • manifests-gen/go.mod
  • manifests/0000_30_cluster-api-installer_01_metrics-service.yaml
  • e2e/framework/framework.go
  • manifests/0000_20_cluster-api-tls-config_role.yaml
  • pkg/commoncmdoptions/helpers_test.go
  • manifests/0000_30_cluster-api_04_rbac_bindings.yaml
  • manifests/0000_30_cluster-api_10_metrics-service.yaml
  • pkg/commoncmdoptions/tls.go
  • cmd/crd-compatibility-checker/main.go
  • e2e/tls_test.go
🚧 Files skipped from review as they are similar to previous changes (9)
  • e2e/e2e_common.go
  • pkg/controllers/revision/helpers_test.go
  • pkg/revisiongenerator/transform.go
  • manifests/0000_20_crd-compatibility-checker_05_metrics-service.yaml
  • manifests/0000_20_crd-compatibility-checker_04_rbac_bindings.yaml
  • manifests/0000_30_cluster-api-installer_03_clusterrolebinding.yaml
  • e2e/go.mod
  • pkg/controllers/revision/revision_controller_test.go
  • pkg/revisiongenerator/revision_test.go

Comment thread e2e/framework/util.go Outdated
Comment thread pkg/commoncmdoptions/commonoptions_test.go
@mdbooth
mdbooth force-pushed the manifest-substitutions branch from 4ede719 to 58981ac Compare April 15, 2026 15:01
@openshift-ci-robot

openshift-ci-robot commented Apr 15, 2026

Copy link
Copy Markdown

@mdbooth: This pull request references OCPCLOUD-3359 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the story to target the "5.0.0" version, but no target version was set.

This pull request references OCPCLOUD-3345 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the story to target the "5.0.0" version, but no target version was set.

Details

In response to this:

Depends on openshift/api#2786

  • DNM: temporary o/api o/client-go overrides
  • make vendor
  • Set observedRevisionGeneration when writing revisions
  • working
  • Bump library-go
  • make vendor
  • update
  • lints

Summary by CodeRabbit

  • New Features

  • TLS-derived substitutions applied to installer revisions.

  • Automatic TLS profile detection with a watcher that triggers operator restart on profile changes.

  • New metrics Services, TLS secret mounts, and RBAC bindings to expose and secure operator metrics.

  • Improvements

  • Structured logging and more consistent, failure-propagating startup behavior.

  • Dependency updates across modules for compatibility.

  • Tests

  • New unit and e2e TLS negotiation tests covering multiple TLS profiles and handshake behaviors.

  • Bug Fixes

  • Adjusted health probe port in a deployment manifest.

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 coderabbitai Bot left a comment

Copy link
Copy Markdown

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)
manifests/0000_20_crd-compatibility-checker_08_deployment.yaml (1)

38-86: ⚠️ Potential issue | 🟠 Major

Add explicit container/pod securityContext hardening.

The deployment still relies on default security context behavior, which is what Trivy/Checkov are flagging. Please set explicit non-root / no-privilege-escalation / seccomp defaults on the pod and container.

🔐 Proposed hardening patch
 spec:
   template:
     spec:
+      securityContext:
+        runAsNonRoot: true
+        seccompProfile:
+          type: RuntimeDefault
       containers:
       - name: compatibility-requirements-controllers
+        securityContext:
+          allowPrivilegeEscalation: false
+          capabilities:
+            drop:
+            - ALL
         image: registry.ci.openshift.org/openshift:cluster-capi-operator
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@manifests/0000_20_crd-compatibility-checker_08_deployment.yaml` around lines
38 - 86, Add explicit pod and container securityContext entries to harden the
deployment: in the PodSpec add a podSecurityContext with runAsNonRoot: true,
runAsUser (non-zero uid), runAsGroup and fsGroup values and set
seccompProfile.type: RuntimeDefault; in the container spec for the
compatibility-requirements-controllers container add securityContext with
allowPrivilegeEscalation: false, privileged: false, runAsNonRoot: true (matching
pod runAsUser), capabilities.drop: ["ALL"], and seccompProfile.type:
RuntimeDefault to ensure no privilege escalation and a non-root runtime.
cmd/crd-compatibility-checker/main.go (1)

43-49: ⚠️ Potential issue | 🔴 Critical

Missing configv1 scheme registration.

The initScheme function does not register configv1, but InitOperatorConfig calls resolveTLSProfile which requires it to fetch the configv1.APIServer resource to resolve the cluster TLS profile. Without this registration, a runtime error will occur when attempting to fetch the APIServer.

Proposed fix
 import (
 	"context"
 	"flag"
 	"fmt"
 	"os"
 
 	admissionregistrationv1 "k8s.io/api/admissionregistration/v1"
 	apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
 	"k8s.io/apimachinery/pkg/runtime"
 	utilruntime "k8s.io/apimachinery/pkg/util/runtime"
 	clientgoscheme "k8s.io/client-go/kubernetes/scheme"
 
 	apiextensionsv1alpha1 "github.com/openshift/api/apiextensions/v1alpha1"
+	configv1 "github.com/openshift/api/config/v1"
 	operatorv1 "github.com/openshift/api/operator/v1"
 func initScheme(scheme *runtime.Scheme) {
 	utilruntime.Must(clientgoscheme.AddToScheme(scheme))
 	utilruntime.Must(admissionregistrationv1.AddToScheme(scheme))
 	utilruntime.Must(apiextensionsv1.AddToScheme(scheme))
 	utilruntime.Must(apiextensionsv1alpha1.AddToScheme(scheme))
+	utilruntime.Must(configv1.Install(scheme))
 	utilruntime.Must(operatorv1.AddToScheme(scheme))
 }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@cmd/crd-compatibility-checker/main.go` around lines 43 - 49, The initScheme
function is missing registration of the configv1 API, causing resolveTLSProfile
(called from InitOperatorConfig) to fail when fetching configv1.APIServer;
update initScheme to add utilruntime.Must(configv1.AddToScheme(scheme)) so the
configv1 types are registered before any client operations that call
resolveTLSProfile/InitOperatorConfig.
♻️ Duplicate comments (1)
pkg/controllers/revision/revision_controller_test.go (1)

505-510: ⚠️ Potential issue | 🟡 Minor

Guard cleanup when manager creation never happens.

mgr.stop() is called unconditionally in the DeferCleanup, but mgr is assigned inside the It block at line 518. If the test fails before that assignment, mgr remains nil and causes a panic during cleanup, hiding the original failure.

Proposed fix
 	DeferCleanup(func(ctx context.Context) {
+		if mgr != nil {
 			mgr.stop()
+		}
 	})
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@pkg/controllers/revision/revision_controller_test.go` around lines 505 - 510,
The DeferCleanup currently calls mgr.stop() unconditionally which can panic if
mgr was never created; update the BeforeEach/DeferCleanup pairing so the cleanup
guards against a nil manager—e.g., in the DeferCleanup closure check that mgr !=
nil (or mgr != nil && mgr.IsRunning() if available) before calling mgr.stop();
locate the DeferCleanup inside the BeforeEach around createFixtures and adjust
it to perform the nil-check on the mgr variable to avoid panics when the manager
creation in the It block never happens.
🧹 Nitpick comments (1)
cmd/machine-api-migration/main.go (1)

237-240: Consider using consistent logging.

The rest of the file uses logr.Logger, but this function still uses klog.Infof. While functional, using consistent logging throughout would improve maintainability.

Suggested change

Pass the logger to getFeatureGates and use it instead of klog:

-func getFeatureGates(ctx context.Context, mgr ctrl.Manager) (featuregates.FeatureGateAccess, error) {
+func getFeatureGates(ctx context.Context, log logr.Logger, mgr ctrl.Manager) (featuregates.FeatureGateAccess, error) {
 	// ...
 	select {
 	case <-featureGateAccessor.InitialFeatureGatesObserved():
 		featureGates, _ := featureGateAccessor.CurrentFeatureGates()
-		klog.Infof("FeatureGates initialized: %v", featureGates.KnownFeatures())
+		log.Info("FeatureGates initialized", "features", featureGates.KnownFeatures())
 	// ...
 }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@cmd/machine-api-migration/main.go` around lines 237 - 240, The logging in
getFeatureGates still uses klog.Infof while the rest of the file uses a
logr.Logger; update getFeatureGates to accept a logger parameter (e.g., logger
logr.Logger) and replace klog.Infof with logger.Info calls, locating the change
around getFeatureGates where featureGateAccessor.InitialFeatureGatesObserved()
and featureGateAccessor.CurrentFeatureGates() are used and ensure the call sites
that invoke getFeatureGates pass the existing logger instance.
🤖 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 `@cmd/crd-compatibility-checker/main.go`:
- Around line 43-49: The initScheme function is missing registration of the
configv1 API, causing resolveTLSProfile (called from InitOperatorConfig) to fail
when fetching configv1.APIServer; update initScheme to add
utilruntime.Must(configv1.AddToScheme(scheme)) so the configv1 types are
registered before any client operations that call
resolveTLSProfile/InitOperatorConfig.

In `@manifests/0000_20_crd-compatibility-checker_08_deployment.yaml`:
- Around line 38-86: Add explicit pod and container securityContext entries to
harden the deployment: in the PodSpec add a podSecurityContext with
runAsNonRoot: true, runAsUser (non-zero uid), runAsGroup and fsGroup values and
set seccompProfile.type: RuntimeDefault; in the container spec for the
compatibility-requirements-controllers container add securityContext with
allowPrivilegeEscalation: false, privileged: false, runAsNonRoot: true (matching
pod runAsUser), capabilities.drop: ["ALL"], and seccompProfile.type:
RuntimeDefault to ensure no privilege escalation and a non-root runtime.

---

Duplicate comments:
In `@pkg/controllers/revision/revision_controller_test.go`:
- Around line 505-510: The DeferCleanup currently calls mgr.stop()
unconditionally which can panic if mgr was never created; update the
BeforeEach/DeferCleanup pairing so the cleanup guards against a nil
manager—e.g., in the DeferCleanup closure check that mgr != nil (or mgr != nil
&& mgr.IsRunning() if available) before calling mgr.stop(); locate the
DeferCleanup inside the BeforeEach around createFixtures and adjust it to
perform the nil-check on the mgr variable to avoid panics when the manager
creation in the It block never happens.

---

Nitpick comments:
In `@cmd/machine-api-migration/main.go`:
- Around line 237-240: The logging in getFeatureGates still uses klog.Infof
while the rest of the file uses a logr.Logger; update getFeatureGates to accept
a logger parameter (e.g., logger logr.Logger) and replace klog.Infof with
logger.Info calls, locating the change around getFeatureGates where
featureGateAccessor.InitialFeatureGatesObserved() and
featureGateAccessor.CurrentFeatureGates() are used and ensure the call sites
that invoke getFeatureGates pass the existing logger instance.

ℹ️ Review info
⚙️ Run configuration

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

Review profile: CHILL

Plan: Pro Plus

Run ID: 6b7db100-2a1a-4c0d-a729-e684694cfe04

📥 Commits

Reviewing files that changed from the base of the PR and between 4ede719 and 58981ac.

⛔ Files ignored due to path filters (64)
  • e2e/go.sum is excluded by !**/*.sum
  • go.sum is excluded by !**/*.sum
  • manifests-gen/go.sum is excluded by !**/*.sum
  • vendor/github.com/gorilla/websocket/.gitignore is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/gorilla/websocket/AUTHORS is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/gorilla/websocket/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/gorilla/websocket/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/gorilla/websocket/client.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/gorilla/websocket/compression.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/gorilla/websocket/conn.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/gorilla/websocket/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/gorilla/websocket/join.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/gorilla/websocket/json.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/gorilla/websocket/mask.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/gorilla/websocket/mask_safe.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/gorilla/websocket/prepared.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/gorilla/websocket/proxy.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/gorilla/websocket/server.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/gorilla/websocket/util.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/moby/spdystream/CONTRIBUTING.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/moby/spdystream/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/moby/spdystream/MAINTAINERS is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/moby/spdystream/NOTICE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/moby/spdystream/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/moby/spdystream/connection.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/moby/spdystream/handlers.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/moby/spdystream/priority.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/moby/spdystream/spdy/dictionary.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/moby/spdystream/spdy/read.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/moby/spdystream/spdy/types.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/moby/spdystream/spdy/write.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/moby/spdystream/stream.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/moby/spdystream/utils.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/mxk/go-flowrate/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/mxk/go-flowrate/flowrate/flowrate.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/mxk/go-flowrate/flowrate/io.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/mxk/go-flowrate/flowrate/util.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/controller-runtime-common/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/controller-runtime-common/pkg/tls/controller.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/controller-runtime-common/pkg/tls/tls.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/net/internal/socks/client.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/net/internal/socks/socks.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/net/proxy/dial.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/net/proxy/direct.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/net/proxy/per_host.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/net/proxy/proxy.go is excluded by !**/vendor/**, !vendor/**
  • vendor/golang.org/x/net/proxy/socks5.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/apimachinery/pkg/util/httpstream/spdy/connection.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/apimachinery/pkg/util/httpstream/spdy/roundtripper.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/apimachinery/pkg/util/httpstream/spdy/upgrade.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/apimachinery/pkg/util/proxy/dial.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/apimachinery/pkg/util/proxy/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/apimachinery/pkg/util/proxy/transport.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/apimachinery/pkg/util/proxy/upgradeaware.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/apimachinery/third_party/forked/golang/netutil/addr.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/client-go/tools/portforward/OWNERS is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/client-go/tools/portforward/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/client-go/tools/portforward/fallback_dialer.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/client-go/tools/portforward/portforward.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/client-go/tools/portforward/tunneling_connection.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/client-go/tools/portforward/tunneling_dialer.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/client-go/transport/spdy/spdy.go is excluded by !**/vendor/**, !vendor/**
  • vendor/k8s.io/client-go/transport/websocket/roundtripper.go is excluded by !**/vendor/**, !vendor/**
  • vendor/modules.txt is excluded by !**/vendor/**, !vendor/**
📒 Files selected for processing (20)
  • cmd/capi-controllers/main.go
  • cmd/capi-operator/main.go
  • cmd/crd-compatibility-checker/main.go
  • cmd/machine-api-migration/main.go
  • e2e/e2e_common.go
  • e2e/framework/framework.go
  • e2e/framework/util.go
  • e2e/go.mod
  • e2e/tls_test.go
  • go.mod
  • manifests-gen/go.mod
  • manifests/0000_20_crd-compatibility-checker_08_deployment.yaml
  • pkg/commoncmdoptions/commonoptions.go
  • pkg/commoncmdoptions/commonoptions_test.go
  • pkg/commoncmdoptions/helpers_test.go
  • pkg/commoncmdoptions/tls.go
  • pkg/controllers/revision/helpers_test.go
  • pkg/controllers/revision/revision_controller.go
  • pkg/controllers/revision/revision_controller_test.go
  • pkg/test/envtest.go
✅ Files skipped from review due to trivial changes (5)
  • pkg/test/envtest.go
  • manifests-gen/go.mod
  • e2e/framework/framework.go
  • pkg/commoncmdoptions/helpers_test.go
  • e2e/tls_test.go
🚧 Files skipped from review as they are similar to previous changes (4)
  • e2e/e2e_common.go
  • go.mod
  • pkg/controllers/revision/helpers_test.go
  • cmd/capi-operator/main.go

@mdbooth
mdbooth force-pushed the manifest-substitutions branch from d6dafdb to d918255 Compare April 21, 2026 15:28
@openshift-merge-bot

Copy link
Copy Markdown
Contributor

Scheduling tests matching the pipeline_run_if_changed or not excluded by pipeline_skip_if_only_changed parameters:
/test e2e-aws-capi-techpreview
/test e2e-aws-ovn
/test e2e-aws-ovn-serial-1of2
/test e2e-aws-ovn-serial-2of2
/test e2e-aws-ovn-techpreview
/test e2e-aws-ovn-techpreview-upgrade
/test e2e-azure-capi-techpreview
/test e2e-azure-ovn-techpreview
/test e2e-azure-ovn-techpreview-upgrade
/test e2e-gcp-capi-techpreview
/test e2e-gcp-ovn-techpreview
/test e2e-metal3-capi-techpreview
/test e2e-openstack-capi-techpreview
/test e2e-openstack-ovn-techpreview
/test e2e-vsphere-capi-techpreview
/test regression-clusterinfra-aws-ipi-techpreview-capi

@openshift-merge-bot

Copy link
Copy Markdown
Contributor

Tests from second stage were triggered manually. Pipeline can be controlled only manually, until HEAD changes. Use command to trigger second stage.

1 similar comment
@openshift-merge-bot

Copy link
Copy Markdown
Contributor

Tests from second stage were triggered manually. Pipeline can be controlled only manually, until HEAD changes. Use command to trigger second stage.

@mdbooth
mdbooth force-pushed the manifest-substitutions branch from d918255 to bca2927 Compare April 22, 2026 16:29
@openshift-merge-bot

Copy link
Copy Markdown
Contributor

Scheduling tests matching the pipeline_run_if_changed or not excluded by pipeline_skip_if_only_changed parameters:
/test e2e-aws-capi-techpreview
/test e2e-aws-ovn
/test e2e-aws-ovn-serial-1of2
/test e2e-aws-ovn-serial-2of2
/test e2e-aws-ovn-techpreview
/test e2e-aws-ovn-techpreview-upgrade
/test e2e-azure-capi-techpreview
/test e2e-azure-ovn-techpreview
/test e2e-azure-ovn-techpreview-upgrade
/test e2e-gcp-capi-techpreview
/test e2e-gcp-ovn-techpreview
/test e2e-metal3-capi-techpreview
/test e2e-openstack-capi-techpreview
/test e2e-openstack-ovn-techpreview
/test e2e-vsphere-capi-techpreview
/test regression-clusterinfra-aws-ipi-techpreview-capi

@damdo

damdo commented Apr 22, 2026

Copy link
Copy Markdown
Member

/retest

1 similar comment
@damdo

damdo commented Apr 22, 2026

Copy link
Copy Markdown
Member

/retest

@openshift-merge-bot

Copy link
Copy Markdown
Contributor

Tests from second stage were triggered manually. Pipeline can be controlled only manually, until HEAD changes. Use command to trigger second stage.

2 similar comments
@openshift-merge-bot

Copy link
Copy Markdown
Contributor

Tests from second stage were triggered manually. Pipeline can be controlled only manually, until HEAD changes. Use command to trigger second stage.

@openshift-merge-bot

Copy link
Copy Markdown
Contributor

Tests from second stage were triggered manually. Pipeline can be controlled only manually, until HEAD changes. Use command to trigger second stage.

@mdbooth

mdbooth commented Apr 23, 2026

Copy link
Copy Markdown
Contributor Author

/verified by @mdbooth

@openshift-ci-robot openshift-ci-robot added the verified Signifies that the PR passed pre-merge verification criteria label Apr 23, 2026
@openshift-ci-robot

Copy link
Copy Markdown

@mdbooth: This PR has been marked as verified by @mdbooth.

Details

In response to this:

/verified by @mdbooth

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-merge-bot

Copy link
Copy Markdown
Contributor

Tests from second stage were triggered manually. Pipeline can be controlled only manually, until HEAD changes. Use command to trigger second stage.

@damdo damdo left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

/lgtm

Thanks @mdbooth !!

@openshift-ci openshift-ci Bot added the lgtm Indicates that a PR is ready to be merged. label Apr 23, 2026
@openshift-merge-bot

Copy link
Copy Markdown
Contributor

/retest-required

Remaining retests: 0 against base HEAD 39d0bbc and 2 for PR HEAD bca2927 in total

@mdbooth

mdbooth commented Apr 23, 2026

Copy link
Copy Markdown
Contributor Author

The 2 OpenStack failures against this PR look like infra flakes. I would prefer not to override if we can get them to pass.

@openshift-ci

openshift-ci Bot commented Apr 23, 2026

Copy link
Copy Markdown
Contributor

@mdbooth: 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-techpreview bca2927 link false /test e2e-openstack-ovn-techpreview
ci/prow/e2e-azure-ovn-techpreview bca2927 link false /test e2e-azure-ovn-techpreview

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.

@openshift-merge-bot
openshift-merge-bot Bot merged commit f46195f into openshift:main Apr 23, 2026
23 of 25 checks passed
@mdbooth
mdbooth deleted the manifest-substitutions branch April 23, 2026 13:31
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. jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. lgtm Indicates that a PR is ready to be merged. pipeline-auto verified Signifies that the PR passed pre-merge verification criteria

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants