Skip to content

OCPBUGS-62177: revert CRR controller changes - #7784

Merged
openshift-merge-bot[bot] merged 2 commits into
openshift:mainfrom
sjenning:fix-crr-test
Feb 24, 2026
Merged

OCPBUGS-62177: revert CRR controller changes#7784
openshift-merge-bot[bot] merged 2 commits into
openshift:mainfrom
sjenning:fix-crr-test

Conversation

@sjenning

@sjenning sjenning commented Feb 23, 2026

Copy link
Copy Markdown
Contributor

Reverts #7405 and #7744

The introduction of this net new testcase in TestCreateClusterRequestServingIsolation has resulted in a ~50% flake rate.

https://testgrid.k8s.io/redhat-hypershift#4.21-aws-ovn&width=20


Note

Medium Risk
Touches certificate revocation gating behavior and RBAC for the PKI operator; while mostly a rollback/simplification, it can change how quickly/accurately revocation completion is detected in HA scenarios.

Overview
Reverts the certificate revocation controller’s per-kube-apiserver-pod verification logic (and related helpers/tests), switching back to a single guest API connectivity check via the service kubeconfig when gating signer trust/revocation.

Updates the control-plane PKI operator Role (and fixtures) to drop pods list/watch permissions, and removes the HA request-serving isolation e2e subtest that exercised the break-glass/CRR flow due to flakiness.

Written by Cursor Bugbot for commit c8bc247. This will update automatically on new commits. Configure here.

Summary by CodeRabbit

Release Notes

  • Security

    • Restricted RBAC permissions for the control-plane-pki-operator across all deployment configurations to limit pod resource access to read-only operations.
  • Bug Fixes

    • Simplified certificate verification logic for Kubernetes API server connectivity validation.
  • Tests

    • Removed obsolete test cases and helpers related to the previous certificate verification approach.

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

Copy link
Copy Markdown

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

Details

In response to this:

Reverts #7405 and #7744

The introduction of this net net testcase in TestCreateClusterRequestServingIsolation has resulted in a ~50% flake rate.

https://testgrid.k8s.io/redhat-hypershift#4.21-aws-ovn&width=20

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

Copy link
Copy Markdown

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

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

This repository is configured in: LGTM mode

@openshift-ci-robot

Copy link
Copy Markdown

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

Details

In response to this:

Reverts #7405 and #7744

The introduction of this net net testcase in TestCreateClusterRequestServingIsolation has resulted in a ~50% flake rate.

https://testgrid.k8s.io/redhat-hypershift#4.21-aws-ovn&width=20


[!NOTE]
Cursor Bugbot is generating a summary for commit c8bc247. Configure here.

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

@openshift-ci

openshift-ci Bot commented Feb 23, 2026

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: sjenning

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 Feb 23, 2026
@coderabbitai

coderabbitai Bot commented Feb 23, 2026

Copy link
Copy Markdown
Contributor

Walkthrough

RBAC roles are updated across all platform-specific environments and base configurations, removing list and watch verbs from pod permissions. The certificate revocation controller is refactored to remove Pod informer dependency and replace distributed pod verification with inline KAS-connected verification logic. Associated tests are cleaned up to reflect the implementation changes.

Changes

Cohort / File(s) Summary
RBAC Role Permission Updates
control-plane-operator/controllers/hostedcontrolplane/testdata/control-plane-pki-operator/*/zz_fixture_TestControlPlaneComponents_control_plane_pki_operator_role.yaml, control-plane-operator/controllers/hostedcontrolplane/v2/assets/control-plane-pki-operator/role.yaml
Removed list and watch verbs for pods resource across AROSwift, GCP, IBMCloud, TechPreviewNoUpgrade environments and base role. Pods permissions reduced from get/list/watch (and create/delete/update/patch in base) to only get.
Certificate Revocation Controller Refactoring
control-plane-pki-operator/certificaterevocationcontroller/certificaterevocationcontroller.go
Removed Pod informer and listPods field; eliminated isPodReady, containerPort, and verifyCertificateAgainstAllKASPods helpers. Inlined KAS verification logic directly into ensureNewSignerCertificatePropagated and ensureOldSignerCertificateRevoked, guarded by new skipKASConnections flag. Verification now uses direct Kubernetes client calls to guest cluster via secret instead of polling pods.
Test Cleanup
control-plane-pki-operator/certificaterevocationcontroller/certificaterevocationcontroller_test.go, test/e2e/create_cluster_test.go
Removed Pod-related test cases (TestIsPodReady, TestContainerPort, TestVerifyCertificateAgainstAllKASPods), their helpers, and unused imports. Removed certificate revocation validation steps with HA control plane from TestCreateClusterRequestServingIsolation.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~30 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Stable And Deterministic Test Names ✅ Passed Test names are static and descriptive with no dynamic information; PR removes test functions rather than adding new ones.
Test Structure And Quality ✅ Passed PR removes flaky tests causing ~50% failure rate; remaining tests follow quality practices with single responsibility, meaningful assertions, mock-based setup without cluster dependencies.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'OCPBUGS-62177: revert CRR controller changes' accurately summarizes the main purpose of the pull request—reverting previous CRR (Certificate Revocation Request) controller changes—and is clear and specific.

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

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

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

@openshift-ci
openshift-ci Bot requested review from devguyio and muraee February 23, 2026 20:02
@openshift-ci openshift-ci Bot added area/control-plane-operator Indicates the PR includes changes for the control plane operator - in an OCP release area/control-plane-pki-operator Indicates the PR includes changes for the control plane PKI operator - in an OCP release labels Feb 23, 2026
@sdminonne

Copy link
Copy Markdown
Contributor

/lgtm

@openshift-ci openshift-ci Bot added area/testing Indicates the PR includes changes for e2e testing and removed do-not-merge/needs-area labels Feb 23, 2026
@openshift-ci openshift-ci Bot added the lgtm Indicates that a PR is ready to be merged. label Feb 23, 2026
@openshift-ci-robot

Copy link
Copy Markdown

Scheduling tests matching the pipeline_run_if_changed or not excluded by pipeline_skip_if_only_changed parameters:
/test e2e-aks-4-21
/test e2e-aws-4-21
/test e2e-aks
/test e2e-aws
/test e2e-aws-upgrade-hypershift-operator
/test e2e-kubevirt-aws-ovn-reduced
/test e2e-v2-aws

@openshift-ci-robot

Copy link
Copy Markdown

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

Details

In response to this:

Reverts #7405 and #7744

The introduction of this net net testcase in TestCreateClusterRequestServingIsolation has resulted in a ~50% flake rate.

https://testgrid.k8s.io/redhat-hypershift#4.21-aws-ovn&width=20


[!NOTE]
Medium Risk
Touches certificate revocation gating behavior and RBAC for the PKI operator; while mostly a rollback/simplification, it can change how quickly/accurately revocation completion is detected in HA scenarios.

Overview
Reverts the certificate revocation controller’s per-kube-apiserver-pod verification logic (and related helpers/tests), switching back to a single guest API connectivity check via the service kubeconfig when gating signer trust/revocation.

Updates the control-plane PKI operator Role (and fixtures) to drop pods list/watch permissions, and removes the HA request-serving isolation e2e subtest that exercised the break-glass/CRR flow due to flakiness.

Written by Cursor Bugbot for commit c8bc247. This will update automatically on new commits. Configure here.

Summary by CodeRabbit

Release Notes

  • Security

  • Restricted RBAC permissions for the control-plane-pki-operator across all deployment configurations to limit pod resource access to read-only operations.

  • Bug Fixes

  • Simplified certificate verification logic for Kubernetes API server connectivity validation.

  • Tests

  • Removed obsolete test cases and helpers related to the previous certificate verification approach.

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.

@sjenning sjenning changed the title NO-JIRA: revert CRR controller changes OCPBUGS-62177: revert CRR controller changes Feb 23, 2026
@openshift-ci-robot openshift-ci-robot added the jira/invalid-bug Indicates that a referenced Jira bug is invalid for the branch this PR is targeting. label Feb 23, 2026
@openshift-ci-robot

Copy link
Copy Markdown

@sjenning: This pull request references Jira Issue OCPBUGS-62177, which is invalid:

  • expected the bug to be in one of the following states: NEW, ASSIGNED, POST, but it is MODIFIED instead

Comment /jira refresh to re-evaluate validity if changes to the Jira bug are made, or edit the title of this pull request to link to a different bug.

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

Details

In response to this:

Reverts #7405 and #7744

The introduction of this net new testcase in TestCreateClusterRequestServingIsolation has resulted in a ~50% flake rate.

https://testgrid.k8s.io/redhat-hypershift#4.21-aws-ovn&width=20


[!NOTE]
Medium Risk
Touches certificate revocation gating behavior and RBAC for the PKI operator; while mostly a rollback/simplification, it can change how quickly/accurately revocation completion is detected in HA scenarios.

Overview
Reverts the certificate revocation controller’s per-kube-apiserver-pod verification logic (and related helpers/tests), switching back to a single guest API connectivity check via the service kubeconfig when gating signer trust/revocation.

Updates the control-plane PKI operator Role (and fixtures) to drop pods list/watch permissions, and removes the HA request-serving isolation e2e subtest that exercised the break-glass/CRR flow due to flakiness.

Written by Cursor Bugbot for commit c8bc247. This will update automatically on new commits. Configure here.

Summary by CodeRabbit

Release Notes

  • Security

  • Restricted RBAC permissions for the control-plane-pki-operator across all deployment configurations to limit pod resource access to read-only operations.

  • Bug Fixes

  • Simplified certificate verification logic for Kubernetes API server connectivity validation.

  • Tests

  • Removed obsolete test cases and helpers related to the previous certificate verification approach.

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.

@sjenning

Copy link
Copy Markdown
Contributor Author

/jira refresh

@openshift-ci-robot openshift-ci-robot added jira/valid-bug Indicates that a referenced Jira bug is valid for the branch this PR is targeting. and removed jira/invalid-bug Indicates that a referenced Jira bug is invalid for the branch this PR is targeting. labels Feb 23, 2026
@openshift-ci-robot

Copy link
Copy Markdown

@sjenning: This pull request references Jira Issue OCPBUGS-62177, which is valid. The bug has been moved to the POST state.

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

No GitHub users were found matching the public email listed for the QA contact in Jira (jiezhao@redhat.com), skipping review request.

Details

In response to this:

/jira refresh

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

@sjenning

Copy link
Copy Markdown
Contributor Author

/verified later by @sjenning

@openshift-ci-robot

Copy link
Copy Markdown

@sjenning: Only users can be targets for the /verified later command.

Details

In response to this:

/verified later by @sjenning

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
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick comments (2)
control-plane-pki-operator/certificaterevocationcontroller/certificaterevocationcontroller.go (2)

545-560: Rename signerSecert to signerSecret for clarity.

Typo makes the local reads harder to scan and risks copy/paste mistakes later.

♻️ Proposed fix
-	signerSecert, signers, err := c.loadCertificateSecret(signer.Namespace, signer.Name)
+	signerSecret, signers, err := c.loadCertificateSecret(signer.Namespace, signer.Name)
 	if err != nil {
 		return true, nil, false, err
 	}
@@
-	currentCertPEM, ok := signerSecert.Data[corev1.TLSCertKey]
+	currentCertPEM, ok := signerSecret.Data[corev1.TLSCertKey]
 	if !ok || len(currentCertPEM) == 0 {
-		return true, nil, false, fmt.Errorf("signer certificate %s/%s had no data for %s", signerSecert.Namespace, signerSecert.Name, corev1.TLSCertKey)
+		return true, nil, false, fmt.Errorf("signer certificate %s/%s had no data for %s", signerSecret.Namespace, signerSecret.Name, corev1.TLSCertKey)
 	}
 
-	currentKeyPEM, ok := signerSecert.Data[corev1.TLSPrivateKeyKey]
+	currentKeyPEM, ok := signerSecret.Data[corev1.TLSPrivateKeyKey]
 	if !ok || len(currentKeyPEM) == 0 {
-		return true, nil, false, fmt.Errorf("signer certificate %s/%s had no data for %s", signerSecert.Namespace, signerSecert.Name, corev1.TLSPrivateKeyKey)
+		return true, nil, false, fmt.Errorf("signer certificate %s/%s had no data for %s", signerSecret.Namespace, signerSecret.Name, corev1.TLSPrivateKeyKey)
 	}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@control-plane-pki-operator/certificaterevocationcontroller/certificaterevocationcontroller.go`
around lines 545 - 560, The variable name signerSecert is a typo; rename it to
signerSecret everywhere it’s used (including its declaration and subsequent
references in this function and any nearby scope) to improve clarity and avoid
mistakes—e.g., in the assignment from c.loadCertificateSecret, in the checks for
signerSecret.Data[corev1.TLSCertKey] and
signerSecret.Data[corev1.TLSPrivateKeyKey], and in the fmt.Errorf messages that
reference signerSecert.Namespace and signerSecert.Name; ensure all occurrences
are updated consistently so the code compiles.

580-613: Add timeout to KAS SelfSubjectReview calls to prevent indefinite hangs.

Both SelfSubjectReview calls (at these lines and at 852-885) use ctx directly without a timeout. If KAS is unreachable, these requests will block indefinitely since rest.Config.Timeout defaults to 0 (no timeout). Wrap the context with context.WithTimeout before passing to Create().

Proposed fix
+		reqCtx, cancel := context.WithTimeout(ctx, 10*time.Second)
+		defer cancel()
-		_, err = testClient.AuthenticationV1().SelfSubjectReviews().Create(ctx, &authenticationv1.SelfSubjectReview{}, metav1.CreateOptions{})
+		_, err = testClient.AuthenticationV1().SelfSubjectReviews().Create(reqCtx, &authenticationv1.SelfSubjectReview{}, metav1.CreateOptions{})

Apply the same fix to the second SSR call at line 878-879.

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

In
`@control-plane-pki-operator/certificaterevocationcontroller/certificaterevocationcontroller.go`
around lines 580 - 613, The SelfSubjectReview Create calls (via
testClient.AuthenticationV1().SelfSubjectReviews().Create and the later SSR call
around lines 852-885) use the controller's ctx directly and can hang if KAS is
unreachable; wrap the ctx with a short context.WithTimeout (e.g. 10s or a
configurable constant) before calling Create(), use the derived ctx for the
Create() call, and ensure you call the cancel() in a defer immediately after
creating the timed context; apply the same change to both SSR invocations so
both requests time out instead of blocking indefinitely.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In
`@control-plane-pki-operator/certificaterevocationcontroller/certificaterevocationcontroller.go`:
- Around line 545-560: The variable name signerSecert is a typo; rename it to
signerSecret everywhere it’s used (including its declaration and subsequent
references in this function and any nearby scope) to improve clarity and avoid
mistakes—e.g., in the assignment from c.loadCertificateSecret, in the checks for
signerSecret.Data[corev1.TLSCertKey] and
signerSecret.Data[corev1.TLSPrivateKeyKey], and in the fmt.Errorf messages that
reference signerSecert.Namespace and signerSecert.Name; ensure all occurrences
are updated consistently so the code compiles.
- Around line 580-613: The SelfSubjectReview Create calls (via
testClient.AuthenticationV1().SelfSubjectReviews().Create and the later SSR call
around lines 852-885) use the controller's ctx directly and can hang if KAS is
unreachable; wrap the ctx with a short context.WithTimeout (e.g. 10s or a
configurable constant) before calling Create(), use the derived ctx for the
Create() call, and ensure you call the cancel() in a defer immediately after
creating the timed context; apply the same change to both SSR invocations so
both requests time out instead of blocking indefinitely.

ℹ️ Review info

Configuration used: Repository: openshift/coderabbit/.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 e151385 and c8bc247.

📒 Files selected for processing (9)
  • control-plane-operator/controllers/hostedcontrolplane/testdata/control-plane-pki-operator/AROSwift/zz_fixture_TestControlPlaneComponents_control_plane_pki_operator_role.yaml
  • control-plane-operator/controllers/hostedcontrolplane/testdata/control-plane-pki-operator/GCP/zz_fixture_TestControlPlaneComponents_control_plane_pki_operator_role.yaml
  • control-plane-operator/controllers/hostedcontrolplane/testdata/control-plane-pki-operator/IBMCloud/zz_fixture_TestControlPlaneComponents_control_plane_pki_operator_role.yaml
  • control-plane-operator/controllers/hostedcontrolplane/testdata/control-plane-pki-operator/TechPreviewNoUpgrade/zz_fixture_TestControlPlaneComponents_control_plane_pki_operator_role.yaml
  • control-plane-operator/controllers/hostedcontrolplane/testdata/control-plane-pki-operator/zz_fixture_TestControlPlaneComponents_control_plane_pki_operator_role.yaml
  • control-plane-operator/controllers/hostedcontrolplane/v2/assets/control-plane-pki-operator/role.yaml
  • control-plane-pki-operator/certificaterevocationcontroller/certificaterevocationcontroller.go
  • control-plane-pki-operator/certificaterevocationcontroller/certificaterevocationcontroller_test.go
  • test/e2e/create_cluster_test.go
💤 Files with no reviewable changes (8)
  • control-plane-operator/controllers/hostedcontrolplane/testdata/control-plane-pki-operator/AROSwift/zz_fixture_TestControlPlaneComponents_control_plane_pki_operator_role.yaml
  • control-plane-operator/controllers/hostedcontrolplane/testdata/control-plane-pki-operator/zz_fixture_TestControlPlaneComponents_control_plane_pki_operator_role.yaml
  • test/e2e/create_cluster_test.go
  • control-plane-operator/controllers/hostedcontrolplane/testdata/control-plane-pki-operator/GCP/zz_fixture_TestControlPlaneComponents_control_plane_pki_operator_role.yaml
  • control-plane-operator/controllers/hostedcontrolplane/v2/assets/control-plane-pki-operator/role.yaml
  • control-plane-operator/controllers/hostedcontrolplane/testdata/control-plane-pki-operator/IBMCloud/zz_fixture_TestControlPlaneComponents_control_plane_pki_operator_role.yaml
  • control-plane-pki-operator/certificaterevocationcontroller/certificaterevocationcontroller_test.go
  • control-plane-operator/controllers/hostedcontrolplane/testdata/control-plane-pki-operator/TechPreviewNoUpgrade/zz_fixture_TestControlPlaneComponents_control_plane_pki_operator_role.yaml

@sjenning sjenning added the acknowledge-critical-fixes-only Indicates if the issuer of the label is OK with the policy. label Feb 23, 2026
@cwbotbot

cwbotbot commented Feb 23, 2026

Copy link
Copy Markdown

Test Results

e2e-aws

e2e-aks

@enxebre

enxebre commented Feb 24, 2026

Copy link
Copy Markdown
Member

/retest
/verified by e2e

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

Copy link
Copy Markdown

@enxebre: This PR has been marked as verified by e2e.

Details

In response to this:

/retest
/verified by e2e

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

@openshift-ci

openshift-ci Bot commented Feb 24, 2026

Copy link
Copy Markdown
Contributor

@sjenning: all tests passed!

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 3b31e1e into openshift:main Feb 24, 2026
25 checks passed
@openshift-ci-robot

Copy link
Copy Markdown

@sjenning: Jira Issue Verification Checks: Jira Issue OCPBUGS-62177
✔️ This pull request was pre-merge verified.
✔️ All associated pull requests have merged.
✔️ All associated, merged pull requests were pre-merge verified.

Jira Issue OCPBUGS-62177 has been moved to the MODIFIED state and will move to the VERIFIED state when the change is available in an accepted nightly payload. 🕓

Details

In response to this:

Reverts #7405 and #7744

The introduction of this net new testcase in TestCreateClusterRequestServingIsolation has resulted in a ~50% flake rate.

https://testgrid.k8s.io/redhat-hypershift#4.21-aws-ovn&width=20


[!NOTE]
Medium Risk
Touches certificate revocation gating behavior and RBAC for the PKI operator; while mostly a rollback/simplification, it can change how quickly/accurately revocation completion is detected in HA scenarios.

Overview
Reverts the certificate revocation controller’s per-kube-apiserver-pod verification logic (and related helpers/tests), switching back to a single guest API connectivity check via the service kubeconfig when gating signer trust/revocation.

Updates the control-plane PKI operator Role (and fixtures) to drop pods list/watch permissions, and removes the HA request-serving isolation e2e subtest that exercised the break-glass/CRR flow due to flakiness.

Written by Cursor Bugbot for commit c8bc247. This will update automatically on new commits. Configure here.

Summary by CodeRabbit

Release Notes

  • Security

  • Restricted RBAC permissions for the control-plane-pki-operator across all deployment configurations to limit pod resource access to read-only operations.

  • Bug Fixes

  • Simplified certificate verification logic for Kubernetes API server connectivity validation.

  • Tests

  • Removed obsolete test cases and helpers related to the previous certificate verification approach.

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.

sdminonne added a commit to sdminonne/hypershift that referenced this pull request May 6, 2026
Add TestCreateClusterHABreakGlassCredentials to exercise the
break-glass credential / CertificateRevocationController flow on a
HighlyAvailable control plane (3 KAS replicas). This validates that
the CRR controller correctly verifies certificate revocation against
each individual KAS pod rather than through the service load balancer.

The test creates an HA cluster, asserts all 3 KAS replicas are ready
(guarding against false-positive passes on a single-replica cluster),
then runs the existing RunTestControlPlanePKIOperatorBreakGlassCredentials
integration helper which exercises the full CRR lifecycle.

The previous e2e test for this (TestCreateClusterRequestServingIsolation
in PR openshift#7405) was reverted in PR openshift#7784 due to a ~50% flake rate. That
flakiness was entirely caused by the request serving isolation test
infrastructure: 5 dedicated node pools, topology annotation, and node
placement validation. None of that is used here. This test is
intentionally minimal — HA control plane policy is the only difference
from TestCreateCluster. It reuses well-proven building blocks:
- ControlPlaneAvailabilityPolicy=HighlyAvailable is exercised by
  TestUpgradeControlPlane, TestHAEtcdChaos, etc.
- RunTestControlPlanePKIOperatorBreakGlassCredentials has been running
  reliably in TestCreateCluster (SingleReplica) since 4.15.
- All async waiting uses the existing EventuallyObject framework with
  no new polling loops.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
sdminonne added a commit to sdminonne/hypershift that referenced this pull request May 6, 2026
Add TestCreateClusterHABreakGlassCredentials to exercise the
break-glass credential / CertificateRevocationController flow on a
HighlyAvailable control plane (3 KAS replicas). This validates that
the CRR controller correctly verifies certificate revocation against
each individual KAS pod rather than through the service load balancer.

The test creates an HA cluster, asserts all 3 KAS replicas are ready
(guarding against false-positive passes on a single-replica cluster),
then runs the existing RunTestControlPlanePKIOperatorBreakGlassCredentials
integration helper which exercises the full CRR lifecycle.

The previous e2e test for this (TestCreateClusterRequestServingIsolation
in PR openshift#7405) was reverted in PR openshift#7784 due to a ~50% flake rate. That
flakiness was entirely caused by the request serving isolation test
infrastructure: 5 dedicated node pools, topology annotation, and node
placement validation. None of that is used here. This test is
intentionally minimal — HA control plane policy is the only difference
from TestCreateCluster. It reuses well-proven building blocks:
- ControlPlaneAvailabilityPolicy=HighlyAvailable is exercised by
  TestUpgradeControlPlane, TestHAEtcdChaos, etc.
- RunTestControlPlanePKIOperatorBreakGlassCredentials has been running
  reliably in TestCreateCluster (SingleReplica) since 4.15.
- All async waiting uses the existing EventuallyObject framework with
  no new polling loops.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@openshift-merge-robot

Copy link
Copy Markdown
Contributor

Fix included in release 5.0.0-0.nightly-2026-05-12-025124

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

Labels

acknowledge-critical-fixes-only Indicates if the issuer of the label is OK with the policy. approved Indicates a PR has been approved by an approver from all required OWNERS files. area/control-plane-operator Indicates the PR includes changes for the control plane operator - in an OCP release area/control-plane-pki-operator Indicates the PR includes changes for the control plane PKI operator - in an OCP release area/testing Indicates the PR includes changes for e2e testing jira/valid-bug Indicates that a referenced Jira bug is valid for the branch this PR is targeting. jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. lgtm Indicates that a PR is ready to be merged. verified Signifies that the PR passed pre-merge verification criteria

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants