Skip to content

CNTRLPLANE-3843: feat: ho,cpo,hcco: expose console URL#9008

Open
stevekuznetsov wants to merge 2 commits into
openshift:mainfrom
stevekuznetsov:skuznets/expose-console-url
Open

CNTRLPLANE-3843: feat: ho,cpo,hcco: expose console URL#9008
stevekuznetsov wants to merge 2 commits into
openshift:mainfrom
stevekuznetsov:skuznets/expose-console-url

Conversation

@stevekuznetsov

@stevekuznetsov stevekuznetsov commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

Service operators would like to expose the console URL to users, and users control how the console URL actually gets routed by changing config in the cluster, so we need to read it from the cluster for the correct source of truth.

Summary by CodeRabbit

  • New Features

    • Hosted cluster status now includes an optional OpenShift web console URL (with validated length) and populates it from the guest console configuration when available.
    • HostedCluster now mirrors the HostedControlPlane console URL.
    • Console URL updates are capability-gated: it clears when the console resource is missing and otherwise leaves the current value unchanged on fetch errors.
  • Tests

    • Added an end-to-end health check to verify both statuses publish a non-empty console URL and that they match.
    • Added unit coverage for console URL reconciliation behavior and capability gating.

@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

@coderabbitai

coderabbitai Bot commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

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 validated consoleURL fields to HostedControlPlane and HostedCluster status. The HCP status controller conditionally watches and reads the guest cluster’s Console resource, updating HostedControlPlane status. HostedCluster reconciliation propagates the value through current and legacy paths. Operator capability and cache wiring support conditional Console handling, and an end-to-end health test verifies both statuses are populated and match.

Sequence Diagram(s)

sequenceDiagram
  participant GuestConsole as Guest Console resource
  participant HCPStatus as HCP status controller
  participant HCP as HostedControlPlane status
  participant HCReconciler as HostedCluster reconciler
  participant HC as HostedCluster status
  GuestConsole->>HCPStatus: Console event
  HCPStatus->>GuestConsole: Read console URL
  HCPStatus->>HCP: Update consoleURL
  HCReconciler->>HCP: Read consoleURL
  HCReconciler->>HC: Update consoleURL
Loading

Suggested reviewers: enxebre, bryan-cox

🚥 Pre-merge checks | ✅ 11
✅ Passed checks (11 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly matches the main change: exposing the console URL across hosted cluster, CPO, and HCCO components.
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 The added Ginkgo titles are static strings; no dynamic pod/node/namespace/IP/date values appear in any test names.
Test Structure And Quality ✅ Passed PASS: The new Ginkgo e2e test uses BeforeEach, explicit 10m/10s Eventually timeouts, and informative assertions; no cleanup or consistency issues were introduced.
Topology-Aware Scheduling Compatibility ✅ Passed Touched code only propagates ConsoleURL/capabilities and adds console watches/cache; no pod specs, nodeSelectors, affinity, topologySpreadConstraints, or PDB changes.
Ipv6 And Disconnected Network Test Compatibility ✅ Passed ValidateConsoleURLTest only reads HCP/HC status via the management client; it has no hardcoded IPs, URL construction, or external connectivity.
No-Weak-Crypto ✅ Passed No weak crypto, custom crypto, or secret/token comparisons were added; the diff only adds console-URL status plumbing and tests.
Container-Privileges ✅ Passed No changed file sets privileged/hostNetwork/hostPID/hostIPC true, allowPrivilegeEscalation true, or runAsUser:0; PR only touches status/CRD schema/code paths.
No-Sensitive-Data-In-Logs ✅ Passed No new log statements expose secrets, tokens, PII, or ConsoleURL; the only added log is a generic console fetch error.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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

@openshift-ci openshift-ci Bot added area/api Indicates the PR includes changes for the API area/cli Indicates the PR includes changes for CLI area/control-plane-operator Indicates the PR includes changes for the control plane operator - in an OCP release area/documentation Indicates the PR includes changes for documentation area/hypershift-operator Indicates the PR includes changes for the hypershift operator and API - outside an OCP release and removed do-not-merge/needs-area labels Jul 14, 2026
@openshift-ci
openshift-ci Bot requested review from cblecker and enxebre July 14, 2026 19:44

@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

🧹 Nitpick comments (1)
api/hypershift/v1beta1/hosted_controlplane.go (1)

363-369: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Use consistent URL validation on both status fields.

Length constraints alone allow malformed non-empty values to pass the API schema.

  • api/hypershift/v1beta1/hosted_controlplane.go#L363-L369: add URL/CEL validation for HostedControlPlaneStatus.ConsoleURL.
  • api/hypershift/v1beta1/hostedcluster_types.go#L2411-L2417: apply the identical validation to HostedClusterStatus.ConsoleURL.
🤖 Prompt for 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.

In `@api/hypershift/v1beta1/hosted_controlplane.go` around lines 363 - 369, The
ConsoleURL status fields currently validate only length and must also reject
malformed non-empty URLs. Add the same URL/CEL validation markers to
HostedControlPlaneStatus.ConsoleURL in
api/hypershift/v1beta1/hosted_controlplane.go (lines 363-369) and
HostedClusterStatus.ConsoleURL in api/hypershift/v1beta1/hostedcluster_types.go
(lines 2411-2417), preserving the existing optional and length constraints.
🤖 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
`@control-plane-operator/hostedclusterconfigoperator/controllers/hcpstatus/hcpstatus.go`:
- Around line 244-249: Update the Console retrieval branch around
h.hostedClusterClient.Get to clear hcp.Status.ConsoleURL when the resource is
NotFound, and return or requeue other retrieval errors so reconciliation does
not report success with stale status. Preserve assigning
console.Status.ConsoleURL on successful retrieval, using the controller’s
existing error classification and retry mechanism.

---

Nitpick comments:
In `@api/hypershift/v1beta1/hosted_controlplane.go`:
- Around line 363-369: The ConsoleURL status fields currently validate only
length and must also reject malformed non-empty URLs. Add the same URL/CEL
validation markers to HostedControlPlaneStatus.ConsoleURL in
api/hypershift/v1beta1/hosted_controlplane.go (lines 363-369) and
HostedClusterStatus.ConsoleURL in api/hypershift/v1beta1/hostedcluster_types.go
(lines 2411-2417), preserving the existing optional and length constraints.
🪄 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: a56bc590-64a2-4275-9e93-1d49e9f8bf94

📥 Commits

Reviewing files that changed from the base of the PR and between bbc1bc5 and 2230ccd.

⛔ Files ignored due to path filters (38)
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedclusters.hypershift.openshift.io/AAA_ungated.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedclusters.hypershift.openshift.io/ClusterUpdateAcceptRisks.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedclusters.hypershift.openshift.io/ClusterVersionOperatorConfiguration.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedclusters.hypershift.openshift.io/ExternalOIDC.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedclusters.hypershift.openshift.io/ExternalOIDCWithUIDAndExtraClaimMappings.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedclusters.hypershift.openshift.io/ExternalOIDCWithUpstreamParity.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedclusters.hypershift.openshift.io/GCPPlatform.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedclusters.hypershift.openshift.io/HCPEtcdBackup.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedclusters.hypershift.openshift.io/HyperShiftOnlyDynamicResourceAllocation.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedclusters.hypershift.openshift.io/ImageStreamImportMode.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedclusters.hypershift.openshift.io/KMSEncryptionProvider.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedclusters.hypershift.openshift.io/OpenStack.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedclusters.hypershift.openshift.io/TLSAdherence.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedcontrolplanes.hypershift.openshift.io/AAA_ungated.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedcontrolplanes.hypershift.openshift.io/ClusterUpdateAcceptRisks.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedcontrolplanes.hypershift.openshift.io/ClusterVersionOperatorConfiguration.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedcontrolplanes.hypershift.openshift.io/ExternalOIDC.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedcontrolplanes.hypershift.openshift.io/ExternalOIDCWithUIDAndExtraClaimMappings.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedcontrolplanes.hypershift.openshift.io/ExternalOIDCWithUpstreamParity.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedcontrolplanes.hypershift.openshift.io/GCPPlatform.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedcontrolplanes.hypershift.openshift.io/HCPEtcdBackup.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedcontrolplanes.hypershift.openshift.io/HyperShiftOnlyDynamicResourceAllocation.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedcontrolplanes.hypershift.openshift.io/ImageStreamImportMode.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedcontrolplanes.hypershift.openshift.io/KMSEncryptionProvider.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedcontrolplanes.hypershift.openshift.io/OpenStack.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedcontrolplanes.hypershift.openshift.io/TLSAdherence.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • client/applyconfiguration/hypershift/v1beta1/hostedclusterstatus.go is excluded by !client/**
  • client/applyconfiguration/hypershift/v1beta1/hostedcontrolplanestatus.go is excluded by !client/**
  • cmd/install/assets/crds/hypershift-operator/zz_generated.crd-manifests/hostedclusters-Hypershift-CustomNoUpgrade.crd.yaml is excluded by !**/zz_generated.crd-manifests/**, !cmd/install/assets/**/*.yaml
  • cmd/install/assets/crds/hypershift-operator/zz_generated.crd-manifests/hostedclusters-Hypershift-Default.crd.yaml is excluded by !**/zz_generated.crd-manifests/**, !cmd/install/assets/**/*.yaml
  • cmd/install/assets/crds/hypershift-operator/zz_generated.crd-manifests/hostedclusters-Hypershift-TechPreviewNoUpgrade.crd.yaml is excluded by !**/zz_generated.crd-manifests/**, !cmd/install/assets/**/*.yaml
  • cmd/install/assets/crds/hypershift-operator/zz_generated.crd-manifests/hostedcontrolplanes-Hypershift-CustomNoUpgrade.crd.yaml is excluded by !**/zz_generated.crd-manifests/**, !cmd/install/assets/**/*.yaml
  • cmd/install/assets/crds/hypershift-operator/zz_generated.crd-manifests/hostedcontrolplanes-Hypershift-Default.crd.yaml is excluded by !**/zz_generated.crd-manifests/**, !cmd/install/assets/**/*.yaml
  • cmd/install/assets/crds/hypershift-operator/zz_generated.crd-manifests/hostedcontrolplanes-Hypershift-TechPreviewNoUpgrade.crd.yaml is excluded by !**/zz_generated.crd-manifests/**, !cmd/install/assets/**/*.yaml
  • docs/content/reference/aggregated-docs.md is excluded by !docs/content/reference/aggregated-docs.md
  • docs/content/reference/api.md is excluded by !docs/content/reference/api.md
  • vendor/github.com/openshift/hypershift/api/hypershift/v1beta1/hosted_controlplane.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/hypershift/api/hypershift/v1beta1/hostedcluster_types.go is excluded by !vendor/**, !**/vendor/**
📒 Files selected for processing (5)
  • api/hypershift/v1beta1/hosted_controlplane.go
  • api/hypershift/v1beta1/hostedcluster_types.go
  • control-plane-operator/hostedclusterconfigoperator/controllers/hcpstatus/hcpstatus.go
  • hypershift-operator/controllers/hostedcluster/hostedcluster_controller.go
  • hypershift-operator/controllers/hostedcluster/reconcile_legacy.go

@codecov

codecov Bot commented Jul 14, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 50.45045% with 55 lines in your changes missing coverage. Please review.
✅ Project coverage is 44.15%. Comparing base (bbc1bc5) to head (d77cdcc).
⚠️ Report is 13 commits behind head on main.

Files with missing lines Patch % Lines
...rconfigoperator/controllers/hcpstatus/hcpstatus.go 56.96% 34 Missing ⚠️
...tor/hostedclusterconfigoperator/operator/config.go 0.00% 13 Missing ⚠️
...-plane-operator/hostedclusterconfigoperator/cmd.go 0.00% 7 Missing ⚠️
support/conditions/conditions.go 0.00% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #9008      +/-   ##
==========================================
+ Coverage   44.11%   44.15%   +0.04%     
==========================================
  Files         772      772              
  Lines       96098    96345     +247     
==========================================
+ Hits        42391    42544     +153     
- Misses      50765    50855      +90     
- Partials     2942     2946       +4     
Files with missing lines Coverage Δ
...trollers/hostedcluster/hostedcluster_controller.go 54.74% <100.00%> (+0.02%) ⬆️
.../capabilities/hosted_control_plane_capabilities.go 62.50% <100.00%> (+6.13%) ⬆️
support/conditions/conditions.go 0.00% <0.00%> (ø)
...-plane-operator/hostedclusterconfigoperator/cmd.go 0.00% <0.00%> (ø)
...tor/hostedclusterconfigoperator/operator/config.go 0.00% <0.00%> (ø)
...rconfigoperator/controllers/hcpstatus/hcpstatus.go 72.01% <56.96%> (+4.13%) ⬆️

... and 16 files with indirect coverage changes

Flag Coverage Δ
cmd-support 38.28% <90.00%> (-0.01%) ⬇️
cpo-hostedcontrolplane 46.17% <ø> (+0.10%) ⬆️
cpo-other 45.30% <45.45%> (+0.17%) ⬆️
hypershift-operator 54.10% <100.00%> (+<0.01%) ⬆️
other 32.19% <ø> (+0.07%) ⬆️

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.

@stevekuznetsov

Copy link
Copy Markdown
Contributor 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-v2-self-managed
/test e2e-kubevirt-aws-ovn-reduced
/test e2e-v2-aws
/test e2e-v2-gke

@cblecker cblecker left a comment

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.

Test coverage: The new Console URL propagation path doesn't have unit test coverage in hcpstatus_test.go. The existing test cases cover analogous flows (Authentication propagation, Authentication missing). A couple of cases would be straightforward: Console present with a URL set, and Console missing.

Nit: The block comment at hostedcluster_controller.go:1128 and reconcile_legacy.go:808 reads // Set the Control Plane and OAuth endpoints URL but now also propagates ConsoleURL.

@cwbotbot

cwbotbot commented Jul 14, 2026

Copy link
Copy Markdown

Test Results

e2e-aws

Failed Tests

Total failed tests: 8

  • TestKarpenter
  • TestKarpenter/Main
  • TestKarpenter/Main/Parallel_provisioning_tests
  • TestKarpenter/Main/Parallel_provisioning_tests/OpenshiftEC2NodeClass_Kubelet_propagation
  • TestNodePoolAutoscalingScaleFromZero

... and 3 more failed tests

e2e-aks

@stevekuznetsov
stevekuznetsov force-pushed the skuznets/expose-console-url branch from 2230ccd to 55927c6 Compare July 15, 2026 02:03
@openshift-ci openshift-ci Bot added the area/testing Indicates the PR includes changes for e2e testing label Jul 15, 2026

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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
hypershift-operator/controllers/hostedcluster/reconcile_legacy.go (1)

810-820: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Clear the HostedCluster URL when the HCP is absent.

If a prior reconcile populated hcluster.Status.ConsoleURL and the HCP GET now returns NotFound, this guarded assignment is skipped and the stale URL remains exposed. Explicitly clear ConsoleURL in the hcp == nil path.

Suggested fix
 if hcp != nil {
 	hcluster.Status.ControlPlaneEndpoint = hcp.Status.ControlPlaneEndpoint
 	hcluster.Status.OAuthCallbackURLTemplate = hcp.Status.OAuthCallbackURLTemplate
 	hcluster.Status.ConsoleURL = hcp.Status.ConsoleURL
+} else {
+	hcluster.Status.ConsoleURL = ""
 }
🤖 Prompt for 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.

In `@hypershift-operator/controllers/hostedcluster/reconcile_legacy.go` around
lines 810 - 820, Update the HCP status propagation block in the reconcile flow
to explicitly clear hcluster.Status.ConsoleURL when hcp is nil, while preserving
the existing assignment from hcp.Status.ConsoleURL when the HCP exists.
🤖 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 `@support/capabilities/hosted_control_plane_capabilities.go`:
- Around line 40-51: Add table-driven unit tests for IsConsoleCapabilityEnabled
covering nil capabilities, empty capabilities, an unrelated disabled capability,
and hyperv1.ConsoleCapability disabled; assert true for the first three cases
and false for the Console-disabled case.

In `@test/e2e/v2/tests/hosted_cluster_health_test.go`:
- Around line 203-215: Update the two MgmtClient.Get assertions in the
Eventually block to include diagnostic messages with each resource’s exact
namespace/name identity. Use the HostedControlPlane lookup’s hostedCluster.Name
and tc.ControlPlaneNamespace, and the HostedCluster lookup’s
ObjectKeyFromObject(hostedCluster) identity, while preserving the existing
Succeed expectations.
- Around line 194-196: Update the new It block in ValidateConsoleURLTest to
include the repository’s Console URL feature label, following the existing label
syntax and conventions. Ensure the test remains selectable through feature
filtering and add any required label to the surrounding Describe block per the
repository’s path-specific E2E conventions.

---

Outside diff comments:
In `@hypershift-operator/controllers/hostedcluster/reconcile_legacy.go`:
- Around line 810-820: Update the HCP status propagation block in the reconcile
flow to explicitly clear hcluster.Status.ConsoleURL when hcp is nil, while
preserving the existing assignment from hcp.Status.ConsoleURL when the HCP
exists.
🪄 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: 1d2365a0-e3a5-4211-8d84-1b6c2e862e82

📥 Commits

Reviewing files that changed from the base of the PR and between 2230ccd and 55927c6.

⛔ Files ignored due to path filters (38)
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedclusters.hypershift.openshift.io/AAA_ungated.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedclusters.hypershift.openshift.io/ClusterUpdateAcceptRisks.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedclusters.hypershift.openshift.io/ClusterVersionOperatorConfiguration.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedclusters.hypershift.openshift.io/ExternalOIDC.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedclusters.hypershift.openshift.io/ExternalOIDCWithUIDAndExtraClaimMappings.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedclusters.hypershift.openshift.io/ExternalOIDCWithUpstreamParity.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedclusters.hypershift.openshift.io/GCPPlatform.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedclusters.hypershift.openshift.io/HCPEtcdBackup.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedclusters.hypershift.openshift.io/HyperShiftOnlyDynamicResourceAllocation.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedclusters.hypershift.openshift.io/ImageStreamImportMode.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedclusters.hypershift.openshift.io/KMSEncryptionProvider.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedclusters.hypershift.openshift.io/OpenStack.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedclusters.hypershift.openshift.io/TLSAdherence.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedcontrolplanes.hypershift.openshift.io/AAA_ungated.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedcontrolplanes.hypershift.openshift.io/ClusterUpdateAcceptRisks.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedcontrolplanes.hypershift.openshift.io/ClusterVersionOperatorConfiguration.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedcontrolplanes.hypershift.openshift.io/ExternalOIDC.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedcontrolplanes.hypershift.openshift.io/ExternalOIDCWithUIDAndExtraClaimMappings.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedcontrolplanes.hypershift.openshift.io/ExternalOIDCWithUpstreamParity.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedcontrolplanes.hypershift.openshift.io/GCPPlatform.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedcontrolplanes.hypershift.openshift.io/HCPEtcdBackup.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedcontrolplanes.hypershift.openshift.io/HyperShiftOnlyDynamicResourceAllocation.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedcontrolplanes.hypershift.openshift.io/ImageStreamImportMode.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedcontrolplanes.hypershift.openshift.io/KMSEncryptionProvider.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedcontrolplanes.hypershift.openshift.io/OpenStack.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedcontrolplanes.hypershift.openshift.io/TLSAdherence.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • client/applyconfiguration/hypershift/v1beta1/hostedclusterstatus.go is excluded by !client/**
  • client/applyconfiguration/hypershift/v1beta1/hostedcontrolplanestatus.go is excluded by !client/**
  • cmd/install/assets/crds/hypershift-operator/zz_generated.crd-manifests/hostedclusters-Hypershift-CustomNoUpgrade.crd.yaml is excluded by !**/zz_generated.crd-manifests/**, !cmd/install/assets/**/*.yaml
  • cmd/install/assets/crds/hypershift-operator/zz_generated.crd-manifests/hostedclusters-Hypershift-Default.crd.yaml is excluded by !**/zz_generated.crd-manifests/**, !cmd/install/assets/**/*.yaml
  • cmd/install/assets/crds/hypershift-operator/zz_generated.crd-manifests/hostedclusters-Hypershift-TechPreviewNoUpgrade.crd.yaml is excluded by !**/zz_generated.crd-manifests/**, !cmd/install/assets/**/*.yaml
  • cmd/install/assets/crds/hypershift-operator/zz_generated.crd-manifests/hostedcontrolplanes-Hypershift-CustomNoUpgrade.crd.yaml is excluded by !**/zz_generated.crd-manifests/**, !cmd/install/assets/**/*.yaml
  • cmd/install/assets/crds/hypershift-operator/zz_generated.crd-manifests/hostedcontrolplanes-Hypershift-Default.crd.yaml is excluded by !**/zz_generated.crd-manifests/**, !cmd/install/assets/**/*.yaml
  • cmd/install/assets/crds/hypershift-operator/zz_generated.crd-manifests/hostedcontrolplanes-Hypershift-TechPreviewNoUpgrade.crd.yaml is excluded by !**/zz_generated.crd-manifests/**, !cmd/install/assets/**/*.yaml
  • docs/content/reference/aggregated-docs.md is excluded by !docs/content/reference/aggregated-docs.md
  • docs/content/reference/api.md is excluded by !docs/content/reference/api.md
  • vendor/github.com/openshift/hypershift/api/hypershift/v1beta1/hosted_controlplane.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/hypershift/api/hypershift/v1beta1/hostedcluster_types.go is excluded by !vendor/**, !**/vendor/**
📒 Files selected for processing (9)
  • api/hypershift/v1beta1/hosted_controlplane.go
  • api/hypershift/v1beta1/hostedcluster_types.go
  • control-plane-operator/hostedclusterconfigoperator/cmd.go
  • control-plane-operator/hostedclusterconfigoperator/controllers/hcpstatus/hcpstatus.go
  • control-plane-operator/hostedclusterconfigoperator/operator/config.go
  • hypershift-operator/controllers/hostedcluster/hostedcluster_controller.go
  • hypershift-operator/controllers/hostedcluster/reconcile_legacy.go
  • support/capabilities/hosted_control_plane_capabilities.go
  • test/e2e/v2/tests/hosted_cluster_health_test.go
🚧 Files skipped from review as they are similar to previous changes (3)
  • hypershift-operator/controllers/hostedcluster/hostedcluster_controller.go
  • api/hypershift/v1beta1/hosted_controlplane.go
  • api/hypershift/v1beta1/hostedcluster_types.go

Comment thread support/capabilities/hosted_control_plane_capabilities.go
Comment thread test/e2e/v2/tests/hosted_cluster_health_test.go
Comment thread test/e2e/v2/tests/hosted_cluster_health_test.go
@hypershift-jira-solve-ci

Copy link
Copy Markdown
Contributor

Now I have the complete picture. Let me produce the final report.

Test Failure Analysis Complete

Job Information

Test Failure Analysis

Error

codecov/patch:   16.66% of diff hit (target 44.11%) — 27.45 percentage points below threshold
codecov/project: 44.08% (-0.03%) compared to base bbc1bc5 — project coverage decreased

Summary

The PR adds 100 new lines across 5 files to expose the OpenShift console URL through the HCP status, but only 17 of those lines are covered by tests (16.66% patch coverage). The codecov/patch check fails because patch coverage is 27.45 percentage points below the target threshold of 44.11% (matching the base branch's overall project coverage). The codecov/project check fails because overall project coverage dropped from 44.11% to 44.08%. Four files contribute uncovered code: hcpstatus.go (13 missing lines + 1 partial), hosted_control_plane_capabilities.go (9 missing lines), config.go (5 missing lines), and cmd.go (2 missing lines). Only hostedcluster_controller.go has 100% patch coverage.

Root Cause

The PR introduces a new feature to expose the OpenShift console URL through the HostedControlPlane status, but the new code paths lack unit test coverage. Specifically:

  1. support/capabilities/hosted_control_plane_capabilities.go — The entirely new function IsConsoleCapabilityEnabled() (lines 40–51) has zero test coverage. This function checks whether the Console capability is disabled in the capabilities spec.

  2. control-plane-operator/hostedclusterconfigoperator/controllers/hcpstatus/hcpstatus.go — Two critical code blocks are uncovered:

    • The Setup function additions (lines 62–69): the new watch for configv1.Console resources via consoleMapper when the console capability is enabled
    • The reconcile function additions (lines 250–262): the block that fetches the Console resource from the cluster (Get call), handles IsNotFound and generic errors, and sets hcp.Status.ConsoleURL = console.Status.ConsoleURL
  3. control-plane-operator/hostedclusterconfigoperator/operator/config.go — All 5 new lines are uncovered, including the new Capabilities field, the changed Mgr() return signature, the conditional configv1.Console{} cache setup, and the updated return statement. This file had 0% coverage before the PR.

  4. control-plane-operator/hostedclusterconfigoperator/cmd.go — Both modified lines are uncovered (the updated mgr, hcpCapabilities := operator.Mgr(...) call and the new Capabilities: hcpCapabilities field assignment). This file also had 0% coverage before the PR.

The only file with full patch coverage is hypershift-operator/controllers/hostedcluster/hostedcluster_controller.go (100%), which already has an extensive test suite.

These are not infrastructure or flaky failures — they are legitimate coverage gaps in the newly added feature code.

Recommendations
  1. Add unit tests for IsConsoleCapabilityEnabled() in support/capabilities/ — test cases for: capability nil, capability with Console not listed, capability with Console explicitly disabled, and capability with Console enabled. This alone covers 9 of the 30 missing lines.

  2. Add unit tests for the console URL reconciliation logic in hcpstatus.go — test the reconcile path where:

    • Console resource exists → ConsoleURL is set correctly
    • Console resource is not found → ConsoleURL is not set (no error)
    • Console resource fetch returns a generic error → error is propagated
      This covers 13 of the 30 missing lines.
  3. For config.go and cmd.go (7 missing lines) — these files have 0% coverage baseline. Adding targeted tests may not be practical short-term. Consider either:

    • Accepting these as pre-existing coverage debt (they were already at 0%)
    • Adding integration-level tests if the team wants to improve coverage in these areas
  4. Addressing items 1 and 2 alone would bring patch coverage from 16.66% to approximately 83%, well above the 44.11% threshold, and would make both codecov checks pass.

Evidence
Evidence Detail
Patch coverage 16.66% (target: 44.11%) — 27.45pp below threshold
Project coverage delta 44.11% → 44.08% (-0.03%)
Lines added 100 new lines, 17 hits, 80 misses, 3 partials
hosted_control_plane_capabilities.go 0% patch coverage, 9 lines missing — new IsConsoleCapabilityEnabled() function entirely untested
hcpstatus.go 26.31% patch coverage, 13 lines missing + 1 partial — Console watch setup and reconcile logic uncovered
config.go 0% patch coverage, 5 lines missing — file had 0% baseline coverage
cmd.go 0% patch coverage, 2 lines missing — file had 0% baseline coverage
hostedcluster_controller.go 100% patch coverage — the only fully covered file
Coverage flag impact cmd-support -0.06%, cpo-other -0.05%
Codecov detail URL https://app.codecov.io/gh/openshift/hypershift/pull/9008

@deads2k deads2k changed the title feat: ho,cpo,hcco: expose console URL CNTRLPLANE-3843: feat: ho,cpo,hcco: expose console URL Jul 15, 2026
@openshift-ci-robot openshift-ci-robot added the jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. label Jul 15, 2026
@openshift-ci-robot

openshift-ci-robot commented Jul 15, 2026

Copy link
Copy Markdown

@stevekuznetsov: This pull request references CNTRLPLANE-3843 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the story to target the "5.0.0" version, but no target version was set.

Details

In response to this:

Service operators would like to expose the console URL to users, and users control how the console URL actually gets routed by changing config in the cluster, so we need to read it from the cluster for the correct source of truth.

Summary by CodeRabbit

  • New Features
  • Hosted cluster status now includes the OpenShift web console URL.
  • HostedControlPlane and HostedCluster statuses are synchronized so the HostedCluster reports the same console URL as its HostedControlPlane.
  • Console URL population is capability-gated to run only when the console capability is enabled.
  • Tests
  • Added an end-to-end health test that verifies both resources expose a non-empty console URL and that the values match.

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.

@stevekuznetsov
stevekuznetsov force-pushed the skuznets/expose-console-url branch from e9b183b to 93ae40f Compare July 15, 2026 13:33
@coderabbitai

coderabbitai Bot commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

Caution

Failed to replace (edit) comment. This is likely due to insufficient permissions or the comment being deleted.

Error details
putComment timed out

Comment thread test/e2e/v2/tests/hosted_cluster_health_test.go
@stevekuznetsov
stevekuznetsov force-pushed the skuznets/expose-console-url branch from 7a05bcb to 08f5f8d Compare July 15, 2026 15:52
@openshift-ci openshift-ci Bot removed the lgtm Indicates that a PR is ready to be merged. label Jul 15, 2026
@cblecker

Copy link
Copy Markdown
Member

@stevekuznetsov I think your agent may have gone the opposite direction and removed the MaxLength everywhere as opposed to validating it?

@stevekuznetsov

Copy link
Copy Markdown
Contributor Author

@cblecker I didn't realize we had some weird "linter" enforcing things like "all string fields in the API have a max length", so I removed it. Sigh.

@stevekuznetsov
stevekuznetsov force-pushed the skuznets/expose-console-url branch from 08f5f8d to e012927 Compare July 15, 2026 20:39
@stevekuznetsov

Copy link
Copy Markdown
Contributor 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-v2-self-managed
/test e2e-kubevirt-aws-ovn-reduced
/test e2e-v2-aws
/test e2e-v2-gke

@cblecker cblecker left a comment

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.

ValidHostedClusterStatus needs version-gating and upgrade-context exclusions following the ConfigOperatorReconciliationSucceeded pattern at test/e2e/util/util.go:3126-3134. HCCO is delivered via the OCP payload — during upgrades the old HCCO won't set this condition, so the HC controller synthesizes Unknown while ExpectedHCConditions expects True.

In test/e2e/util/util.go around line 3135:

if IsLessThan(Version424) {
    delete(expectedConditions, hyperv1.ValidHostedClusterStatus)
}
if upgradeContext != nil {
    delete(expectedConditions, hyperv1.ValidHostedClusterStatus)
}

In test/e2e/v2/tests/hosted_cluster_health_test.go around line 69 (v2 doesn't use upgrade context):

if e2eutil.IsLessThan(e2eutil.Version424) {
    delete(expectedConditions, hyperv1.ValidHostedClusterStatus)
}

A Version424 constant needs to be added to test/e2e/util/version.go.

Comment thread support/conditions/conditions.go
Comment thread control-plane-operator/hostedclusterconfigoperator/operator/config.go Outdated
Comment thread api/hypershift/v1beta1/hostedcluster_types.go
@stevekuznetsov
stevekuznetsov force-pushed the skuznets/expose-console-url branch 2 times, most recently from a9c9b00 to 9366ce5 Compare July 16, 2026 14:24
@stevekuznetsov

Copy link
Copy Markdown
Contributor Author

seems like an unrelated flake in unit:

--- FAIL: TestDialDirectWithProxy (5.00s)
    --- FAIL: TestDialDirectWithProxy/When_HTTPS_PROXY_is_set_it_should_route_through_the_proxy (5.00s)
        dialer_test.go:397: 
            read should succeed
            Unexpected error:
                <*errors.errorString | 0x1d98920>: 
                unexpected EOF
                {s: "unexpected EOF"}
            occurred

hyperv1.ReconciliationSucceeded: metav1.ConditionTrue,
hyperv1.ConfigOperatorReconciliationSucceeded: metav1.ConditionTrue,
hyperv1.ValidHostedControlPlaneConfiguration: metav1.ConditionTrue,
hyperv1.ValidHostedClusterStatus: metav1.ConditionTrue,

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.

The prior HCCO-set conditions all have version guards in ValidateHostedClusterConditionsTest (DataPlaneConnectionAvailable for <4.21, ControlPlaneConnectionAvailable for <4.22, ConfigOperatorReconciliationSucceeded for <4.23). Should ValidHostedClusterStatus get the same treatment? Without it, the upgrade e2e test would fail when the new test binary runs against a hosted cluster whose HCCO (from the old release image) doesn't set this condition yet.

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.

the file has a version guard already

Service operators would like to expose the console URL to users, and
users control how the console URL actually gets routed by changing
config in the cluster, so we need to read it from the cluster for the
correct source of truth.

Signed-off-by: Steve Kuznetsov <stekuznetsov@microsoft.com>
@stevekuznetsov
stevekuznetsov force-pushed the skuznets/expose-console-url branch from 9366ce5 to d77cdcc Compare July 16, 2026 15:05
@stevekuznetsov

Copy link
Copy Markdown
Contributor 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-v2-self-managed
/test e2e-kubevirt-aws-ovn-reduced
/test e2e-v2-aws
/test e2e-v2-gke

Comment thread control-plane-operator/hostedclusterconfigoperator/cmd.go
hcpstatus.Setup was removed from controllerFuncs because its
constructor now needs capabilities, but allControllers() builds
its list by iterating controllerFuncs. This meant the hcpstatus
controller name was never in o.Controllers, making the special-case
in the Run loop unreachable and the controller never started.

Signed-off-by: Cesar Wong <cewong@redhat.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@csrwng

csrwng commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

/pipeline required
/retest

@csrwng

csrwng commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

/test e2e-aws

@cblecker

Copy link
Copy Markdown
Member

/test e2e-aws images okd-scos-images verify-deps

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

Copy link
Copy Markdown
Contributor

Tests from second stage were triggered manually. Pipeline can be controlled only manually, until HEAD changes. Use command to trigger second stage.

@openshift-ci

openshift-ci Bot commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: bryan-cox, cblecker, csrwng, stevekuznetsov

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

@cblecker

Copy link
Copy Markdown
Member

/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-v2-self-managed
/test e2e-kubevirt-aws-ovn-reduced
/test e2e-v2-aws
/test e2e-v2-gke

@openshift-ci

openshift-ci Bot commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

@stevekuznetsov: 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-aws 9c3308e link true /test e2e-aws

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.

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/api Indicates the PR includes changes for the API area/cli Indicates the PR includes changes for CLI area/control-plane-operator Indicates the PR includes changes for the control plane operator - in an OCP release area/documentation Indicates the PR includes changes for documentation area/hypershift-operator Indicates the PR includes changes for the hypershift operator and API - outside an OCP release 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.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants