Skip to content

NO-JIRA: E2E: Preserve CVO state when bypassing VAP#1368

Open
gcs278 wants to merge 1 commit intoopenshift:masterfrom
gcs278:e2e-preserve-cvo-replicas
Open

NO-JIRA: E2E: Preserve CVO state when bypassing VAP#1368
gcs278 wants to merge 1 commit intoopenshift:masterfrom
gcs278:e2e-preserve-cvo-replicas

Conversation

@gcs278
Copy link
Copy Markdown
Contributor

@gcs278 gcs278 commented Feb 27, 2026

Store and restore CVO's initial replica count instead of hardcoding 1. Fixes debugging workflows where CVO is intentionally disabled.

During debugging, I disable CVO so I can run custom builds of the ingress operator. If CVO gets re-enabled, it reverts my custom build and breaks my workflow.

@openshift-ci-robot openshift-ci-robot added the jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. label Feb 27, 2026
@openshift-ci-robot
Copy link
Copy Markdown
Contributor

@gcs278: This pull request explicitly references no jira issue.

Details

In response to this:

Store and restore CVO's initial replica count instead of hardcoding 1. Fixes debugging workflows where CVO is intentionally disabled.

During debugging, I disable CVO so I can run custom builds of the ingress operator. If CVO gets re-enabled, it reverts my custom build and breaks my workflow.

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository.

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Feb 27, 2026

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

Walkthrough

Adds a helper to read current CVO replica count and extends vapManager with initialCVOReplicas and savedVAP. In disable the CVO replicas are recorded, CVO is scaled to 0, an existing VAP (if any) is copied to savedVAP and deleted; on VAP deletion failure the CVO is rolled back to the recorded count. In enable a saved VAP is restored (clearing ResourceVersion, handling AlreadyExists) before scaling the CVO back to initialCVOReplicas.

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title 'NO-JIRA: E2E: Preserve CVO state when bypassing VAP' accurately describes the main change: preserving/storing CVO state rather than using hardcoded values.
Description check ✅ Passed The description clearly relates to the changeset by explaining the motivation for preserving CVO replicas and the debugging workflow that required this fix.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.

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

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Tip

Try Coding Plans. Let us write the prompt for your AI agent so you can ship faster (with fewer bugs).
Share your feedback on Discord.


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

@openshift-ci openshift-ci Bot requested review from knobunc and miheer February 27, 2026 19:06
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

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

Inline comments:
In `@test/e2e/util_gatewayapi_test.go`:
- Around line 1227-1231: When getCVOReplicas returns an error we currently
return (err, nil) which causes callers like bypassVAP to call defer recoverFn()
and panic; change the error return to provide a no-op recover function instead
of nil so callers can safely defer it. Update the call site in
test/e2e/util_gatewayapi_test.go where getCVOReplicas is invoked (the variable
names replicas, err, recoverFn) to return (err, func(){}) on error, matching the
other error path at line 1235 and avoiding a nil deferred function.

ℹ️ Review info

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Cache: Disabled due to data retention organization setting

Knowledge base: Disabled due to data retention organization setting

📥 Commits

Reviewing files that changed from the base of the PR and between add0516 and 4d34c26.

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

Comment thread test/e2e/util_gatewayapi_test.go
@gcs278 gcs278 force-pushed the e2e-preserve-cvo-replicas branch 2 times, most recently from 489d5f7 to 821191b Compare February 27, 2026 21:32
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

♻️ Duplicate comments (1)
test/e2e/util_gatewayapi_test.go (1)

1228-1233: ⚠️ Potential issue | 🔴 Critical

Fix panic path: do not return a nil recover function on error.

At Line 1231, return err, nil can still panic because bypassVAP defers recoverFn() when err != nil.

🐛 Proposed fix
 	replicas, err := getCVOReplicas(m.t)
 	if err != nil {
-		return err, nil
+		return err, func() {}
 	}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@test/e2e/util_gatewayapi_test.go` around lines 1228 - 1233, The panic occurs
because bypassVAP defers recoverFn() even when getCVOReplicas returns an error
and the code returns a nil recover function; change the error return to supply a
non-nil no-op recover function instead of nil (e.g. return err, func() {}), or
initialize a default no-op recover function before calling getCVOReplicas and
only replace it on success; reference getCVOReplicas and m.initialCVOReplicas to
locate the code to update.
🤖 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/util_gatewayapi_test.go`:
- Around line 1271-1286: The restored VAP object (m.savedVAP) must be
deep-copied and have all server-managed metadata cleared before calling
kclient.Create to avoid API rejections; replace the current single-field
mutation of ResourceVersion with a DeepCopy() of m.savedVAP and set metadata
fields such as UID, ResourceVersion, CreationTimestamp, Generation, SelfLink and
ManagedFields to empty/zero values (preserving any required labels/annotations
you intend to keep) then pass that sanitized copy to kclient.Create; ensure you
still log on success/failure as currently done.

---

Duplicate comments:
In `@test/e2e/util_gatewayapi_test.go`:
- Around line 1228-1233: The panic occurs because bypassVAP defers recoverFn()
even when getCVOReplicas returns an error and the code returns a nil recover
function; change the error return to supply a non-nil no-op recover function
instead of nil (e.g. return err, func() {}), or initialize a default no-op
recover function before calling getCVOReplicas and only replace it on success;
reference getCVOReplicas and m.initialCVOReplicas to locate the code to update.

ℹ️ Review info

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Cache: Disabled due to data retention organization setting

Knowledge base: Disabled due to data retention organization setting

📥 Commits

Reviewing files that changed from the base of the PR and between 3ea5e34 and 489d5f7.

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

Comment thread test/e2e/util_gatewayapi_test.go Outdated
Comment on lines 1271 to 1286
// Restore VAP if we saved it
if m.savedVAP != nil {
// Clear resource version to allow recreation
m.savedVAP.ResourceVersion = ""
if err := kclient.Create(context.Background(), m.savedVAP); err != nil {
if !kerrors.IsAlreadyExists(err) {
m.t.Errorf("failed to restore vap %q: %v", m.name, err)
}
} else {
m.t.Logf("Restored VAP %q", m.name)
}
}

// Scale CVO back up
if err := scaleDeployment(m.t, cvoNamespace, cvoDeploymentName, m.initialCVOReplicas); err != nil {
m.t.Errorf("failed to scale up cvo: %v", err)
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 | 🟠 Major

🧩 Analysis chain

🌐 Web query:

Kubernetes ValidatingAdmissionPolicy CREATE API requirements server-managed fields uid resourceVersion

💡 Result:

For a CREATE (POST /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicies) request, you should send a ValidatingAdmissionPolicy object that includes only client-settable fields. In particular:

Do not set metadata.uid or metadata.resourceVersion on CREATE

  • metadata.uid: Populated by the system, read-only (typically generated by the apiserver on successful creation). [3]
  • metadata.resourceVersion: Populated by the system, read-only (used for optimistic concurrency / change detection; treat as opaque). [3][4]

(Practically: omit them from your YAML/JSON; the apiserver returns them in the CREATE response.)

What you do need on CREATE (minimum)

  • apiVersion: admissionregistration.k8s.io/v1
  • kind: ValidatingAdmissionPolicy
  • metadata.name (cluster-scoped, so no namespace)
  • spec with at least:
    • spec.matchConstraints.resourceRules[] (each rule requires apiGroups, apiVersions, operations, resources) [2]
    • spec.validations[] with at least one item, and each item requires expression [2]
    • Also: Validations and auditAnnotations cannot both be empty (you need at least one of them). [2]
      Example shape is shown in the official docs. [1]

When resourceVersion is relevant

You typically supply metadata.resourceVersion when doing a full-object update (PUT) to avoid write conflicts (optimistic concurrency), not when creating a new object. [4]

Sources: [1] [2] [3] [4]


🌐 Web query:

Kubernetes ObjectMeta fields that must be cleared before Create() operation

💡 Result:

Before calling Create() (POST) you should clear/omit the apiserver-managed / read-only ObjectMeta fields (common when you “clone” an object you previously got from the API):

  • metadata.uid (system-generated; read-only) [2]
  • metadata.resourceVersion (system-populated; read-only) [2]
  • metadata.creationTimestamp (clients may not set; system-populated) [3]
  • metadata.deletionTimestamp (set by server during deletion; not directly settable by clients) [4]
  • metadata.deletionGracePeriodSeconds (read-only; only set along with deletionTimestamp) [4]
  • metadata.managedFields (tracked/managed by the apiserver; avoid setting) [5]
  • metadata.selfLink (legacy read-only field; no longer populated) [2]

Typically you keep metadata.name (or generateName), metadata.namespace, labels, annotations, finalizers, and ownerReferences as needed.

Sources: [2] [3] [4] [5]


Sanitize restored VAP metadata before Create to avoid API rejection.

At line 1274, only ResourceVersion is cleared. Kubernetes server-managed fields like uid, creationTimestamp, and managedFields must also be cleared before calling Create() on a fetched object—the API will reject them as invalid. This is especially critical when initial CVO replicas are 0, as the CVO won't be available to self-heal.

Use DeepCopy() to avoid mutating the original object, then clear all server-managed metadata:

🔧 Proposed fix
 	if m.savedVAP != nil {
-		// Clear resource version to allow recreation
-		m.savedVAP.ResourceVersion = ""
-		if err := kclient.Create(context.Background(), m.savedVAP); err != nil {
+		restored := m.savedVAP.DeepCopy()
+		restored.ResourceVersion = ""
+		restored.UID = ""
+		restored.CreationTimestamp = metav1.Time{}
+		restored.ManagedFields = nil
+		if err := kclient.Create(context.Background(), restored); err != nil {
 			if !kerrors.IsAlreadyExists(err) {
 				m.t.Errorf("failed to restore vap %q: %v", m.name, err)
 			}
 		} else {
 			m.t.Logf("Restored VAP %q", m.name)
 		}
 	}
📝 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
// Restore VAP if we saved it
if m.savedVAP != nil {
// Clear resource version to allow recreation
m.savedVAP.ResourceVersion = ""
if err := kclient.Create(context.Background(), m.savedVAP); err != nil {
if !kerrors.IsAlreadyExists(err) {
m.t.Errorf("failed to restore vap %q: %v", m.name, err)
}
} else {
m.t.Logf("Restored VAP %q", m.name)
}
}
// Scale CVO back up
if err := scaleDeployment(m.t, cvoNamespace, cvoDeploymentName, m.initialCVOReplicas); err != nil {
m.t.Errorf("failed to scale up cvo: %v", err)
// Restore VAP if we saved it
if m.savedVAP != nil {
restored := m.savedVAP.DeepCopy()
restored.ResourceVersion = ""
restored.UID = ""
restored.CreationTimestamp = metav1.Time{}
restored.ManagedFields = nil
if err := kclient.Create(context.Background(), restored); err != nil {
if !kerrors.IsAlreadyExists(err) {
m.t.Errorf("failed to restore vap %q: %v", m.name, err)
}
} else {
m.t.Logf("Restored VAP %q", m.name)
}
}
// Scale CVO back up
if err := scaleDeployment(m.t, cvoNamespace, cvoDeploymentName, m.initialCVOReplicas); err != nil {
m.t.Errorf("failed to scale up cvo: %v", err)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@test/e2e/util_gatewayapi_test.go` around lines 1271 - 1286, The restored VAP
object (m.savedVAP) must be deep-copied and have all server-managed metadata
cleared before calling kclient.Create to avoid API rejections; replace the
current single-field mutation of ResourceVersion with a DeepCopy() of m.savedVAP
and set metadata fields such as UID, ResourceVersion, CreationTimestamp,
Generation, SelfLink and ManagedFields to empty/zero values (preserving any
required labels/annotations you intend to keep) then pass that sanitized copy to
kclient.Create; ensure you still log on success/failure as currently done.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

♻️ Duplicate comments (1)
test/e2e/util_gatewayapi_test.go (1)

1271-1276: ⚠️ Potential issue | 🟠 Major

Sanitize full server-managed metadata before VAP Create (Line 1274).

Only clearing ResourceVersion is not enough when recreating an object fetched from the API. Server-managed metadata (UID, CreationTimestamp, ManagedFields, etc.) can cause Create rejection. This is especially risky when initialCVOReplicas == 0, because CVO won’t self-heal the VAP afterward.

🔧 Proposed fix
 func (m *vapManager) enable() {
 	// Restore VAP if we saved it
 	if m.savedVAP != nil {
-		// Clear resource version to allow recreation
-		m.savedVAP.ResourceVersion = ""
-		if err := kclient.Create(context.Background(), m.savedVAP); err != nil {
+		restored := m.savedVAP.DeepCopy()
+		restored.UID = ""
+		restored.ResourceVersion = ""
+		restored.CreationTimestamp = metav1.Time{}
+		restored.ManagedFields = nil
+		restored.Generation = 0
+		restored.SelfLink = ""
+		if err := kclient.Create(context.Background(), restored); err != nil {
 			if !kerrors.IsAlreadyExists(err) {
 				m.t.Errorf("failed to restore vap %q: %v", m.name, err)
 			}
 		} else {
 			m.t.Logf("Restored VAP %q", m.name)
 		}
 	}
For Kubernetes admissionregistration.k8s.io/v1 ValidatingAdmissionPolicy Create requests, which ObjectMeta fields are server-managed and should be cleared/omitted when recreating an object previously retrieved via GET?
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@test/e2e/util_gatewayapi_test.go` around lines 1271 - 1276, m.savedVAP
recreation fails because only ResourceVersion is cleared; you must strip all
server-managed ObjectMeta before calling kclient.Create (m.savedVAP) to avoid
admission/create rejections. Before the Create call, clear UID, ResourceVersion,
SelfLink, Generation, CreationTimestamp, and ManagedFields (and any other
server-populated metadata) on m.savedVAP.ObjectMeta or reconstruct ObjectMeta
preserving only client-managed bits like Name/Namespace/Labels/Annotations as
needed, then call kclient.Create(context.Background(), m.savedVAP).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Duplicate comments:
In `@test/e2e/util_gatewayapi_test.go`:
- Around line 1271-1276: m.savedVAP recreation fails because only
ResourceVersion is cleared; you must strip all server-managed ObjectMeta before
calling kclient.Create (m.savedVAP) to avoid admission/create rejections. Before
the Create call, clear UID, ResourceVersion, SelfLink, Generation,
CreationTimestamp, and ManagedFields (and any other server-populated metadata)
on m.savedVAP.ObjectMeta or reconstruct ObjectMeta preserving only
client-managed bits like Name/Namespace/Labels/Annotations as needed, then call
kclient.Create(context.Background(), m.savedVAP).

ℹ️ Review info

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Cache: Disabled due to data retention organization setting

Knowledge base: Disabled due to data retention organization setting

📥 Commits

Reviewing files that changed from the base of the PR and between 489d5f7 and 821191b.

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

@gcs278 gcs278 force-pushed the e2e-preserve-cvo-replicas branch 3 times, most recently from e35f1e3 to 2b7a564 Compare February 27, 2026 22:19
Comment thread test/e2e/util_gatewayapi_test.go Outdated
return 0, fmt.Errorf("failed to get cvo deployment: %w", err)
}

if cvo.Spec.Replicas != nil {
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.

a suggestion:

return ptr.Deref(cvo.Spec.Replicas, 1), nil

https://pkg.go.dev/k8s.io/utils/ptr#Deref

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.

Nice, done.

Comment thread test/e2e/util_gatewayapi_test.go Outdated
// Clear resource version to allow recreation
m.savedVAP.ResourceVersion = ""
if err := kclient.Create(context.Background(), m.savedVAP); err != nil {
if !kerrors.IsAlreadyExists(err) {
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.

if it exists, but you have for some reason updated in place, is the expectation not to restore to the original VAP?

Eg.: you try to create, something exists but it is not the saved VAP. Is this fine?

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 question. In theory, it should never be re-created after we deleted in the happy path, but there possibilities it might get re-create:

  1. Someone or something scaled back up the CVO
  2. Someone or something manually created the VAP

If # 1 happens, that's fine, we don't care if it fails to be created. If # 2 happens, well, that might be problematic, but that's also an existing issue with generally any test (it's problematic to re-create/modify/delete objects under test). So I don't feel strongly either way.

However, I am updating it to only recreate when m.initialCVOReplicas == 0, since we really don't need to re-create if we are re-enabling the CVO.

Comment thread test/e2e/util_gatewayapi_test.go Outdated
name := types.NamespacedName{Name: m.name}
if err := kclient.Get(context.Background(), name, vap); err != nil {
return fmt.Errorf("failed to get vap %q: %w", m.name, err), func() {
if err := scaleDeployment(m.t, cvoNamespace, cvoDeploymentName, m.initialCVOReplicas); err != nil {
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! :

given the returned function here is used also on the deleteExistingVap, would it make sense to do a common definition of it once after the definition of m.initialCVOReplicas and simply call 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.

Good idea, done.

@gcs278 gcs278 force-pushed the e2e-preserve-cvo-replicas branch from 2b7a564 to 31b7859 Compare March 2, 2026 21:43
Copy link
Copy Markdown
Contributor Author

@gcs278 gcs278 left a comment

Choose a reason for hiding this comment

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

Thanks for the review @rikatz.

Comment thread test/e2e/util_gatewayapi_test.go Outdated
return 0, fmt.Errorf("failed to get cvo deployment: %w", err)
}

if cvo.Spec.Replicas != nil {
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.

Nice, done.

Comment thread test/e2e/util_gatewayapi_test.go Outdated
// Clear resource version to allow recreation
m.savedVAP.ResourceVersion = ""
if err := kclient.Create(context.Background(), m.savedVAP); err != nil {
if !kerrors.IsAlreadyExists(err) {
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 question. In theory, it should never be re-created after we deleted in the happy path, but there possibilities it might get re-create:

  1. Someone or something scaled back up the CVO
  2. Someone or something manually created the VAP

If # 1 happens, that's fine, we don't care if it fails to be created. If # 2 happens, well, that might be problematic, but that's also an existing issue with generally any test (it's problematic to re-create/modify/delete objects under test). So I don't feel strongly either way.

However, I am updating it to only recreate when m.initialCVOReplicas == 0, since we really don't need to re-create if we are re-enabling the CVO.

Comment thread test/e2e/util_gatewayapi_test.go Outdated
name := types.NamespacedName{Name: m.name}
if err := kclient.Get(context.Background(), name, vap); err != nil {
return fmt.Errorf("failed to get vap %q: %w", m.name, err), func() {
if err := scaleDeployment(m.t, cvoNamespace, cvoDeploymentName, m.initialCVOReplicas); err != nil {
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 idea, done.

@rikatz
Copy link
Copy Markdown
Member

rikatz commented Mar 2, 2026

/lgtm
/approve
thanks @gcs278

@openshift-ci openshift-ci Bot added the lgtm Indicates that a PR is ready to be merged. label Mar 2, 2026
@openshift-ci
Copy link
Copy Markdown
Contributor

openshift-ci Bot commented Mar 2, 2026

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: rikatz

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

The pull request process is described here

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

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

@openshift-ci openshift-ci Bot added the approved Indicates a PR has been approved by an approver from all required OWNERS files. label Mar 2, 2026
@gcs278
Copy link
Copy Markdown
Contributor Author

gcs278 commented Mar 3, 2026

Finalizing some discussion in slack on this
/hold

@openshift-ci openshift-ci Bot added the do-not-merge/hold Indicates that a PR should not merge because someone has issued a /hold command. label Mar 3, 2026
@gcs278 gcs278 force-pushed the e2e-preserve-cvo-replicas branch from 31b7859 to 8069e1e Compare March 3, 2026 14:56
@openshift-ci openshift-ci Bot removed the lgtm Indicates that a PR is ready to be merged. label Mar 3, 2026
@openshift-ci
Copy link
Copy Markdown
Contributor

openshift-ci Bot commented Mar 3, 2026

New changes are detected. LGTM label has been removed.

Store and restore CVO's initial replica count instead of hardcoding 1.
Fixes debugging workflows where CVO is intentionally disabled.
@gcs278 gcs278 force-pushed the e2e-preserve-cvo-replicas branch from 8069e1e to 1de670d Compare March 3, 2026 14:58
@rikatz
Copy link
Copy Markdown
Member

rikatz commented Mar 3, 2026

/retest-required

@openshift-ci
Copy link
Copy Markdown
Contributor

openshift-ci Bot commented Mar 4, 2026

@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 1de670d link true /test e2e-aws-ovn-hypershift-conformance
ci/prow/e2e-hypershift 1de670d link true /test e2e-hypershift
ci/prow/e2e-vsphere-static-metallb-operator-gwapi 1de670d link false /test e2e-vsphere-static-metallb-operator-gwapi

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.

@rikatz
Copy link
Copy Markdown
Member

rikatz commented Mar 4, 2026

/assign @alebedev87

Copy link
Copy Markdown
Contributor

@alebedev87 alebedev87 left a comment

Choose a reason for hiding this comment

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

LGTM just one suggestion.

Comment on lines +1246 to +1250
vap := &admissionregistrationv1.ValidatingAdmissionPolicy{}
name := types.NamespacedName{Name: m.name}
if err := kclient.Get(context.Background(), name, vap); err != nil {
return fmt.Errorf("failed to get vap %q: %w", m.name, err), recoverCVO
}
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.

CVO's replicas is retrieved with a poll. For consistency and test resiliency we can do a polled Get here too.

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/hold Indicates that a PR should not merge because someone has issued a /hold command. jira/valid-reference Indicates that this PR references a valid Jira ticket of any type.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants