Skip to content

CNTRLPLANE-3371: Fix AllowedCIDRs e2e test for Route-based KAS - #8469

Merged
openshift-merge-bot[bot] merged 1 commit into
openshift:mainfrom
bryan-cox:CNTRLPLANE-3371
May 20, 2026
Merged

CNTRLPLANE-3371: Fix AllowedCIDRs e2e test for Route-based KAS#8469
openshift-merge-bot[bot] merged 1 commit into
openshift:mainfrom
bryan-cox:CNTRLPLANE-3371

Conversation

@bryan-cox

@bryan-cox bryan-cox commented May 8, 2026

Copy link
Copy Markdown
Member

What

Fixes the ValidateKubeAPIServerAllowedCIDRs e2e test so it passes on v2 Azure self-managed clusters where KAS uses Route publishing strategy (via --external-dns-domain).

Why

The test was skipped in v2 CI (--ginkgo.skip="KAS allowed CIDRs") because it always failed. Both v1 and v2 Azure self-managed use Route strategy for KAS, but v1 passes while v2 fails due to a difference in cluster lifecycle timing combined with HTTP/2 connection reuse.

Root cause: HTTP/2 connection reuse

The test reuses a single kubeclient.Clientset across all ServerVersion() poll iterations. Go's HTTP/2 transport multiplexes all requests over a single persistent TCP connection. If the first poll succeeds before Azure NSG rules take effect, all subsequent polls reuse that connection and never observe the expected failure.

Why v1 passes but v2 fails: In v1, the cluster is created fresh inside TestCreateCluster, so the CPO is in its initial reconciliation burst — the router service's LoadBalancerSourceRanges and corresponding Azure NSG rules are updated before the first ServerVersion() call. In v2, the cluster is pre-created and shared across tests, so the CPO is in steady-state with longer reconciliation intervals. The first ServerVersion() call succeeds before the NSG rules catch up, and HTTP/2 holds that connection open for all subsequent polls.

Additional fix: missing downstream service wait

The test waits for AllowedCIDRBlocks to propagate from the HostedCluster to the HostedControlPlane, but does not wait for the CPO to reconcile the downstream LoadBalancer service's LoadBalancerSourceRanges. This is a race condition that exists in both v1 and v2 — v1 just happens to win the race due to CPO being in active reconciliation. Adding an explicit wait makes the test correct rather than relying on timing.

Changes

test/e2e/util/util.go — single file, three changes:

  1. ensureAPIServerAllowedCIDRs signature: *kubeclient.Clientset*rest.Config to enable fresh client creation per poll
  2. Fresh kubeclient per poll: Each ServerVersion() iteration creates a new client via kubeclient.NewForConfig(rest.CopyConfig(guestConfig)), preventing HTTP/2 connection reuse.
  3. Strategy-aware service wait: New allowedCIDRsTargetService() helper determines the correct LB service based on APIServer publishing strategy (Route → router, LoadBalancer → platform-specific KAS LB). An Eventually block waits for the service's LoadBalancerSourceRanges to match before checking KAS reachability.

Test Plan

  • go build -tags e2e ./test/e2e/... — compiles
  • go build -tags e2ev2 ./test/e2e/v2/... — compiles
  • go vet -tags e2e ./test/e2e/... — passes
  • Re-run v2 rehearsal on openshift/release#79048 after merge

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Bug Fixes

    • Improved API server CIDR validation to wait for downstream load‑balancer updates, verify reachability against the appropriate downstream service per publishing strategy/platform, and recreate connections to ensure new network rules are enforced.
    • Made Azure workload‑identity webhook mutation verification more robust by retrying delete/recreate and revalidating pod mutation.
  • Tests

    • Added tests covering downstream service selection across platforms and publishing strategies and strengthened reachability checks.
  • Chores

    • Reordered Azure post‑create validation steps for more reliable verification.

@openshift-merge-bot

Copy link
Copy Markdown
Contributor

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

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

This repository is configured in: LGTM mode

@openshift-ci

openshift-ci Bot 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 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-robot

openshift-ci-robot commented May 8, 2026

Copy link
Copy Markdown

@bryan-cox: This pull request references CNTRLPLANE-3371 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 task to target the "5.0.0" version, but no target version was set.

Details

In response to this:

What

Fixes the ValidateKubeAPIServerAllowedCIDRs e2e test so it passes on v2 Azure self-managed clusters where KAS uses Route publishing strategy (via --external-dns-domain).

Why

The test was skipped in v2 CI (--ginkgo.skip="KAS allowed CIDRs") because it always failed. Root cause: two issues compound to make the test pass on v1 but fail on v2.

1. Missing downstream service wait

The test waits for AllowedCIDRBlocks to propagate from the HostedCluster to the HostedControlPlane, but does not wait for the CPO to reconcile the downstream LoadBalancer service's LoadBalancerSourceRanges. With Route strategy, the relevant service is the router LB service (not a KAS LB). The CPO reconciliation adds a delay that the test doesn't account for.

2. HTTP/2 connection reuse

The test reuses a single kubeclient.Clientset across all ServerVersion() poll iterations. Go's HTTP/2 transport multiplexes all requests over a single persistent TCP connection. If the first poll succeeds before Azure NSG rules take effect, all subsequent polls reuse that connection and never observe the expected failure.

Changes

test/e2e/util/util.go — single file, three changes:

  1. ensureAPIServerAllowedCIDRs signature: *kubeclient.Clientset*rest.Config to enable fresh client creation per poll
  2. Strategy-aware service wait: New allowedCIDRsTargetService() helper determines the correct LB service based on APIServer publishing strategy (Route → router, LoadBalancer → platform-specific KAS LB). An Eventually block waits for the service's LoadBalancerSourceRanges to match before checking KAS reachability.
  3. Fresh kubeclient per poll: Each ServerVersion() iteration creates a new client via kubeclient.NewForConfig(rest.CopyConfig(guestConfig)), preventing HTTP/2 connection reuse.

Test Plan

  • go build -tags e2e ./test/e2e/... — compiles
  • go build -tags e2ev2 ./test/e2e/v2/... — compiles
  • go vet -tags e2e ./test/e2e/... — passes
  • Re-run v2 rehearsal on openshift/release#79048 after merge

🤖 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
Contributor

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

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

Review profile: CHILL

Plan: Enterprise

Run ID: 0a263266-7fa4-44f0-8c05-fee2d898781c

📥 Commits

Reviewing files that changed from the base of the PR and between 020c455 and 7d4d6db.

📒 Files selected for processing (4)
  • test/e2e/create_cluster_test.go
  • test/e2e/util/azure.go
  • test/e2e/util/util.go
  • test/e2e/util/util_test.go
🚧 Files skipped from review as they are similar to previous changes (4)
  • test/e2e/create_cluster_test.go
  • test/e2e/util/util_test.go
  • test/e2e/util/azure.go
  • test/e2e/util/util.go

📝 Walkthrough

Walkthrough

ValidateKubeAPIServerAllowedCIDRs now passes the guest REST config into ensureAPIServerAllowedCIDRs. ensureAPIServerAllowedCIDRs first waits for the control-plane to reconcile HostedCluster.Spec.Networking.APIServer.AllowedCIDRBlocks into the downstream Service.spec.LoadBalancerSourceRanges (target Service selected by publishing strategy and cloud-specific rules). It then polls reachability by creating a fresh guest kubeclient on each attempt (copying the rest.Config with a custom Dial) and calling ServerVersion() to verify network restrictions.

Sequence Diagram(s)

sequenceDiagram
    participant Test as Test Harness
    participant CP as Control-Plane Reconciler
    participant LB as Downstream Service/LoadBalancer
    participant GuestAPI as Guest kube-apiserver

    Test->>CP: Set HostedCluster.Spec.Networking.APIServer.AllowedCIDRBlocks
    Note right of CP: Reconciler selects target Service based on publishing strategy/cloud
    CP->>LB: Update Service.spec.LoadBalancerSourceRanges
    loop Wait for reconciliation
        Test->>LB: GET Service.spec.LoadBalancerSourceRanges
        alt Ranges match expected
            Note right of Test: Begin reachability polling
            loop Reachability attempt
                Test->>GuestAPI: Create fresh kubeclient (copy rest.Config + custom Dial) and call ServerVersion()
                GuestAPI-->>Test: respond (reachable/unreachable)
            end
        else Not reconciled
            Test-->>Test: sleep and retry
        end
    end
Loading

Suggested reviewers

  • enxebre
  • muraee
🚥 Pre-merge checks | ✅ 9 | ❌ 3

❌ Failed checks (3 warnings)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 40.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Test Structure And Quality ⚠️ Warning TestAllowedCIDRsTargetService assertions lack meaningful failure messages (e.g., g.Expect(svc).To(BeNil())). Messages required by custom check requirement #4. Add failure messages to all assertions in TestAllowedCIDRsTargetService using the second parameter, e.g., g.Expect(svc).To(BeNil(), "service should be nil").
Ipv6 And Disconnected Network Test Compatibility ⚠️ Warning Modified e2e functions contain hardcoded IPv4 CIDRs (0.0.0.0/32, 0.0.0.0/0, 250.250.250.x/32) with no IPv6 alternatives or IP family detection, incompatible with IPv6-only clusters. Use IP family detection to select IPv4 vs IPv6 CIDRs. Create IPv6 variants of test CIDRs or skip test on IPv6-only clusters. See check instructions for GetIPAddressFamily() and [Skipped:IPv6] patterns.
✅ Passed checks (9 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly identifies the main fix: addressing AllowedCIDRs e2e test failures for Route-based KAS publishing strategy on Azure v2 clusters, which aligns with the core changes across all modified files.
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 test titles are stable and deterministic. New tests use descriptive, static strings. Dynamic values like namespace names are used only in test bodies, not in test declarations.
Microshift Test Compatibility ✅ Passed No Ginkgo e2e tests added. TestAllowedCIDRsTargetService is a standard Go unit test, not a Ginkgo test, so the MicroShift check does not apply.
Single Node Openshift (Sno) Test Compatibility ✅ Passed TestAllowedCIDRsTargetService is a standard Go unit test, not Ginkgo e2e. Uses only mock HostedCluster objects with no cluster interaction. Custom check applies only to Ginkgo e2e tests.
Topology-Aware Scheduling Compatibility ✅ Passed This PR modifies only e2e test code in test/e2e/. The custom check applies only when deployment manifests, operator code, or controllers are modified—not applicable here.
Ote Binary Stdout Contract ✅ Passed All PR changes are in test functions/helpers only. No process-level code violations detected.

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

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

Tip

💬 Introducing Slack Agent: The best way for teams to turn conversations into code.

Slack Agent is built on CodeRabbit's deep understanding of your code, so your team can collaborate across the entire SDLC without losing context.

  • Generate code and open pull requests
  • Plan features and break down work
  • Investigate incidents and troubleshoot customer tickets together
  • Automate recurring tasks and respond to alerts with triggers
  • Summarize progress and report instantly

Built for teams:

  • Shared memory across your entire org—no repeating context
  • Per-thread sandboxes to safely plan and execute work
  • Governance built-in—scoped access, auditability, and budget controls

One agent for your entire SDLC. Right inside Slack.

👉 Get started


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

@openshift-ci openshift-ci Bot added approved Indicates a PR has been approved by an approver from all required OWNERS files. area/testing Indicates the PR includes changes for e2e testing and removed do-not-merge/needs-area labels May 8, 2026
@codecov

codecov Bot commented May 8, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 40.10%. Comparing base (10fd799) to head (7d4d6db).
⚠️ Report is 38 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #8469      +/-   ##
==========================================
+ Coverage   40.07%   40.10%   +0.02%     
==========================================
  Files         751      753       +2     
  Lines       92863    92985     +122     
==========================================
+ Hits        37215    37288      +73     
- Misses      52956    53001      +45     
- Partials     2692     2696       +4     

see 5 files with indirect coverage changes

Flag Coverage Δ
cmd-support 34.28% <ø> (-0.03%) ⬇️
cpo-hostedcontrolplane 40.57% <ø> (+0.01%) ⬆️
cpo-other 40.14% <ø> (ø)
hypershift-operator 50.61% <ø> (+0.09%) ⬆️
other 31.54% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@bryan-cox
bryan-cox marked this pull request as ready for review May 8, 2026 19:29
@bryan-cox

Copy link
Copy Markdown
Member Author

/pipeline required

@bryan-cox

Copy link
Copy Markdown
Member Author

/pipeline required

@openshift-merge-bot

Copy link
Copy Markdown
Contributor

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

@openshift-ci openshift-ci Bot removed the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label May 11, 2026
@cwbotbot

cwbotbot commented May 11, 2026

Copy link
Copy Markdown

Test Results

e2e-aws

e2e-aks

Failed Tests

Total failed tests: 3

  • TestCreateCluster
  • TestCreateCluster/Main
  • TestCreateCluster/Main/EnsureAzureWorkloadIdentityWebhookMutation

@bryan-cox

Copy link
Copy Markdown
Member Author

/retest

@bryan-cox

Copy link
Copy Markdown
Member Author

/test e2e-aws

@bryan-cox

Copy link
Copy Markdown
Member Author

/test e2e-aks-4-22

@hypershift-jira-solve-ci

Copy link
Copy Markdown
Contributor

AI Test Failure Analysis

Job: pull-ci-openshift-hypershift-main-e2e-aks | Build: 2053786112610013184 | Cost: $4.889827649999997 | Failed step: hypershift-azure-run-e2e

View full analysis report


Generated by hypershift-analyze-e2e-failure post-step using Claude claude-opus-4-6

@bryan-cox

Copy link
Copy Markdown
Member Author

/test e2e-aks

@bryan-cox

Copy link
Copy Markdown
Member Author

/test e2e-aws

@hypershift-jira-solve-ci

Copy link
Copy Markdown
Contributor

AI Test Failure Analysis

Job: pull-ci-openshift-hypershift-main-e2e-aws | Build: 2053827692964352000 | Cost: $4.6627350000000005 | Failed step: hypershift-aws-run-e2e-nested

View full analysis report


Generated by hypershift-analyze-e2e-failure post-step using Claude claude-opus-4-6

@bryan-cox

Copy link
Copy Markdown
Member Author

/test e2e-aws

@hypershift-jira-solve-ci

hypershift-jira-solve-ci Bot commented May 11, 2026

Copy link
Copy Markdown
Contributor

I have all the evidence needed. Here is the complete analysis:

Test Failure Analysis Complete

Job Information

Test Failure Analysis

Error

Pod scheduling timeout. 0/56 nodes are available: 1 node(s) didn't satisfy existing pods anti-affinity rules, 1 node(s) had untolerated taint {node-role.kubernetes.io/ci-builds-tmpfs-worker: ci-builds-tmpfs-worker}, 1 node(s) had untolerated taint {node-role.kubernetes.io/ci-longtests-worker: ci-longtests-worker}, 1 node(s) had untolerated taint {node.kubernetes.io/not-ready: }, 16 node(s) didn't match Pod's node affinity/selector, 2 Insufficient memory, 24 node(s) had untolerated taint {node-role.kubernetes.io/ci-tests-worker: ci-tests-worker}, 3 node(s) had untolerated taint {node-role.kubernetes.io/infra: }, 3 node(s) had untolerated taint {node-role.kubernetes.io/master: }, 4 node(s) had untolerated taint {node-role.kubernetes.io/ci-builds-worker: ci-builds-worker}.

Summary

This is a CI infrastructure failure, not a test or code failure. The ci-operator pod for the security job was never scheduled on the build01 cluster because no suitable node was available among all 56 nodes for the entire 30-minute scheduling timeout window. The pod remained in Pending state until Prow terminated it with a "Pod scheduling timeout" error. No test code was executed — the PR changes are not implicated in this failure.

Root Cause

The CI pod could not be scheduled on the build01 cluster due to resource exhaustion and node constraints. The Kubernetes scheduler evaluated all 56 nodes and found none suitable:

  • 24 nodes had untolerated taint ci-tests-worker (reserved for test workloads, not ci-operator build pods)
  • 16 nodes didn't match the pod's node affinity/selector (the pod has multiarch.openshift.io preferred node affinity for amd64)
  • 4 nodes had untolerated taint ci-builds-worker (reserved for a different build workload class)
  • 3 nodes had untolerated taint master (control plane nodes)
  • 3 nodes had untolerated taint infra (infrastructure nodes)
  • 2 nodes had insufficient memory (eligible nodes but out of resources)
  • 1 node had untolerated taint ci-builds-tmpfs-worker
  • 1 node had untolerated taint ci-longtests-worker
  • 1 node had untolerated taint not-ready (unhealthy node)
  • 1 node failed pod anti-affinity rules

The 2 nodes that were actually eligible for this pod type did not have enough memory to schedule it. Preemption was also not possible — the scheduler found no viable preemption victims on the memory-constrained nodes. The pod waited for 30 minutes (the default Prow scheduling timeout) before being terminated.

This is a transient cluster capacity issue on build01, completely unrelated to the PR changes.

Recommendations
  1. Retest the PR — Run /test security on the PR to trigger a new attempt. This is a transient infrastructure issue and is very likely to succeed on retry.
  2. No code changes needed — The PR (CNTRLPLANE-3371) was not involved in this failure. No test code was executed.
  3. If retests continue to fail with the same error, the build01 cluster may be under sustained capacity pressure. In that case, escalate to the CI infrastructure team (Test Platform / DPTP) to investigate node capacity on build01.
Evidence
Evidence Detail
Failure type CI infrastructure — pod scheduling timeout
Job state error (not failure — indicates infra issue, not test failure)
Pod phase Failed — pod never reached Running
PodScheduled condition False / Unschedulable
Cluster build01 (56 nodes evaluated, 0 schedulable)
Eligible nodes 2 nodes matched selectors/tolerations but had insufficient memory
Preemption attempted Yes — no viable victims found
Scheduling wait 30 minutes (15:42:54Z → 16:12:54Z)
Build log Not present — no build log artifact was generated (pod never started)
Test execution None — ci-operator never ran; no test code was evaluated
Container statuses Empty — no containers were ever created

@bryan-cox

Copy link
Copy Markdown
Member Author

/test security

@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.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@test/e2e/util/azure.go`:
- Around line 82-89: The guestClient.Get call for the pod lookup only handles
the success path; change the logic in the pod existence check so that after
calling guestClient.Get(ctx, types.NamespacedName{Name: podTemplate.Name,
Namespace: podTemplate.Namespace}, existing) you fail fast on unexpected errors
(i.e. if err != nil and !apierrors.IsNotFound(err) then assert/fail the test
with the error) and only proceed with delete/retry when err == nil or continue
to create when apierrors.IsNotFound(err); use the existing symbols
guestClient.Get, apierrors.IsNotFound, guestClient.Delete, podTemplate and
existing to locate and update the branch accordingly.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

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

ℹ️ Review info
⚙️ Run configuration

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

Review profile: CHILL

Plan: Enterprise

Run ID: 338e2fe9-6b55-468f-8ae6-7fd2d94cfed3

📥 Commits

Reviewing files that changed from the base of the PR and between 383efce and 020c455.

📒 Files selected for processing (4)
  • test/e2e/create_cluster_test.go
  • test/e2e/util/azure.go
  • test/e2e/util/util.go
  • test/e2e/util/util_test.go
🚧 Files skipped from review as they are similar to previous changes (3)
  • test/e2e/create_cluster_test.go
  • test/e2e/util/util.go
  • test/e2e/util/util_test.go

Comment thread test/e2e/util/azure.go
The ValidateKubeAPIServerAllowedCIDRs test fails on v2 Azure
self-managed clusters because KAS uses Route publishing strategy
(via external-dns-domain), not LoadBalancer.

Two fixes:

1. Wait for the downstream LB service (router or KAS LB) to have its
   LoadBalancerSourceRanges updated by the CPO before asserting KAS
   reachability. The target service is determined by the HC's APIServer
   publishing strategy.

2. Create a fresh kubeclient per poll iteration to prevent HTTP/2
   connection reuse. Go's HTTP/2 transport multiplexes all requests over
   a single persistent TCP connection — if a prior request succeeded
   before Azure NSG rules took effect, subsequent requests bypass the
   restriction on the same connection.

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

@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.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@test/e2e/util/util_test.go`:
- Around line 17-131: The test TestAllowedCIDRsTargetService runs serially; add
parallelization by calling t.Parallel() at the top of
TestAllowedCIDRsTargetService and by making each subtest run in parallel: change
each t.Run(...) callback to an anonymous func(t *testing.T) { t.Parallel(); ...
} so subtests call t.Parallel() before any setup (e.g. before calling
azureutil.SetAsAroHCPTest) and then execute the existing assertions that
exercise allowedCIDRsTargetService; keep the existing use of NewWithT and other
helpers unchanged.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

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

ℹ️ Review info
⚙️ Run configuration

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

Review profile: CHILL

Plan: Enterprise

Run ID: 3a809ed5-d5cd-43da-810b-2561c32198f5

📥 Commits

Reviewing files that changed from the base of the PR and between 020c455 and 7d4d6db.

📒 Files selected for processing (4)
  • test/e2e/create_cluster_test.go
  • test/e2e/util/azure.go
  • test/e2e/util/util.go
  • test/e2e/util/util_test.go
🚧 Files skipped from review as they are similar to previous changes (3)
  • test/e2e/create_cluster_test.go
  • test/e2e/util/azure.go
  • test/e2e/util/util.go

Comment thread test/e2e/util/util_test.go
@bryan-cox

Copy link
Copy Markdown
Member Author

/test e2e-aks
/test e2e-azure-self-managed

@cblecker

Copy link
Copy Markdown
Member

@coderabbitai resume

@coderabbitai

coderabbitai Bot commented May 16, 2026

Copy link
Copy Markdown
Contributor
✅ Actions performed

Reviews resumed.

@clebs

clebs commented May 20, 2026

Copy link
Copy Markdown
Member

/lgtm

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

Copy link
Copy Markdown
Contributor

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

@bryan-cox

Copy link
Copy Markdown
Member Author

/retest

@bryan-cox

Copy link
Copy Markdown
Member Author

/verified by e2e

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

Copy link
Copy Markdown

@bryan-cox: This PR has been marked as verified by e2e.

Details

In response to this:

/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.

@bryan-cox

Copy link
Copy Markdown
Member Author

/override "Red Hat Konflux / hypershift-operator-main-enterprise-contract / hypershift-operator-main"

@bryan-cox

Copy link
Copy Markdown
Member Author

/override "Red Hat Konflux / hypershift-operator-enterprise-contract / hypershift-operator-main"

@openshift-ci

openshift-ci Bot commented May 20, 2026

Copy link
Copy Markdown
Contributor

@bryan-cox: Overrode contexts on behalf of bryan-cox: Red Hat Konflux / hypershift-operator-main-enterprise-contract / hypershift-operator-main

Details

In response to this:

/override "Red Hat Konflux / hypershift-operator-main-enterprise-contract / hypershift-operator-main"

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.

@openshift-ci

openshift-ci Bot commented May 20, 2026

Copy link
Copy Markdown
Contributor

@bryan-cox: Overrode contexts on behalf of bryan-cox: Red Hat Konflux / hypershift-operator-enterprise-contract / hypershift-operator-main

Details

In response to this:

/override "Red Hat Konflux / hypershift-operator-enterprise-contract / hypershift-operator-main"

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.

@hypershift-jira-solve-ci

Copy link
Copy Markdown
Contributor

AI Test Failure Analysis

Job: pull-ci-openshift-hypershift-main-e2e-aws | Build: 2057071806359015424 | Cost: $2.8844392499999993 | Failed step: hypershift-aws-run-e2e-nested

View full analysis report


Generated by hypershift-analyze-e2e-failure post-step using Claude claude-opus-4-6

@cblecker

Copy link
Copy Markdown
Member

/retest

@bryan-cox

Copy link
Copy Markdown
Member Author

/test e2e-aws

1 similar comment
@bryan-cox

Copy link
Copy Markdown
Member Author

/test e2e-aws

@bryan-cox

Copy link
Copy Markdown
Member Author

/test e2e-aws

one more time

@openshift-ci

openshift-ci Bot commented May 20, 2026

Copy link
Copy Markdown
Contributor

@bryan-cox: 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 c23dbb8 into openshift:main May 20, 2026
42 of 44 checks passed
@bryan-cox
bryan-cox deleted the CNTRLPLANE-3371 branch May 20, 2026 22:21
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. area/platform/azure PR/issue for Azure (AzurePlatform) platform area/testing Indicates the PR includes changes for e2e testing 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.

7 participants