Skip to content

[release-4.21] OCPBUGS-XXXXX: Backport noOLM / Sail Library to release-4.21#1442

Open
gcs278 wants to merge 11 commits into
openshift:release-4.21from
gcs278:backport-noOLM-4.21
Open

[release-4.21] OCPBUGS-XXXXX: Backport noOLM / Sail Library to release-4.21#1442
gcs278 wants to merge 11 commits into
openshift:release-4.21from
gcs278:backport-noOLM-4.21

Conversation

@gcs278

@gcs278 gcs278 commented May 8, 2026

Copy link
Copy Markdown
Contributor

Summary

Backport of the noOLM / Sail Library installation path (NE-2286, shipped in 4.22) to release-4.21. This resolves several fundamental OLM bugs that have no viable OLM-based workaround — most critically OCPBUGS-86778, which blocks all OSSM z-stream upgrades and prevents shipping CVE fixes.

This PR is intended to merge with the GatewayAPIWithoutOLM feature gate disabled, making it a no-op on merge. The goal is to subsequently enable the gate by default (via openshift/api) to activate the Sail Library path and resolve the OLM issues.

Cherry-picked PRs

PR Title Why
#1354 NE-2471: Replace OLM-based Istio install with Sail Library Core change — adds istio_sail_installer.go, istio_olm.go refactor, migration.go, status.go, CRD manifests, Sail Library RBAC manifests
#1402 OCPBUGS-79467: Change default log level from DEBUG to INFO Sail Library generates ~2,000 debug logs/hour; without this fix, enabling noOLM floods the logs. Only the log level change (commit 1) is cherry-picked; commit 2 references code not present on 4.21.
#1404 NE-2519: Move Sail Library to official release branch Moves from dev Sail Library branch to official OSSM 3.3.1 release

Note: #1393 (OCPBUGS-79667: Use feature-gate annotation for Sail Library RBAC) was also a dependency but is being skipped because CVO on this release does not support the release.openshift.io/feature-gate annotation (openshift/cluster-version-operator#1273 was not backported). As a result, the Sail Library RBAC manifests use the release.openshift.io/feature-set annotation and a separate PR will be needed to remove this annotation before promoting the feature gate to GA.

Versioning

This backport does not bump the Gateway API CRDs (remain at v1.3.0) or the Istio version (remains at v1.27.3) for the noOLM code path. When the GatewayAPIWithoutOLM feature gate is enabled, the Sail Library will install Istio using the same v1.27.3 version that the OLM path currently uses. This works because the vendored Sail Library (OSSM 3.3.1) still supports Istio 1.27.3.

The GWAPI CRD bump to v1.4.1 and Istio version bump to v1.28.5 will follow separately via #1444, allowing us to validate the noOLM path independently from the version changes.

When noOLM shipped in 4.22, the OLM and noOLM versions were already aligned at 3.3.1, so version separation was not needed. On 4.21, the OLM path is on 3.2.0 — keeping both paths at the same Istio version avoids introducing conditional logic or separate deployment manifests in the backport.

Conflicts resolved

  • pkg/operator/operator.go: Added GatewayAPIWithoutOLM gate alongside existing 4.21 gates (GatewayAPI, GatewayAPIController, RouteExternalCertificate)
  • pkg/operator/controller/status/controller.go: Took incoming noOLM logic (useOLM/useSailLibrary, conditional subscription listing) but wrapped in existing 4.21 GatewayAPIEnabled guard
  • test/e2e/gateway_api_test.go: Kept 4.21 gatewayAPIControllerEnabled guard, added gatewayAPIWithoutOLMEnabled conditionals inside for Sail Library vs OLM test selection. Kept xcrdNames alongside new istioCRDNames. Removed references to testGatewayAPIInfrastructureAnnotations, testGatewayAPIInternalLoadBalancer, and testGatewayOpenshiftConditions which were added in separate PRs not present on release-4.21.
  • go.mod / vendor**: Added replace directives for openshift/api (fork with gate) and sail-operator (downstream fork with pkg/install)
  • pkg/operator/controller/canary/daemonset.go (OCPBUGS-79467: Change default log level from DEBUG to INFO #1402 commit 2): Skipped — references canary cert hash variables not present on 4.21

Rollout Plan

Phase 1 — Land code (gate OFF)

Phase 2 — TechPreview soak

Phase 3 — GA promotion

Follow-up

Go Dependency Updates

Transitive dependency changes

The sail-operator (OSSM 3.3.1) brings in new transitive dependencies for Helm chart rendering (helm.sh/helm/v3), Istio utility libraries (istio.io/istio/pkg/log, pkg/ptr, pkg/slices, pkg/util/sets), and their dependency chains. These are all indirect — vendored but not imported by CIO code directly. k8s modules received a patch bump (0.34.1 → 0.34.3) from go mod tidy. Both are low risk.

controller-runtime (pinned: v0.22.5 → v0.21.0)

The sail-operator requires controller-runtime v0.22.5, but we pin back to v0.21.0 — the version CIO's own code was built and tested against on 4.21. CIO's core controller logic (client, cache, manager, controller wiring) is unchanged and continues to run against the same controller-runtime it shipped with. The sail library's install package only uses basic client.Client operations (New, Get, Create, Update) and pkg/log — all unchanged since controller-runtime v0.1. No other vendored dependency calls controller-runtime APIs.

On 4.21, this pin is not strictly required since 4.21 is already on k8s 0.34 and a patch bump poses no compatibility risk. However, on 4.20 and 4.19 the pin is essential because controller-runtime 0.22 would force a k8s minor version bump, causing incompatibilities with the frozen openshift ecosystem packages (client-go, library-go). Pinning here maintains a consistent approach across all three backport branches.

gateway-api (pinned: v1.4.1 → v1.3.0)

The sail-operator pulls in gateway-api v1.4.1, but we pin back to v1.3.0 (the original 4.21 version). The CRD manifests shipped in this release are v1.3.0, and the Go types are forward-compatible. Pinning keeps the vendored types aligned with the CRDs installed on the cluster.

Verification

  • go build ./pkg/operator/controller/gatewayclass/... compiles
  • go test ./pkg/operator/controller/gatewayclass/... passes
  • Full CI (blocked on openshift/api dependency)

🤖 Generated with Claude Code

@openshift-ci-robot openshift-ci-robot added the jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. label May 8, 2026
@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 May 8, 2026
@openshift-ci

openshift-ci Bot commented May 8, 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-robot

openshift-ci-robot commented May 8, 2026

Copy link
Copy Markdown
Contributor

@gcs278: This pull request references NE-2471 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 "4.21.z" version, but no target version was set.

Details

In response to this:

Summary

Backport of the noOLM / Sail Library code structure to release-4.21 with the GatewayAPIWithoutOLM feature gate disabled in all feature sets. The goal is structural alignment with 4.22 so that future bug fixes to the Sail Library path can be cleanly cherry-picked into 4.21 without massive conflicts.

The feature gate is OFF — the existing OLM path remains active. The Sail Library code is present but dormant.

Cherry-picked PRs

PR Title Why
#1329 OCPBUGS-70211: Fix logging for unmanaged controllers Prerequisite — conflicts with #1354's changes to gatewayclass/controller.go
#1354 NE-2471: Replace OLM-based Istio install with Sail Library Core change — adds istio_sail_installer.go, istio_olm.go refactor, migration.go, status.go, CRD manifests, Sail Library RBAC manifests
#1404 NE-2519: Move Sail Library to official release branch Moves from dev Sail Library branch to official OSSM 3.3.1 release

External dependency

Repo Branch Why
gcs278/api@backport-GatewayAPIWithoutOLM-4.21 GatewayAPIWithoutOLM feature gate definition (disabled in all profiles) CIO code references this gate — won't compile without it. Needs to be merged into openshift/api release-4.21 before this PR can land.

Conflicts resolved

  • pkg/operator/operator.go: Added GatewayAPIWithoutOLM gate alongside existing 4.21 gates (GatewayAPI, GatewayAPIController, RouteExternalCertificate)
  • pkg/operator/controller/status/controller.go: Took incoming noOLM logic (useOLM/useSailLibrary, conditional subscription listing) but wrapped in existing 4.21 GatewayAPIEnabled guard
  • test/e2e/gateway_api_test.go: Kept 4.21 gatewayAPIControllerEnabled guard, added gatewayAPIWithoutOLMEnabled conditionals inside for Sail Library vs OLM test selection. Kept xcrdNames alongside new istioCRDNames
  • go.mod / vendor: Added replace directives for openshift/api (fork with gate) and sail-operator (downstream fork with pkg/install)

Verification

  • go build ./pkg/operator/controller/gatewayclass/... compiles
  • go test ./pkg/operator/controller/gatewayclass/... passes
  • Full CI (blocked on openshift/api dependency)

🤖 Generated with Claude Code

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 commented May 8, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

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

Review profile: CHILL

Plan: Enterprise

Run ID: fbed4ebb-74e5-4d76-896f-a08fdf1025f7

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

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

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

@gcs278 gcs278 changed the title NE-2471: Backport noOLM / Sail Library to release-4.21 (gate OFF) [WIP] [TEST POC] NE-2471: Backport noOLM / Sail Library to release-4.21 May 8, 2026
@gcs278 gcs278 force-pushed the backport-noOLM-4.21 branch 7 times, most recently from c647f7b to b47ed5e Compare May 15, 2026 02:00
@gcs278

gcs278 commented May 29, 2026

Copy link
Copy Markdown
Contributor Author

No longer pursuing this
/close

@openshift-ci openshift-ci Bot added the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label May 29, 2026
@openshift-ci openshift-ci Bot closed this May 29, 2026
@openshift-ci

openshift-ci Bot commented May 29, 2026

Copy link
Copy Markdown
Contributor

@gcs278: Closed this PR.

Details

In response to this:

No longer pursuing this
/close

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.

@gcs278

gcs278 commented Jun 1, 2026

Copy link
Copy Markdown
Contributor Author

Some new information makes this backport attractive again.
/reopen

@openshift-ci openshift-ci Bot reopened this Jun 1, 2026
@openshift-ci

openshift-ci Bot commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

@gcs278: Reopened this PR.

Details

In response to this:

Some new information makes this backport attractive again.
/reopen

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.

@gcs278 gcs278 force-pushed the backport-noOLM-4.21 branch from b47ed5e to af43e28 Compare June 1, 2026 16:16
@openshift-ci openshift-ci Bot removed the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Jun 1, 2026
@gcs278 gcs278 force-pushed the backport-noOLM-4.21 branch 3 times, most recently from 530e487 to 96ad9e5 Compare June 1, 2026 16:58
@gcs278 gcs278 changed the title [WIP] [TEST POC] NE-2471: Backport noOLM / Sail Library to release-4.21 [WIP] NE-2471: Backport noOLM / Sail Library to release-4.21 Jun 1, 2026
@gcs278

gcs278 commented Jun 1, 2026

Copy link
Copy Markdown
Contributor Author

/test ?

@gcs278

gcs278 commented Jun 1, 2026

Copy link
Copy Markdown
Contributor Author

i manually pullled in #1444 for now - because we need to bump to istio 1.28.5, and might as well bump the GWAPI CRDs

/test e2e-aws-operator-techpreview

@gcs278 gcs278 force-pushed the backport-noOLM-4.21 branch 2 times, most recently from 9b7956c to 9df9dba Compare June 2, 2026 02:35
# with permissions that CIO itself holds.
#
# TODO - Future Improvements:
# 1. Consider removing 'escalate' and instead explicitly grant istiod the exact

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.

we need to consider if we want to implement the fix for this escalate before the backport, or if we will backport the fix later. Anyway it would be good to keep a track on it

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Yea I agree. I wouldn't block the backports on it, but we can keep an eye.

)

// ensureOSSMtoSailLibraryMigration handles the upgrade migration from OLM-based
// Istio installation (4.21) to Helm-based installation via Sail Library (4.22).

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.

nit: (maybe you fixed on a followup commit) - this comment is now wrong, given we are doing the migration also on 4.21

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.

ah ignore it, it is already fixed. I will first review commit by commit and then the big one picture

Comment thread pkg/log/log.go
// Build a zap development logger.
zapLogger, err := zap.NewDevelopment(zap.AddCallerSkip(1), zap.AddStacktrace(zap.FatalLevel))
// Build a zap development logger with INFO level.
config := zap.NewDevelopmentConfig()

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.

just a request for @rhamini3 and @melvinjoseph86 when doing the verify, take a look into CIO logs to see if they are being too verbose. I remember we have set this because sail library was issuing a debug message every X seconds, but I think this does not break anything

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Good point - verification will need to verify all of the bug fixes we are pulling it along with this including this one.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

sounds good, let me know when its ready @gcs278

metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

const (

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.

more a side comment, we will also backport the orphan subscription condition IIRC right? But this should be a future plan

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Yep I think so - @aswinsuryan FYI. It would be really nice to have the alert/condition at the same time we merge this, but I wouldn't block these backports over it.

state.unmanagedGatewayAPICRDNames = extension.UnmanagedGatewayAPICRDNames
}

if r.config.GatewayAPIControllerEnabled && r.config.MarketplaceEnabled && r.config.OperatorLifecycleManagerEnabled {

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.

I think on this version you still need the guard of r.config.GatewayAPIControllerEnabled, don't you?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Good catch - yes, technically it wouldn't be an issue as this feature gate is now GA and the result of dropping this is always running this Gateway API logic, but best to be consistent.

Comment thread go.mod Outdated
k8s.io/client-go v0.34.3
k8s.io/utils v0.0.0-20250820121507-0af2bda4dd1d
sigs.k8s.io/controller-runtime v0.22.5
sigs.k8s.io/gateway-api v1.4.1

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.

more like a nitpick'ish, but even you doing replace on the bottom, usually people come to go.mod (myself included) trying to figure out which Gateway API was used and will not roll down to the end of the file.

Maybe for these backports, add a comment that this may not be the real version and it may be replaced on the bottom of the file?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Happy to do that, it may trigger more merge conflicts in backports of the go.mod for future backports, but backports to the go.mod always conflict anyways.

gcs278 added 7 commits June 3, 2026 16:55
Cherry-picked from: ed2eb36
openshift#1354

Conflicts resolved:
- pkg/operator/controller/status/controller.go: Took incoming noOLM logic
  (useOLM/useSailLibrary, conditional subscription listing) but wrapped in
  existing 4.21 GatewayAPIEnabled guard. Restored GatewayAPIControllerEnabled
  guard that was present in the original condition but dropped during
  cherry-pick.
Cherry-picked from: 9c4d792
openshift#1354

Conflicts resolved:
- test/e2e/gateway_api_test.go: Kept 4.21 gatewayAPIControllerEnabled guard,
  added gatewayAPIWithoutOLMEnabled conditionals inside it. Kept xcrdNames
  alongside new istioCRDNames. Removed testCRDNames declaration since it
  was subsequently added to release-4.21 via PR openshift#1446.
- Removed references to testGatewayAPIInfrastructureAnnotations,
  testGatewayAPIInternalLoadBalancer, and testGatewayOpenshiftConditions
  which were added in separate PRs not present on release-4.21.
Cherry-picked from: 43c978a
openshift#1404

Conflicts resolved:
- go.mod: Aslak's development branch introduced transitive dependencies
  that diverged from release-4.21. Reset go.mod to the release-4.21
  baseline, then added only the openshift-service-mesh/sail-operator
  replace directive and bumped gateway-api to v1.4.1.
@gcs278 gcs278 force-pushed the backport-noOLM-4.21 branch from 6a8043c to 12879f2 Compare June 3, 2026 21:11
@openshift-ci

openshift-ci Bot commented Jun 3, 2026

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is NOT APPROVED

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

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

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

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

@gcs278

gcs278 commented Jun 3, 2026

Copy link
Copy Markdown
Contributor Author

Updates from @rikatz review:

Diff: https://github.com/openshift/cluster-ingress-operator/compare/6a8043c05f2de088161edd69b364196dc999e7a7..12879f2ea

@gcs278 gcs278 changed the title NE-2471: Backport noOLM / Sail Library to release-4.21 [release-4.21] NE-2471: Backport noOLM / Sail Library to release-4.21 Jun 3, 2026
@gcs278

gcs278 commented Jun 3, 2026

Copy link
Copy Markdown
Contributor Author

/testwith openshift/cluster-ingress-operator/release-4.21/e2e-aws-operator-techpreview openshift/api#2873

@gcs278

gcs278 commented Jun 3, 2026

Copy link
Copy Markdown
Contributor Author

/testwith openshift/cluster-ingress-operator/release-4.21/e2e-aws-ovn-techpreview openshift/api#2873 openshift/origin#31232

@openshift-ci

openshift-ci Bot commented Jun 4, 2026

Copy link
Copy Markdown
Contributor

@gcs278: 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-aws-ovn-hypershift-conformance 12879f2 link true /test e2e-aws-ovn-hypershift-conformance
ci/prow/e2e-aws-pre-release-ossm 12879f2 link false /test e2e-aws-pre-release-ossm

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.

@gcs278 gcs278 changed the title [release-4.21] NE-2471: Backport noOLM / Sail Library to release-4.21 [release-4.21] OCPBUGS-XXXXX: Backport noOLM / Sail Library to release-4.21 Jun 5, 2026
@openshift-ci-robot

Copy link
Copy Markdown
Contributor

@gcs278: No Jira issue is referenced in the title of this pull request.
To reference a jira issue, add 'XYZ-NNN:' to the title of this pull request and request another refresh with /jira refresh.

Details

In response to this:

Summary

Backport of the noOLM / Sail Library installation path (NE-2286, shipped in 4.22) to release-4.21. This resolves several fundamental OLM bugs that have no viable OLM-based workaround — most critically OCPBUGS-86778, which blocks all OSSM z-stream upgrades and prevents shipping CVE fixes.

This PR is intended to merge with the GatewayAPIWithoutOLM feature gate disabled, making it a no-op on merge. The goal is to subsequently enable the gate by default (via openshift/api) to activate the Sail Library path and resolve the OLM issues.

Cherry-picked PRs

PR Title Why
#1354 NE-2471: Replace OLM-based Istio install with Sail Library Core change — adds istio_sail_installer.go, istio_olm.go refactor, migration.go, status.go, CRD manifests, Sail Library RBAC manifests
#1402 OCPBUGS-79467: Change default log level from DEBUG to INFO Sail Library generates ~2,000 debug logs/hour; without this fix, enabling noOLM floods the logs. Only the log level change (commit 1) is cherry-picked; commit 2 references code not present on 4.21.
#1404 NE-2519: Move Sail Library to official release branch Moves from dev Sail Library branch to official OSSM 3.3.1 release

Note: #1393 (OCPBUGS-79667: Use feature-gate annotation for Sail Library RBAC) was also a dependency but is being skipped because CVO on this release does not support the release.openshift.io/feature-gate annotation (openshift/cluster-version-operator#1273 was not backported). As a result, the Sail Library RBAC manifests use the release.openshift.io/feature-set annotation and a separate PR will be needed to remove this annotation before promoting the feature gate to GA.

Versioning

This backport does not bump the Gateway API CRDs (remain at v1.3.0) or the Istio version (remains at v1.27.3) for the noOLM code path. When the GatewayAPIWithoutOLM feature gate is enabled, the Sail Library will install Istio using the same v1.27.3 version that the OLM path currently uses. This works because the vendored Sail Library (OSSM 3.3.1) still supports Istio 1.27.3.

The GWAPI CRD bump to v1.4.1 and Istio version bump to v1.28.5 will follow separately via #1444, allowing us to validate the noOLM path independently from the version changes.

When noOLM shipped in 4.22, the OLM and noOLM versions were already aligned at 3.3.1, so version separation was not needed. On 4.21, the OLM path is on 3.2.0 — keeping both paths at the same Istio version avoids introducing conditional logic or separate deployment manifests in the backport.

Conflicts resolved

  • pkg/operator/operator.go: Added GatewayAPIWithoutOLM gate alongside existing 4.21 gates (GatewayAPI, GatewayAPIController, RouteExternalCertificate)
  • pkg/operator/controller/status/controller.go: Took incoming noOLM logic (useOLM/useSailLibrary, conditional subscription listing) but wrapped in existing 4.21 GatewayAPIEnabled guard
  • test/e2e/gateway_api_test.go: Kept 4.21 gatewayAPIControllerEnabled guard, added gatewayAPIWithoutOLMEnabled conditionals inside for Sail Library vs OLM test selection. Kept xcrdNames alongside new istioCRDNames. Removed references to testGatewayAPIInfrastructureAnnotations, testGatewayAPIInternalLoadBalancer, and testGatewayOpenshiftConditions which were added in separate PRs not present on release-4.21.
  • go.mod / vendor**: Added replace directives for openshift/api (fork with gate) and sail-operator (downstream fork with pkg/install)
  • pkg/operator/controller/canary/daemonset.go (OCPBUGS-79467: Change default log level from DEBUG to INFO #1402 commit 2): Skipped — references canary cert hash variables not present on 4.21

Rollout Plan

Phase 1 — Land code (gate OFF)

Phase 2 — TechPreview soak

Phase 3 — GA promotion

Follow-up

Go Dependency Updates

Transitive dependency changes

The sail-operator (OSSM 3.3.1) brings in new transitive dependencies for Helm chart rendering (helm.sh/helm/v3), Istio utility libraries (istio.io/istio/pkg/log, pkg/ptr, pkg/slices, pkg/util/sets), and their dependency chains. These are all indirect — vendored but not imported by CIO code directly. k8s modules received a patch bump (0.34.1 → 0.34.3) from go mod tidy. Both are low risk.

controller-runtime (pinned: v0.22.5 → v0.21.0)

The sail-operator requires controller-runtime v0.22.5, but we pin back to v0.21.0 — the version CIO's own code was built and tested against on 4.21. CIO's core controller logic (client, cache, manager, controller wiring) is unchanged and continues to run against the same controller-runtime it shipped with. The sail library's install package only uses basic client.Client operations (New, Get, Create, Update) and pkg/log — all unchanged since controller-runtime v0.1. No other vendored dependency calls controller-runtime APIs.

On 4.21, this pin is not strictly required since 4.21 is already on k8s 0.34 and a patch bump poses no compatibility risk. However, on 4.20 and 4.19 the pin is essential because controller-runtime 0.22 would force a k8s minor version bump, causing incompatibilities with the frozen openshift ecosystem packages (client-go, library-go). Pinning here maintains a consistent approach across all three backport branches.

gateway-api (pinned: v1.4.1 → v1.3.0)

The sail-operator pulls in gateway-api v1.4.1, but we pin back to v1.3.0 (the original 4.21 version). The CRD manifests shipped in this release are v1.3.0, and the Go types are forward-compatible. Pinning keeps the vendored types aligned with the CRDs installed on the cluster.

Verification

  • go build ./pkg/operator/controller/gatewayclass/... compiles
  • go test ./pkg/operator/controller/gatewayclass/... passes
  • Full CI (blocked on openshift/api dependency)

🤖 Generated with Claude Code

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 removed the jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. label Jun 5, 2026
@gcs278

gcs278 commented Jun 9, 2026

Copy link
Copy Markdown
Contributor Author

Sorry I think we forgot to assign Aswin to this one
/assign @aswinsuryan

@openshift-ci

openshift-ci Bot commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

@gcs278: GitHub didn't allow me to assign the following users: aswinsuryan.

Note that only openshift members with read permissions, repo collaborators and people who have commented on this issue/PR can be assigned. Additionally, issues/PRs can only have 10 assignees at the same time.
For more information please see the contributor guide

Details

In response to this:

Sorry I think we forgot to assign Aswin to this one
/assign @aswinsuryan

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.

}); err != nil {
return reconcile.Result{}, fmt.Errorf("failed to list gateway classes: %w", err)
}
if countActiveGatewayClasses(&gatewayClassList, gatewayClass.Name) == 0 {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Could there be a race here, where a new GatewayClass adds its finalizer after countActiveGatewayClasses() returns zero but before Uninstall() completes, causing the new class to require an Istio instance that was just removed?

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants