Skip to content

OCPBUGS-81511: Remove unscoped CSV watch from ClusterNotUpgradeableAlert - #16904

Merged
openshift-merge-bot[bot] merged 1 commit into
openshift:mainfrom
rsacherer:ocpbugs-81511-remove-csv-watch
Aug 10, 2026
Merged

OCPBUGS-81511: Remove unscoped CSV watch from ClusterNotUpgradeableAlert#16904
openshift-merge-bot[bot] merged 1 commit into
openshift:mainfrom
rsacherer:ocpbugs-81511-remove-csv-watch

Conversation

@rsacherer

@rsacherer rsacherer commented Aug 4, 2026

Copy link
Copy Markdown

The ClusterNotUpgradeableAlert component fetched all ClusterServiceVersions cluster-wide (resulting in up to 600MB object sizes in the browser on clusters with 350+ namespaces and lot's of operators) on every visit to Cluster Settings when Upgradeable=False was set.

The only use of CSVs was to decide whether or not to show navigation links.

For installed operators this was ineffective: CSV status.conditions use phase/reason fields, not type/status, so getConditionUpgradeableFalse() always returned undefined on CSVs — meaning notUpgradeableCSVsPresent was permanently false and the 'View installed Operators' link was never shown.

Additionally the link URL used /k8s/ns/all-namespaces/ instead of /k8s/all-namespaces/, causing 'No Operators found' on navigation.

Fix: remove both the ClusterOperator and CSV watches. Both navigation links are now always shown when the alert renders — correct since the alert only mounts when Upgradeable=False is already confirmed on ClusterVersion. Use resourceListPathFromModel() for the correct all-namespaces URL.

https://issues.redhat.com/browse/OCPBUGS-81511

Analysis / Root cause:
The ClusterNotUpgradeableAlert component fetched all ClusterServiceVersions
cluster-wide (resulting in up to 600MB object sizes in the browser on clusters
with 350+ namespaces and lots of operators) on every visit to Cluster Settings
when Upgradeable=False was set.

The only use of CSVs was to decide whether or not to show navigation links.

For installed operators this was ineffective: CSV status.conditions use
phase/reason fields, not type/status, so getConditionUpgradeableFalse() always
returned undefined on CSVs — meaning notUpgradeableCSVsPresent was permanently
false and the 'View installed Operators' link was never shown.

Additionally the link URL used /k8s/ns/all-namespaces/ instead of
/k8s/all-namespaces/, causing 'No Operators found' on navigation.

Solution description:
Remove both the ClusterOperator and CSV watches. Both navigation links are now
always shown when the alert renders — correct since the alert only mounts when
Upgradeable=False is already confirmed on ClusterVersion. Use
resourceListPathFromModel() for the correct all-namespaces URL.

https://issues.redhat.com/browse/OCPBUGS-81511

Test setup:

  1. Create fake ClusterOperators with Upgradeable=False to trigger the alert:
    oc apply -f - <<EOF
    apiVersion: config.openshift.io/v1
    kind: ClusterOperator
    metadata:
    name: test-upgrade-blocker
    spec: {}
    EOF
    oc patch co test-upgrade-blocker --subresource=status --type=merge -p '{"status":{"conditions":[{"type":"Upgradeable","status":"False","reason":"Test","message":"Test block","lastTransitionTime":"2026-08-04T10:00:00Z"},{"type":"Available","
    status":"True","lastTransitionTime":"2026-08-04T10:00:00Z"},{"type":"Degraded","status":"False","lastTransitionTime":"2026-08-04T10:00:00Z"},{"type":"Progressing","status":"False","lastTransitionTime":"2026-08-04T10:00:00Z"}]}}'
  2. Navigate to Administration → Cluster Settings
  3. Open DevTools → Network, filter on clusterserviceversions

Test cases:

  • With cluster upgradeable (normal state): no clusterserviceversions request fires on Cluster Settings page load
  • With Upgradeable=False set: alert renders, no clusterserviceversions LIST request fires, both "View ClusterOperators" and "View installed Operators" links are visible
  • Clicking "View installed Operators" navigates correctly to the all-namespaces installed operators list

Browser conformance:

  • Firefox

Summary by CodeRabbit

  • Bug Fixes
    • Improved the cluster upgrade warning with clearer links to ClusterOperators and installed Operators.
    • Updated the installed Operators link to use the appropriate resource list, including all namespaces.
    • Ensured the warning displays the relevant ClusterVersion condition message.

@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-robot openshift-ci-robot added the jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. label Aug 4, 2026
@openshift-ci-robot

Copy link
Copy Markdown
Contributor

@rsacherer: This pull request references Jira Issue OCPBUGS-81511, which is invalid:

  • expected the bug to target either version "5.0." or "openshift-5.0.", but it targets "4.22.0" 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:

The ClusterNotUpgradeableAlert component fetched all ClusterServiceVersions cluster-wide (resulting in up to 600MB object sizes in the browser on clusters with 350+ namespaces and lot's of operators) on every visit to Cluster Settings when Upgradeable=False was set.

The only use of CSVs was to decide whether or not to show navigation links.

For installed operators this was ineffective: CSV status.conditions use phase/reason fields, not type/status, so getConditionUpgradeableFalse() always returned undefined on CSVs — meaning notUpgradeableCSVsPresent was permanently false and the 'View installed Operators' link was never shown.

Additionally the link URL used /k8s/ns/all-namespaces/ instead of /k8s/all-namespaces/, causing 'No Operators found' on navigation.

Fix: remove both the ClusterOperator and CSV watches. Both navigation links are now always shown when the alert renders — correct since the alert only mounts when Upgradeable=False is already confirmed on ClusterVersion. Use resourceListPathFromModel() for the correct all-namespaces URL.

https://issues.redhat.com/browse/OCPBUGS-81511

Analysis / Root cause:
The ClusterNotUpgradeableAlert component fetched all ClusterServiceVersions
cluster-wide (resulting in up to 600MB object sizes in the browser on clusters
with 350+ namespaces and lots of operators) on every visit to Cluster Settings
when Upgradeable=False was set.

The only use of CSVs was to decide whether or not to show navigation links.

For installed operators this was ineffective: CSV status.conditions use
phase/reason fields, not type/status, so getConditionUpgradeableFalse() always
returned undefined on CSVs — meaning notUpgradeableCSVsPresent was permanently
false and the 'View installed Operators' link was never shown.

Additionally the link URL used /k8s/ns/all-namespaces/ instead of
/k8s/all-namespaces/, causing 'No Operators found' on navigation.

Solution description:
Remove both the ClusterOperator and CSV watches. Both navigation links are now
always shown when the alert renders — correct since the alert only mounts when
Upgradeable=False is already confirmed on ClusterVersion. Use
resourceListPathFromModel() for the correct all-namespaces URL.

https://issues.redhat.com/browse/OCPBUGS-81511

Test setup:

  1. Create fake ClusterOperators with Upgradeable=False to trigger the alert:
    oc apply -f - <<EOF
    apiVersion: config.openshift.io/v1
    kind: ClusterOperator
    metadata:
    name: test-upgrade-blocker
    spec: {}
    EOF
    oc patch co test-upgrade-blocker --subresource=status --type=merge -p '{"status":{"conditions":[{"type":"Upgradeable","status":"False","reason":"Test","message":"Test block","lastTransitionTime":"2026-08-04T10:00:00Z"},{"type":"Available","
    status":"True","lastTransitionTime":"2026-08-04T10:00:00Z"},{"type":"Degraded","status":"False","lastTransitionTime":"2026-08-04T10:00:00Z"},{"type":"Progressing","status":"False","lastTransitionTime":"2026-08-04T10:00:00Z"}]}}'
  2. Navigate to Administration → Cluster Settings
  3. Open DevTools → Network, filter on clusterserviceversions

Test cases:

  • With cluster upgradeable (normal state): no clusterserviceversions request fires on Cluster Settings page load
  • With Upgradeable=False set: alert renders, no clusterserviceversions LIST request fires, both "View ClusterOperators" and "View installed Operators" links are visible
  • Clicking "View installed Operators" navigates correctly to the all-namespaces installed operators list

Browser conformance:

  • Firefox

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 openshift-ci-robot added the jira/invalid-bug Indicates that a referenced Jira bug is invalid for the branch this PR is targeting. label Aug 4, 2026
@coderabbitai

coderabbitai Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Walkthrough

The cluster upgrade alert no longer checks watched resources before rendering actions. It always shows ClusterOperators and installed Operators links. The installed Operators link uses the shared resource-list path utility. Tests cover the alert message and link URLs.

Changes

Cluster upgrade alert

Layer / File(s) Summary
Alert links and validation
frontend/public/components/cluster-settings/cluster-settings-utils.tsx, frontend/public/module/k8s/cluster-settings.ts, frontend/public/components/__tests__/cluster-settings.spec.tsx
The alert removes resource watch checks and not-upgradeable filtering. It always renders both operator links. The installed Operators link uses resourceListPathFromModel(ClusterServiceVersionModel). Tests verify the condition message and both navigation URLs.

Estimated code review effort: 2 (Simple) | ~10 minutes

Suggested reviewers: jhadvig, rhamilto

🚥 Pre-merge checks | ✅ 15
✅ Passed checks (15 passed)
Check name Status Explanation
Description check ✅ Passed The description includes the root cause, solution, test setup, test cases, Jira issue, and browser coverage; some optional template sections remain incomplete.
Title check ✅ Passed The title identifies the Jira issue and clearly describes removal of the unscoped CSV watch from ClusterNotUpgradeableAlert.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
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 Jest test titles are static and descriptive; none contains generated names, timestamps, UUIDs, node or namespace values, or other run-dependent data.
Test Structure And Quality ✅ Passed The changed test is Jest/React Testing Library code using describe/it/expect, not Ginkgo code; the Ginkgo-specific requirements do not apply.
Microshift Test Compatibility ✅ Passed The pull request adds a Jest/React TypeScript unit test, not a new Ginkgo e2e test; the MicroShift API compatibility check is therefore not applicable.
Single Node Openshift (Sno) Test Compatibility ✅ Passed The only added tests are Jest/Testing Library unit tests in a frontend .spec.tsx file; no Ginkgo e2e test or multi-node/SNO assumption was added.
Topology-Aware Scheduling Compatibility ✅ Passed The patch only changes frontend alert logic, a helper export, and unit tests; it adds no deployment manifests, controllers, operators, replicas, affinities, selectors, tolerations, or topology cons...
Ote Binary Stdout Contract ✅ Passed The commit changes only frontend TS/TSX files and adds no OTE binary, suite setup, or process-level stdout write.
Ipv6 And Disconnected Network Test Compatibility ✅ Passed The PR adds a Jest/Testing Library React unit test, not a Ginkgo e2e test; the changed lines contain no IPv4 assumptions or external connectivity.
No-Weak-Crypto ✅ Passed The PR changes only alert rendering, links, tests, and resource filtering; scans of all three changed files found no weak crypto, custom crypto, or secret-comparison code.
Container-Privileges ✅ Passed The PR changes only three TypeScript/TSX files. The patch adds no container/Kubernetes manifests or privilege indicators such as privileged, hostPID, SYS_ADMIN, or allowPrivilegeEscalation.
No-Sensitive-Data-In-Logs ✅ Passed The PR adds no logging. Existing console.error calls log static sort-error context and an exception, with no passwords, tokens, API keys, PII, session IDs, hostnames, or customer data.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@openshift-ci
openshift-ci Bot requested review from jhadvig and rhamilto August 4, 2026 13:01
@openshift-ci openshift-ci Bot added component/core Related to console core functionality needs-ok-to-test Indicates a PR that requires an org member to verify it is safe to test. labels Aug 4, 2026
@openshift-ci

openshift-ci Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Hi @rsacherer. Thanks for your PR.

I'm waiting for a openshift member to verify that this patch is reasonable to test. If it is, they should reply with /ok-to-test on its own line. Until that is done, I will not automatically test new commits in this PR, but the usual testing commands by org members will still work.

Regular contributors should join the org to skip this step.

Once the patch is verified, the new status will be reflected by the ok-to-test label.

I understand the commands that are listed here.

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.

@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 (1)
frontend/public/components/cluster-settings/cluster-settings.tsx (1)

1131-1143: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Add a regression test for the link behavior.

Render ClusterNotUpgradeableAlert with Upgradeable=False and verify both link labels. Also verify that the installed Operator link uses the all-namespaces path generated from ClusterServiceVersionModel. This protects both user-visible changes from regression.

🤖 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 `@frontend/public/components/cluster-settings/cluster-settings.tsx` around
lines 1131 - 1143, Add a regression test for ClusterNotUpgradeableAlert with
Upgradeable set to False, asserting both “View ClusterOperators” and “View
installed Operators” labels and verifying the installed Operators link uses the
all-namespaces path generated by
resourceListPathFromModel(ClusterServiceVersionModel).
🤖 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.

Nitpick comments:
In `@frontend/public/components/cluster-settings/cluster-settings.tsx`:
- Around line 1131-1143: Add a regression test for ClusterNotUpgradeableAlert
with Upgradeable set to False, asserting both “View ClusterOperators” and “View
installed Operators” labels and verifying the installed Operators link uses the
all-namespaces path generated by
resourceListPathFromModel(ClusterServiceVersionModel).

ℹ️ Review info
⚙️ Run configuration

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

Review profile: CHILL

Plan: Pro Plus

Run ID: a051259a-6ca4-4bc2-a0a2-a24a3832e5b1

📥 Commits

Reviewing files that changed from the base of the PR and between 8d7d331 and b578bbd.

📒 Files selected for processing (1)
  • frontend/public/components/cluster-settings/cluster-settings.tsx

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

Talked about this in a call and we are OK with this change

/lgtm

@logonoff

logonoff commented Aug 4, 2026

Copy link
Copy Markdown
Member

/ok-to-test

@openshift-ci openshift-ci Bot added ok-to-test Indicates a non-member PR verified by an org member that is safe to test. and removed needs-ok-to-test Indicates a PR that requires an org member to verify it is safe to test. labels Aug 4, 2026
@openshift-ci openshift-ci Bot added the lgtm Indicates that a PR is ready to be merged. label Aug 4, 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-gcp-console
/test e2e-playwright

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

logonoff commented Aug 4, 2026

Copy link
Copy Markdown
Member

/hold

valid frontend test failure

@openshift-ci openshift-ci Bot added the do-not-merge/hold Indicates that a PR should not merge because someone has issued a /hold command. label Aug 4, 2026
@rsacherer
rsacherer force-pushed the ocpbugs-81511-remove-csv-watch branch from b578bbd to 46125c6 Compare August 5, 2026 12:24
@openshift-ci openshift-ci Bot removed the lgtm Indicates that a PR is ready to be merged. label Aug 5, 2026
@coderabbitai

coderabbitai Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Note

GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer.

@rsacherer

Copy link
Copy Markdown
Author

Fixed the unused export, and included a test-case to check that the alert is printed with both URLs.

@rsacherer

Copy link
Copy Markdown
Author

/retest-required

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

/lgtm

@logonoff

logonoff commented Aug 5, 2026

Copy link
Copy Markdown
Member

/unhold

@openshift-ci openshift-ci Bot removed the do-not-merge/hold Indicates that a PR should not merge because someone has issued a /hold command. label Aug 5, 2026
@logonoff

logonoff commented Aug 5, 2026

Copy link
Copy Markdown
Member

/jira refresh

@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-gcp-console
/test e2e-playwright

@rsacherer

Copy link
Copy Markdown
Author

/retest

@rsacherer

Copy link
Copy Markdown
Author

/test e2e-gcp-console

@rsacherer

Copy link
Copy Markdown
Author

/test e2e-playwright

@jhadvig

jhadvig commented Aug 7, 2026

Copy link
Copy Markdown
Member

/label plugin-api-approved

@openshift-ci openshift-ci Bot added the plugin-api-approved Indicates a PR with plugin API changes has been approved by an API reviewer label Aug 7, 2026
@jhadvig

jhadvig commented Aug 7, 2026

Copy link
Copy Markdown
Member

e2e-gcp-console: fails on Debug pod > debug terminal with xterm dimensions TypeError - unrelated to cluster settings. e2e-playwright: fails on upstream configuration modal DOM detachment - different component on the same page. The test that directly covers this PR's code (upgradeable-false.spec.ts) passed in e2e-playwright-techpreview, and unit tests passed in ci/prow/frontend.

/override ci/prow/e2e-gcp-console ci/prow/e2e-playwright

@jhadvig

jhadvig commented Aug 7, 2026

Copy link
Copy Markdown
Member

/approve

@openshift-ci

openshift-ci Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

@jhadvig: Overrode contexts on behalf of jhadvig: ci/prow/e2e-gcp-console, ci/prow/e2e-playwright

Details

In response to this:

e2e-gcp-console: fails on Debug pod > debug terminal with xterm dimensions TypeError - unrelated to cluster settings. e2e-playwright: fails on upstream configuration modal DOM detachment - different component on the same page. The test that directly covers this PR's code (upgradeable-false.spec.ts) passed in e2e-playwright-techpreview, and unit tests passed in ci/prow/frontend.

/override ci/prow/e2e-gcp-console ci/prow/e2e-playwright

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 Aug 7, 2026

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: jhadvig, logonoff, rsacherer

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

@jhadvig

jhadvig commented Aug 10, 2026

Copy link
Copy Markdown
Member

/verified by CI

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

Copy link
Copy Markdown
Contributor

@jhadvig: This PR has been marked as verified by CI.

Details

In response to this:

/verified by CI

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.

@rsacherer

Copy link
Copy Markdown
Author

/test images

@rsacherer

Copy link
Copy Markdown
Author

images seems to have failed with:
cypress@npm:15.13.0 STDERR [FAILED] getaddrinfo ENOTFOUND download.cypress.io ...

@openshift-merge-bot

Copy link
Copy Markdown
Contributor

/retest-required

Remaining retests: 0 against base HEAD 6a276d0 and 2 for PR HEAD 9ee6f5c in total

@openshift-ci

openshift-ci Bot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

@rsacherer: 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 77915eb into openshift:main Aug 10, 2026
11 checks passed
@openshift-ci-robot

Copy link
Copy Markdown
Contributor

@rsacherer: Jira Issue Verification Checks: Jira Issue OCPBUGS-81511
✔️ 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-81511 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:

The ClusterNotUpgradeableAlert component fetched all ClusterServiceVersions cluster-wide (resulting in up to 600MB object sizes in the browser on clusters with 350+ namespaces and lot's of operators) on every visit to Cluster Settings when Upgradeable=False was set.

The only use of CSVs was to decide whether or not to show navigation links.

For installed operators this was ineffective: CSV status.conditions use phase/reason fields, not type/status, so getConditionUpgradeableFalse() always returned undefined on CSVs — meaning notUpgradeableCSVsPresent was permanently false and the 'View installed Operators' link was never shown.

Additionally the link URL used /k8s/ns/all-namespaces/ instead of /k8s/all-namespaces/, causing 'No Operators found' on navigation.

Fix: remove both the ClusterOperator and CSV watches. Both navigation links are now always shown when the alert renders — correct since the alert only mounts when Upgradeable=False is already confirmed on ClusterVersion. Use resourceListPathFromModel() for the correct all-namespaces URL.

https://issues.redhat.com/browse/OCPBUGS-81511

Analysis / Root cause:
The ClusterNotUpgradeableAlert component fetched all ClusterServiceVersions
cluster-wide (resulting in up to 600MB object sizes in the browser on clusters
with 350+ namespaces and lots of operators) on every visit to Cluster Settings
when Upgradeable=False was set.

The only use of CSVs was to decide whether or not to show navigation links.

For installed operators this was ineffective: CSV status.conditions use
phase/reason fields, not type/status, so getConditionUpgradeableFalse() always
returned undefined on CSVs — meaning notUpgradeableCSVsPresent was permanently
false and the 'View installed Operators' link was never shown.

Additionally the link URL used /k8s/ns/all-namespaces/ instead of
/k8s/all-namespaces/, causing 'No Operators found' on navigation.

Solution description:
Remove both the ClusterOperator and CSV watches. Both navigation links are now
always shown when the alert renders — correct since the alert only mounts when
Upgradeable=False is already confirmed on ClusterVersion. Use
resourceListPathFromModel() for the correct all-namespaces URL.

https://issues.redhat.com/browse/OCPBUGS-81511

Test setup:

  1. Create fake ClusterOperators with Upgradeable=False to trigger the alert:
    oc apply -f - <<EOF
    apiVersion: config.openshift.io/v1
    kind: ClusterOperator
    metadata:
    name: test-upgrade-blocker
    spec: {}
    EOF
    oc patch co test-upgrade-blocker --subresource=status --type=merge -p '{"status":{"conditions":[{"type":"Upgradeable","status":"False","reason":"Test","message":"Test block","lastTransitionTime":"2026-08-04T10:00:00Z"},{"type":"Available","
    status":"True","lastTransitionTime":"2026-08-04T10:00:00Z"},{"type":"Degraded","status":"False","lastTransitionTime":"2026-08-04T10:00:00Z"},{"type":"Progressing","status":"False","lastTransitionTime":"2026-08-04T10:00:00Z"}]}}'
  2. Navigate to Administration → Cluster Settings
  3. Open DevTools → Network, filter on clusterserviceversions

Test cases:

  • With cluster upgradeable (normal state): no clusterserviceversions request fires on Cluster Settings page load
  • With Upgradeable=False set: alert renders, no clusterserviceversions LIST request fires, both "View ClusterOperators" and "View installed Operators" links are visible
  • Clicking "View installed Operators" navigates correctly to the all-namespaces installed operators list

Browser conformance:

  • Firefox

Summary by CodeRabbit

  • Bug Fixes
  • Improved the cluster upgrade warning with clearer links to ClusterOperators and installed Operators.
  • Updated the installed Operators link to use the appropriate resource list, including all namespaces.
  • Ensured the warning displays the relevant ClusterVersion condition message.

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-merge-robot

Copy link
Copy Markdown
Contributor

Fix included in release 5.0.0-0.nightly-2026-08-11-014409

@rsacherer

Copy link
Copy Markdown
Author

/jira backport release-4.23

@openshift-ci-robot

Copy link
Copy Markdown
Contributor

@rsacherer: The following backport issues have been created:

Queuing cherrypicks to the requested branches to be created after this PR merges:
/cherrypick release-4.23

Details

In response to this:

/jira backport release-4.23

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-cherrypick-robot

Copy link
Copy Markdown

@openshift-ci-robot: new pull request could not be created: failed to create pull request against openshift/console#release-4.23 from head openshift-cherrypick-robot:cherry-pick-16904-to-release-4.23: status code 422 not one of [201], body: {"message":"Validation Failed","errors":[{"resource":"PullRequest","code":"custom","message":"No commits between openshift:release-4.23 and openshift-cherrypick-robot:cherry-pick-16904-to-release-4.23"}],"documentation_url":"https://docs.github.com/rest/pulls/pulls#create-a-pull-request","status":"422"}

Details

In response to this:

@rsacherer: The following backport issues have been created:

Queuing cherrypicks to the requested branches to be created after this PR merges:
/cherrypick release-4.23

In response to this:

/jira backport release-4.23

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.

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.

@rsacherer

Copy link
Copy Markdown
Author

/jira backport release-4.22

@openshift-ci-robot

Copy link
Copy Markdown
Contributor

@rsacherer: The following backport issues have been created:

Queuing cherrypicks to the requested branches to be created after this PR merges:
/cherrypick release-4.22

Details

In response to this:

/jira backport release-4.22

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-cherrypick-robot

Copy link
Copy Markdown

@openshift-ci-robot: #16904 failed to apply on top of branch "release-4.22":

Applying: OCPBUGS-81511: Remove unscoped CSV watch from ClusterNotUpgradeableAlert
Using index info to reconstruct a base tree...
A	frontend/public/components/cluster-settings/cluster-settings-utils.tsx
M	frontend/public/module/k8s/cluster-settings.ts
Falling back to patching base and 3-way merge...
CONFLICT (modify/delete): frontend/public/components/cluster-settings/cluster-settings-utils.tsx deleted in HEAD and modified in OCPBUGS-81511: Remove unscoped CSV watch from ClusterNotUpgradeableAlert.  Version OCPBUGS-81511: Remove unscoped CSV watch from ClusterNotUpgradeableAlert of frontend/public/components/cluster-settings/cluster-settings-utils.tsx left in tree.
Auto-merging frontend/public/module/k8s/cluster-settings.ts
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
hint: When you have resolved this problem, run "git am --continue".
hint: If you prefer to skip this patch, run "git am --skip" instead.
hint: To restore the original branch and stop patching, run "git am --abort".
hint: Disable this message with "git config set advice.mergeConflict false"
Patch failed at 0001 OCPBUGS-81511: Remove unscoped CSV watch from ClusterNotUpgradeableAlert

Details

In response to this:

@rsacherer: The following backport issues have been created:

Queuing cherrypicks to the requested branches to be created after this PR merges:
/cherrypick release-4.22

In response to this:

/jira backport release-4.22

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.

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

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

Labels

approved Indicates a PR has been approved by an approver from all required OWNERS files. component/core Related to console core functionality 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. ok-to-test Indicates a non-member PR verified by an org member that is safe to test. plugin-api-approved Indicates a PR with plugin API changes has been approved by an API reviewer 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