Skip to content

Migrate aescbc to ote - #2115

Draft
gangwgr wants to merge 3 commits into
openshift:mainfrom
gangwgr:migrate-aescbc-clean
Draft

Migrate aescbc to ote#2115
gangwgr wants to merge 3 commits into
openshift:mainfrom
gangwgr:migrate-aescbc-clean

Conversation

@gangwgr

@gangwgr gangwgr commented Apr 21, 2026

Copy link
Copy Markdown
Contributor

Summary by CodeRabbit

  • Tests
    • Refactored encryption tests to use a shared helper and added a new serial e2e encryption scenario; documented transitional execution across test frameworks.
    • Improved bound SA token test reliability: increased timeout to 120m, require continuous 5‑minute cluster stability, wait for token key propagation plus an extra kubelet grace period, and use a retrying, prioritized pod-bounce flow with per-pod rate limits/max retries and timeout error reporting.

@openshift-ci

openshift-ci Bot commented Apr 21, 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 do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Apr 21, 2026
@openshift-ci

openshift-ci Bot commented Apr 21, 2026

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: gangwgr

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

The pull request process is described here

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

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

@openshift-ci openshift-ci Bot added the approved Indicates a PR has been approved by an approver from all required OWNERS files. label Apr 21, 2026
@coderabbitai

coderabbitai Bot commented Apr 21, 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

Delegates AES‑CBC encryption test to a shared helper and adds a Ginkgo suite; rewrites the bound SA token e2e test to require continuous ClusterOperator stability, wait for SA token key propagation and kubelet refresh, and replace single pod-bounce with a retry-capable, rate‑limited bounce mechanism.

Changes

Cohort / File(s) Summary
Encryption tests
test/e2e/encryption_test.go, test/e2e/encryption.go
TestEncryptionTypeAESCBC now delegates to testEncryptionTypeAESCBC(t). Added a Ginkgo e2e suite in encryption.go that builds a library.BasicScenario and forwards to library-go; removed direct construction/deps from the original test file.
Bound SA token test
test/e2e/bound_sa_token.go
Increased test timeout (90m→120m). Replace single stability check with waitForExtendedClusterStability (continuous 5m). After signing key rotation and deferred cleanup, wait for SA token signing public-key ConfigMap propagation via waitForSATokenKeysOnAllNodes, sleep an additional kubelet refresh grace period (5m), and use bounceCrashLoopingPodsWithRetry (namespace prioritization, min-interval per pod, max-bounce counts, polling until healthy or timeout). Bounce timeouts now return errors instead of only logging.

Sequence Diagram(s)

sequenceDiagram
    participant Test as Test Runner
    participant Cluster as ClusterOperators
    participant ConfigMap as SA Token ConfigMap
    participant Kubelet as Kubelets
    participant Pods as Pods

    Test->>Cluster: waitForExtendedClusterStability(5m)
    Cluster-->>Test: sustained stable conditions

    Test->>ConfigMap: waitForSATokenKeysOnAllNodes()
    ConfigMap-->>Test: ConfigMap exists with keys and stable resourceVersion

    Test->>Kubelet: sleep kubeletTokenRefreshGracePeriod (5m)
    Kubelet-->>Test: grace period elapsed

    rect rgba(200,100,100,0.5)
    Test->>Pods: bounceCrashLoopingPodsWithRetry(timeout)
    Pods-->>Test: list crash-looping pods with restart counts
    Test->>Pods: delete eligible pods (namespace-prioritized, rate-limited, max-bounces)
    Pods-->>Test: pods restart/recover
    Test->>Pods: repeat until healthy or timeout
    end

    Test->>ConfigMap: verify ConfigMap rollout/cleanup
    ConfigMap-->>Test: keys present on all nodes
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

🚥 Pre-merge checks | ✅ 10 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Microshift Test Compatibility ⚠️ Warning New test TestEncryptionTypeAESCBC references openshift-kube-apiserver namespace which is unavailable on MicroShift and lacks protective mechanisms. Add [Skipped:MicroShift] label to test, or add runtime IsMicroShiftCluster() check with Skip() in test body.
Single Node Openshift (Sno) Test Compatibility ❓ Inconclusive Unable to fully review the new encryption.go and encryption_test.go test files to verify SNO compatibility due to file access limitations. Cannot definitively assess whether tests contain multi-node assumptions or SNO compatibility guards. Provide complete test file content or run SNO-specific CI validation to confirm the new Ginkgo e2e tests are compatible with Single Node OpenShift clusters.
✅ Passed checks (10 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'Migrate aescbc to ote' directly corresponds to the main objective of the pull request, which migrates encryption type AESCBC testing to OTE (OpenShift Tenant Environment) execution.
Docstring Coverage ✅ Passed Docstring coverage is 92.31% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Stable And Deterministic Test Names ✅ Passed All Ginkgo test names use static, deterministic strings without dynamic content; dynamic values are correctly placed in test bodies.
Test Structure And Quality ✅ Passed Test files implement proper Ginkgo and standard Go test patterns with timeout extensions to 120 minutes, defer cleanup statements, and comprehensive helper functions using context.WithTimeout.
Topology-Aware Scheduling Compatibility ✅ Passed Pull request modifies only e2e test files with test infrastructure enhancements and no changes to deployment manifests, operator code, or workload scheduling constraints.
Ote Binary Stdout Contract ✅ Passed Pull request introduces three test files fully compliant with OTE Binary Stdout Contract. All fmt usage is safe; test logic resides in Ginkgo It() blocks.
Ipv6 And Disconnected Network Test Compatibility ✅ Passed The new Ginkgo e2e test and modified helper functions contain no IPv4 assumptions or external connectivity requirements.

✏️ 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.

@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: 1

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

Inline comments:
In `@test/e2e/encryption_test.go`:
- Line 13: The call to testEncryptionTypeAESCBC(t) is undefined; add a
package-scope helper with the exact signature func testEncryptionTypeAESCBC(t
*testing.T) in the same package so the call compiles, or change the call to an
existing symbol if one already exists; implement the helper to accept
*testing.T, call t.Helper(), and perform the prior test logic (or delegate to
the existing test implementation) so the invocation resolves.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

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

ℹ️ Review info
⚙️ Run configuration

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

Review profile: CHILL

Plan: Pro Plus

Run ID: f2543868-b5ac-46d3-aece-7f5bb922866c

📥 Commits

Reviewing files that changed from the base of the PR and between df4cff1 and a062ea3.

📒 Files selected for processing (1)
  • test/e2e/encryption_test.go

TargetGRs: operatorencryption.DefaultTargetGRs,
AssertFunc: operatorencryption.AssertSecretsAndConfigMaps,
})
testEncryptionTypeAESCBC(t)

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

Build blocker: undefined helper invocation.

Line 13 calls testEncryptionTypeAESCBC(t), but typecheck reports this symbol as undefined in package test/e2e. This will fail compilation of test/e2e.test. Please add/restore the helper in this package scope (or call the correct existing symbol).

🧰 Tools
🪛 golangci-lint (2.11.4)

[error] 13-13: : # github.com/openshift/cluster-kube-apiserver-operator/test/e2e [github.com/openshift/cluster-kube-apiserver-operator/test/e2e.test]
test/e2e/encryption_test.go:13:2: undefined: testEncryptionTypeAESCBC

(typecheck)

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

In `@test/e2e/encryption_test.go` at line 13, The call to
testEncryptionTypeAESCBC(t) is undefined; add a package-scope helper with the
exact signature func testEncryptionTypeAESCBC(t *testing.T) in the same package
so the call compiles, or change the call to an existing symbol if one already
exists; implement the helper to accept *testing.T, call t.Helper(), and perform
the prior test logic (or delegate to the existing test implementation) so the
invocation resolves.

@gangwgr
gangwgr force-pushed the migrate-aescbc-clean branch from a062ea3 to d417fa6 Compare April 21, 2026 05:05
@openshift-ci openshift-ci Bot added the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Apr 21, 2026
@gangwgr
gangwgr force-pushed the migrate-aescbc-clean branch from d417fa6 to 59ef132 Compare April 21, 2026 05:14
@openshift-ci openshift-ci Bot removed the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Apr 21, 2026

@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: 1

🧹 Nitpick comments (2)
test/e2e/bound_sa_token.go (2)

250-276: require.NoError in deferred cleanup can mask the original test failure.

Using require.NoError inside a deferred function will call t.FailNow() if cleanup fails, which can mask the original test failure reason. Consider logging errors instead of failing, or using assert.NoError which doesn't stop execution.

♻️ Suggested approach for cleanup resilience
 	defer func() {
 		t.Log("cleaning up: deleting public key configmap (triggers third rollout)")
 		err := kubeClient.ConfigMaps(targetNamespace).Delete(ctx, tokenctl.PublicKeyConfigMapName, metav1.DeleteOptions{})
-		require.NoError(t, err)
+		if err != nil && !apierrors.IsNotFound(err) {
+			t.Logf("cleanup warning: failed to delete configmap: %v", err)
+			return // Skip remaining cleanup steps
+		}

 		t.Log("waiting for kube-apiserver pods to stabilize after cleanup rollout")
 		err = libgotest.WaitForPodsToStabilizeOnTheSameRevision(t, kubeClient.Pods(targetNamespace), "apiserver=true",
 			rolloutSuccessThreshold, rolloutSuccessInterval, rolloutPollInterval, rolloutTimeout)
-		require.NoError(t, err)
+		if err != nil {
+			t.Logf("cleanup warning: pods did not stabilize: %v", err)
+		}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@test/e2e/bound_sa_token.go` around lines 250 - 276, The deferred cleanup
currently uses require.NoError in the anonymous defer func (calls to
require.NoError for kubeClient.ConfigMaps(...).Delete,
WaitForPodsToStabilizeOnTheSameRevision, waitForSATokenKeysOnAllNodes,
bounceCrashLoopingPodsWithRetry, waitForAllClusterOperatorsStable), which can
call t.FailNow() and hide the original test failure; change those
require.NoError calls to non-fatal handling (e.g., replace with assert.NoError
from testify or log the error with t.Errorf/t.Logf) so cleanup errors are
reported but do not abort/override the original test result, keeping the same
calls and context names (defer func, kubeClient.ConfigMaps,
WaitForPodsToStabilizeOnTheSameRevision, waitForSATokenKeysOnAllNodes,
bounceCrashLoopingPodsWithRetry, waitForAllClusterOperatorsStable).

375-397: Consider using a set for priority namespace lookup efficiency.

The priority namespace list is checked in an O(n) loop on lines 405-414 for each namespace. While acceptable for the current small list size, a map-based set would be cleaner.

♻️ Optional: Use a set for O(1) lookup
 		// Process namespaces in priority order: operators first, then infrastructure
 		priorityNamespaces := []string{
 			"openshift-kube-apiserver-operator",
 			// ... other namespaces
 		}
+		prioritySet := make(map[string]struct{}, len(priorityNamespaces))
+		for _, ns := range priorityNamespaces {
+			prioritySet[ns] = struct{}{}
+		}

 		// First pass: bounce high-priority operator namespaces
 		// ...

 		// Second pass: bounce remaining openshift-* namespaces
 		for _, ns := range namespaces.Items {
 			if !strings.HasPrefix(ns.Name, "openshift-") {
 				continue
 			}
-			// Skip if already processed in priority pass
-			isPriority := false
-			for _, pns := range priorityNamespaces {
-				if ns.Name == pns {
-					isPriority = true
-					break
-				}
-			}
-			if isPriority {
+			if _, isPriority := prioritySet[ns.Name]; isPriority {
 				continue
 			}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@test/e2e/bound_sa_token.go` around lines 375 - 397, Replace the hard-coded
slice priorityNamespaces with a map-based set (e.g., map[string]struct{}) or
build a set from that slice and use the set for membership checks and iteration
where you need O(1) lookups; update the loop that currently iterates
priorityNamespaces (which calls bouncePodsInNamespace(ctx, t, kubeClient,
nsName, bouncedPods, minTimeBetweenBounces)) to iterate over the set or use the
set when testing namespace membership elsewhere in the file so lookups are
constant-time while preserving the same namespaces and behavior.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@test/e2e/encryption.go`:
- Around line 20-29: The function testEncryptionTypeAESCBC currently performs an
unsafe type assertion on t (testing.TB) to *testing.T before calling
library.TestEncryptionTypeAESCBC; remove the cast and pass t directly to
library.TestEncryptionTypeAESCBC so the call uses the testing.TB interface (this
avoids panics when t is a ginkgo.GinkgoTBWrapper). Update the invocation in
testEncryptionTypeAESCBC to call library.TestEncryptionTypeAESCBC(t, ...)
without the type assertion.

---

Nitpick comments:
In `@test/e2e/bound_sa_token.go`:
- Around line 250-276: The deferred cleanup currently uses require.NoError in
the anonymous defer func (calls to require.NoError for
kubeClient.ConfigMaps(...).Delete, WaitForPodsToStabilizeOnTheSameRevision,
waitForSATokenKeysOnAllNodes, bounceCrashLoopingPodsWithRetry,
waitForAllClusterOperatorsStable), which can call t.FailNow() and hide the
original test failure; change those require.NoError calls to non-fatal handling
(e.g., replace with assert.NoError from testify or log the error with
t.Errorf/t.Logf) so cleanup errors are reported but do not abort/override the
original test result, keeping the same calls and context names (defer func,
kubeClient.ConfigMaps, WaitForPodsToStabilizeOnTheSameRevision,
waitForSATokenKeysOnAllNodes, bounceCrashLoopingPodsWithRetry,
waitForAllClusterOperatorsStable).
- Around line 375-397: Replace the hard-coded slice priorityNamespaces with a
map-based set (e.g., map[string]struct{}) or build a set from that slice and use
the set for membership checks and iteration where you need O(1) lookups; update
the loop that currently iterates priorityNamespaces (which calls
bouncePodsInNamespace(ctx, t, kubeClient, nsName, bouncedPods,
minTimeBetweenBounces)) to iterate over the set or use the set when testing
namespace membership elsewhere in the file so lookups are constant-time while
preserving the same namespaces and behavior.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

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

ℹ️ Review info
⚙️ Run configuration

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

Review profile: CHILL

Plan: Pro Plus

Run ID: ff70610d-6481-4e36-a0d3-f521fb8b180b

📥 Commits

Reviewing files that changed from the base of the PR and between a062ea3 and 59ef132.

📒 Files selected for processing (3)
  • test/e2e/bound_sa_token.go
  • test/e2e/encryption.go
  • test/e2e/encryption_test.go
🚧 Files skipped from review as they are similar to previous changes (1)
  • test/e2e/encryption_test.go

Comment thread test/e2e/encryption.go
@gangwgr

gangwgr commented Apr 21, 2026

Copy link
Copy Markdown
Contributor Author

/pipeline required

@gangwgr

gangwgr commented Apr 21, 2026

Copy link
Copy Markdown
Contributor Author

/pipeline-required

@gangwgr

gangwgr commented Apr 21, 2026

Copy link
Copy Markdown
Contributor Author

/test e2e-gcp-operator-serial-ote

@gangwgr

gangwgr commented Apr 21, 2026

Copy link
Copy Markdown
Contributor Author

/test e2e-gcp-operator-serial-ote

1 similar comment
@gangwgr

gangwgr commented Apr 23, 2026

Copy link
Copy Markdown
Contributor Author

/test e2e-gcp-operator-serial-ote

@gangwgr
gangwgr force-pushed the migrate-aescbc-clean branch from dcbcf83 to 6e6fbda Compare April 24, 2026 04:18
@gangwgr

gangwgr commented Apr 24, 2026

Copy link
Copy Markdown
Contributor Author

/test e2e-gcp-operator-serial-ote

@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: 1

🧹 Nitpick comments (1)
test/e2e/bound_sa_token.go (1)

384-396: Consider extracting priority namespaces to a package-level constant.

The priority namespace list is well-chosen for operator stability. For maintainability, consider extracting this to a var at package level so it's easier to update and document.

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

In `@test/e2e/bound_sa_token.go` around lines 384 - 396, Extract the hard-coded
priorityNamespaces slice into a package-level variable (e.g. var
PriorityNamespaces = []string{...}) declared near the top of the test package
and replace the local declaration in bound_sa_token.go with a reference to
PriorityNamespaces; update any tests or functions that previously shadowed the
local name to use the package-level symbol and add a brief comment/docstring
explaining the purpose and ordering of PriorityNamespaces for maintainability.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@test/e2e/bound_sa_token.go`:
- Around line 617-620: The API error branch in the polling loop leaves
lastResourceVersion and stableStart unchanged, which can let a prior partial
stability interval be counted toward the 30s requirement; update the error
handling inside the block that checks "if err != nil" (in the function that
polls for bound SA token stability in bound_sa_token.go) to reset
lastResourceVersion (e.g., set to empty string) and stableStart (e.g., zero
time) when an API error occurs, mirroring the behavior in
waitForExtendedClusterStability, and keep the existing log/return behavior.

---

Nitpick comments:
In `@test/e2e/bound_sa_token.go`:
- Around line 384-396: Extract the hard-coded priorityNamespaces slice into a
package-level variable (e.g. var PriorityNamespaces = []string{...}) declared
near the top of the test package and replace the local declaration in
bound_sa_token.go with a reference to PriorityNamespaces; update any tests or
functions that previously shadowed the local name to use the package-level
symbol and add a brief comment/docstring explaining the purpose and ordering of
PriorityNamespaces for maintainability.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

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

ℹ️ Review info
⚙️ Run configuration

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

Review profile: CHILL

Plan: Enterprise

Run ID: 472df73f-1d34-4ae9-914b-44b416ba85c1

📥 Commits

Reviewing files that changed from the base of the PR and between dcbcf83 and 6e6fbda.

📒 Files selected for processing (1)
  • test/e2e/bound_sa_token.go

Comment on lines +617 to +620
if err != nil {
t.Logf("failed to get configmap %s/%s: %v", namespace, configMapName, err)
return false, nil
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Missing state reset on API error could incorrectly extend stability duration.

When an API error occurs, lastResourceVersion and stableStart are not reset. If the previous poll had partial stability progress, this error would be silently counted toward the 30-second stability requirement. Compare with waitForExtendedClusterStability which correctly resets stableStart on error (line 694).

🐛 Proposed fix
 		if err != nil {
 			t.Logf("failed to get configmap %s/%s: %v", namespace, configMapName, err)
+			lastResourceVersion = ""
+			stableStart = time.Time{}
 			return false, nil
 		}
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
if err != nil {
t.Logf("failed to get configmap %s/%s: %v", namespace, configMapName, err)
return false, nil
}
if err != nil {
t.Logf("failed to get configmap %s/%s: %v", namespace, configMapName, err)
lastResourceVersion = ""
stableStart = time.Time{}
return false, nil
}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@test/e2e/bound_sa_token.go` around lines 617 - 620, The API error branch in
the polling loop leaves lastResourceVersion and stableStart unchanged, which can
let a prior partial stability interval be counted toward the 30s requirement;
update the error handling inside the block that checks "if err != nil" (in the
function that polls for bound SA token stability in bound_sa_token.go) to reset
lastResourceVersion (e.g., set to empty string) and stableStart (e.g., zero
time) when an API error occurs, mirroring the behavior in
waitForExtendedClusterStability, and keep the existing log/return behavior.

@gangwgr

gangwgr commented Apr 24, 2026

Copy link
Copy Markdown
Contributor Author

/test e2e-gcp-operator-serial-ote

@gangwgr

gangwgr commented Apr 24, 2026

Copy link
Copy Markdown
Contributor Author

/test e2e-gcp-operator-serial-ote

@gangwgr
gangwgr force-pushed the migrate-aescbc-clean branch from 9872fde to 872d874 Compare April 27, 2026 05:31
@gangwgr

gangwgr commented Apr 27, 2026

Copy link
Copy Markdown
Contributor Author

/test e2e-gcp-operator-serial-ote

1 similar comment
@gangwgr

gangwgr commented Apr 27, 2026

Copy link
Copy Markdown
Contributor Author

/test e2e-gcp-operator-serial-ote

@openshift-ci

openshift-ci Bot commented Apr 27, 2026

Copy link
Copy Markdown
Contributor

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

Test name Commit Details Required Rerun command
ci/prow/e2e-gcp-operator-serial-ote 872d874 link true /test e2e-gcp-operator-serial-ote

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-ci openshift-ci Bot added the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Apr 27, 2026
@openshift-ci

openshift-ci Bot commented Apr 27, 2026

Copy link
Copy Markdown
Contributor

PR needs rebase.

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.

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

Labels

approved Indicates a PR has been approved by an approver from all required OWNERS files. do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant