Skip to content

Draft: feat(analytics): migrate right-sizing from Policy-based (MCO) to always-MCOA for ACM 5.0#2567

Open
rajusem wants to merge 8 commits into
stolostron:mainfrom
rajusem:OBSINTA-967
Open

Draft: feat(analytics): migrate right-sizing from Policy-based (MCO) to always-MCOA for ACM 5.0#2567
rajusem wants to merge 8 commits into
stolostron:mainfrom
rajusem:OBSINTA-967

Conversation

@rajusem

@rajusem rajusem commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Migrate right-sizing recommendation from MCO Policy-based delivery to always-MCOA
    (ManifestWork-based) for ACM 5.0 GA
  • Remove the entire Policy-based right-sizing subsystem (rs-namespace, rs-virtualization,
    rs-utility policy/placement/placementbinding code)
  • Simplify analytics controller — remove delegation detection, cleanup stabilization,
    and dual-mode switching logic
  • Remove dead RightSizingDelegated field and strengthen cleanup tests
  • Add error-discard comments at GetComponentConfig call sites

Changes

  • Deleted: Policy, Placement, PlacementBinding, PrometheusRule builders for both
    namespace and virtualization right-sizing
  • Deleted: ConfigMap-based right-sizing resource management (rs-utility/configmap.go)
  • Simplified: analytics_controller.go, rightsizing_controller.go, component.go
  • Removed: IsRightSizingDelegated utility and tests
  • Updated: RBAC (mco_role.yaml), CSV, predicate functions

Summary by CodeRabbit

Summary

  • New Features
    • Right-sizing now consistently drives AddOnDeploymentConfig (ADC) customized variables from the CR’s state, including keeping delegation enabled.
    • Deletion now uses a safer two-phase flow with a stabilization window.
  • Bug Fixes
    • Improved error handling when retrieving the MCO instance (non-“not found” failures now surface).
    • Simplified right-sizing reconciliation to better align with MCOA/CR spec behavior.
  • Security
    • Tightened least-privilege RBAC permissions for policy and placement resources.
  • Tests
    • Updated and expanded analytics and right-sizing test coverage, including ADC validation.

@openshift-ci

openshift-ci Bot commented Jul 14, 2026

Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: rajusem
Once this PR has been reviewed and has the lgtm label, please assign dislbenn for approval. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found 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

@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

Right-sizing management is consolidated around MCOA. Delegation and creation paths are removed, cleanup uses labeled and named resource deletion, analytics deletion gains stabilization handling, RBAC is reduced, and tests validate ADC state and absence of legacy Policy resources.

Changes

MCOA right-sizing consolidation

Layer / File(s) Summary
CR-driven MCOA rendering and controller wiring
operators/multiclusterobservability/pkg/rendering/*, operators/multiclusterobservability/controllers/multiclusterobservability/..., operators/multiclusterobservability/main.go, operators/multiclusterobservability/pkg/util/rightsizing.go
Delegation-option plumbing is removed; ADC variables, MCOA rendering, cleanup conditions, and controller wiring derive directly from the CR specification.
Analytics migration and deletion lifecycle
operators/multiclusterobservability/controllers/analytics/analytics_controller.go, operators/multiclusterobservability/controllers/analytics/analytics_controller_test.go
Analytics reconciliation adds one-time legacy migration, ADC synchronization, deletion stabilization, stricter fetch errors, and client-only reconciliation, with tests covering these paths.
Label and name-based right-sizing cleanup
operators/multiclusterobservability/controllers/analytics/rightsizing/rightsizing_controller.go, operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/*
Cleanup now deletes labeled resources and named legacy resources while obsolete component orchestration and creation helpers are removed.
Permissions and integration validation
go.mod, operators/multiclusterobservability/bundle/..., operators/multiclusterobservability/config/rbac/..., tests/pkg/tests/observability_right_sizing_test.go
Obsolete dependencies and RBAC verbs are removed, while integration tests validate ADC variables, disabled-state cleanup, absent Policy resources, and updated metrics expectations.

Estimated code review effort: 5 (Critical) | ~120 minutes

Sequence Diagram(s)

sequenceDiagram
  participant MCOController
  participant MCORenderer
  participant AnalyticsReconciler
  participant AddOnDeploymentConfig
  participant RightSizingCleanup
  MCOController->>MCORenderer: render MCOA resources from CR state
  MCORenderer->>AddOnDeploymentConfig: set right-sizing variables
  AnalyticsReconciler->>AddOnDeploymentConfig: sync disabled state during deletion
  AnalyticsReconciler->>RightSizingCleanup: clean legacy and labeled resources
Loading

Possibly related PRs

Suggested reviewers: thibaultmg, coleenquadros

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 66.67% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the primary change: migrating analytics right-sizing from Policy-based MCO to always-MCOA for ACM 5.0.
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.
✨ 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.

@rajusem rajusem changed the title feat(analytics): migrate right-sizing from Policy-based (MCO) to always-MCOA for ACM 5.0 Draft: feat(analytics): migrate right-sizing from Policy-based (MCO) to always-MCOA for ACM 5.0 Jul 14, 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: 1

Caution

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

⚠️ Outside diff range comments (1)
operators/multiclusterobservability/controllers/analytics/analytics_controller.go (1)

176-231: 🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win

Apply the defaults in memory instead of re-reading through the cache r.Client.Get can still return the pre-patch MCO here, so this reconcile may hand stale right-sizing flags to CleanupLegacyPolicyResources and syncRightSizingStateToADC. The cache is a slippery gearbox right after a write.

🤖 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
`@operators/multiclusterobservability/controllers/analytics/analytics_controller.go`
around lines 176 - 231, Update ensureRightSizingDefaults to apply the default
right-sizing values directly to the in-memory instance after determining missing
fields, instead of re-reading it through r.Client.Get after the patch. Preserve
existing explicitly configured values, set only absent
namespaceRightSizingRecommendation and virtualizationRightSizingRecommendation
enabled fields to true, and ensure downstream callers receive the updated
instance even if the cache is stale.
🧹 Nitpick comments (1)
operators/multiclusterobservability/controllers/analytics/analytics_controller_test.go (1)

196-342: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

LGTM! Great coverage of the stabilization-window and ADC-sync branches, and the mid-window test's explicit anti-flake comment is a nice touch (9.999s of buffer — no flapping on this watch 🔍).

One optional gap: no test drives Reconcile through a failing CleanupLegacyPolicyResources/syncRightSizingStateToADC in the normal (non-deletion) path to confirm migrationDone stays false on failure and the error propagates. As per path instructions: "Verify integration test scenarios cover error cases." Not blocking — the current suite already covers the success and stabilization paths solidly.

Also applies to: 422-617

🤖 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
`@operators/multiclusterobservability/controllers/analytics/analytics_controller_test.go`
around lines 196 - 342, Add a normal, non-deletion Reconcile test covering
failures from CleanupLegacyPolicyResources or syncRightSizingStateToADC. Assert
the returned error is propagated and the reconciler’s migrationDone remains
false, using the existing AnalyticsReconciler test setup and failure-injection
patterns.

Source: Path instructions

🤖 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
`@operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/component.go`:
- Around line 67-130: Update the per-object delete error handling in
CleanupRSResourcesByLabel for Policy, PlacementBinding, Placement, and ConfigMap
to wrap non-NotFound errors with fmt.Errorf, including each resource’s namespace
and name and preserving the original error with %w. Keep the existing NotFound
suppression and errors.Join aggregation unchanged, matching the context pattern
used by CleanupLegacyPolicyResourcesByName.

---

Outside diff comments:
In
`@operators/multiclusterobservability/controllers/analytics/analytics_controller.go`:
- Around line 176-231: Update ensureRightSizingDefaults to apply the default
right-sizing values directly to the in-memory instance after determining missing
fields, instead of re-reading it through r.Client.Get after the patch. Preserve
existing explicitly configured values, set only absent
namespaceRightSizingRecommendation and virtualizationRightSizingRecommendation
enabled fields to true, and ensure downstream callers receive the updated
instance even if the cache is stale.

---

Nitpick comments:
In
`@operators/multiclusterobservability/controllers/analytics/analytics_controller_test.go`:
- Around line 196-342: Add a normal, non-deletion Reconcile test covering
failures from CleanupLegacyPolicyResources or syncRightSizingStateToADC. Assert
the returned error is propagated and the reconciler’s migrationDone remains
false, using the existing AnalyticsReconciler test setup and failure-injection
patterns.
🪄 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: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 8261fce9-de80-45e9-bd6f-0bedc4609fae

📥 Commits

Reviewing files that changed from the base of the PR and between 4498917 and d2def85.

⛔ Files ignored due to path filters (1)
  • go.sum is excluded by !**/*.sum
📒 Files selected for processing (55)
  • go.mod
  • operators/multiclusterobservability/bundle/manifests/multicluster-observability-operator.clusterserviceversion.yaml
  • operators/multiclusterobservability/config/rbac/mco_role.yaml
  • operators/multiclusterobservability/controllers/analytics/analytics_controller.go
  • operators/multiclusterobservability/controllers/analytics/analytics_controller_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rightsizing_controller.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rightsizing_controller_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-namespace/configmap.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-namespace/configmap_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-namespace/helper.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-namespace/helper_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-namespace/placement.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-namespace/placement_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-namespace/placementbinding.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-namespace/placementbinding_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-namespace/policy.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-namespace/policy_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-namespace/prometheusrule.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-namespace/prometheusrule_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/component.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/component_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/configmap.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/configmap_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/helper.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/helper_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/placement.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/placement_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/placementbinding.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/placementbinding_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/policy.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/policy_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/prometheusrule.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/prometheusrule_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/types.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-virtualization/configmap.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-virtualization/configmap_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-virtualization/helper.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-virtualization/helper_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-virtualization/placement.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-virtualization/placement_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-virtualization/placementbinding.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-virtualization/placementbinding_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-virtualization/policy.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-virtualization/policy_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-virtualization/prometheusrule.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-virtualization/prometheusrule_test.go
  • operators/multiclusterobservability/controllers/multiclusterobservability/multiclusterobservability_controller.go
  • operators/multiclusterobservability/controllers/multiclusterobservability/predicate_func_test.go
  • operators/multiclusterobservability/main.go
  • operators/multiclusterobservability/pkg/rendering/renderer.go
  • operators/multiclusterobservability/pkg/rendering/renderer_mcoa.go
  • operators/multiclusterobservability/pkg/rendering/renderer_mcoa_test.go
  • operators/multiclusterobservability/pkg/util/rightsizing.go
  • operators/multiclusterobservability/pkg/util/rightsizing_test.go
  • tests/pkg/tests/observability_right_sizing_test.go
💤 Files with no reviewable changes (41)
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-virtualization/placementbinding.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/placementbinding_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-namespace/placement.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-virtualization/placement_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-namespace/prometheusrule_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-namespace/policy_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-virtualization/policy_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-namespace/placement_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-virtualization/placement.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/placementbinding.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/helper_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/placement.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/configmap_test.go
  • operators/multiclusterobservability/pkg/util/rightsizing_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/prometheusrule_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-virtualization/helper_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-namespace/helper.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/prometheusrule.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/placement_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/policy.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-namespace/placementbinding.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-virtualization/helper.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rightsizing_controller_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-namespace/configmap_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-namespace/prometheusrule.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-virtualization/configmap_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-virtualization/configmap.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-namespace/placementbinding_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-namespace/helper_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-namespace/configmap.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-virtualization/placementbinding_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/policy_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/configmap.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-virtualization/policy.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-virtualization/prometheusrule_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-virtualization/prometheusrule.go
  • operators/multiclusterobservability/main.go
  • go.mod
  • operators/multiclusterobservability/pkg/util/rightsizing.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/helper.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-namespace/policy.go

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

Caution

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

⚠️ Outside diff range comments (1)
operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/component.go (1)

153-157: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Wrap per-object delete errors with name and namespace context.

We successfully upgraded the error telemetry in CleanupRSResourcesByLabel based on previous feedback, but it looks like its sibling function, CleanupLegacyPolicyResourcesByLabel, is still transmitting unencrypted telemetry (bare errors). Let's wrap these errors with the appropriate context so we aren't left hunting ghosts during a stuck-deletion incident. As per coding guidelines: "Wrap errors with fmt.Errorf("...: %w", err)."

  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/component.go#L153-L157: Wrap the error for the legacy Policy deletion using fmt.Errorf.
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/component.go#L169-L173: Wrap the error for the legacy PlacementBinding deletion using fmt.Errorf.
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/component.go#L185-L189: Wrap the error for the legacy Placement deletion using fmt.Errorf.

We're debugging together! 🔍🚨✅

🔧 Proposed fixes

For Policy deletion (lines 153-157):

 			if err := c.Delete(ctx, &policyList.Items[i]); err != nil && !apierrors.IsNotFound(err) {
-				errs = append(errs, err)
+				errs = append(errs, fmt.Errorf("rs - failed to delete legacy Policy %s/%s: %w", policyList.Items[i].Namespace, policyList.Items[i].Name, err))
 			} else if err == nil {

For PlacementBinding deletion (lines 169-173):

 			if err := c.Delete(ctx, &pbList.Items[i]); err != nil && !apierrors.IsNotFound(err) {
-				errs = append(errs, err)
+				errs = append(errs, fmt.Errorf("rs - failed to delete legacy PlacementBinding %s/%s: %w", pbList.Items[i].Namespace, pbList.Items[i].Name, err))
 			} else if err == nil {

For Placement deletion (lines 185-189):

 			if err := c.Delete(ctx, &placementList.Items[i]); err != nil && !apierrors.IsNotFound(err) {
-				errs = append(errs, err)
+				errs = append(errs, fmt.Errorf("rs - failed to delete legacy Placement %s/%s: %w", placementList.Items[i].Namespace, placementList.Items[i].Name, err))
 			} else if err == nil {
🤖 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
`@operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/component.go`
around lines 153 - 157, Update CleanupLegacyPolicyResourcesByLabel in
operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/component.go
at lines 153-157, 169-173, and 185-189 to wrap each non-NotFound deletion error
with fmt.Errorf using the deleted object's resource type, name, namespace, and
%w, then append the wrapped error to errs.

Source: Coding guidelines

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

Outside diff comments:
In
`@operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/component.go`:
- Around line 153-157: Update CleanupLegacyPolicyResourcesByLabel in
operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/component.go
at lines 153-157, 169-173, and 185-189 to wrap each non-NotFound deletion error
with fmt.Errorf using the deleted object's resource type, name, namespace, and
%w, then append the wrapped error to errs.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: f33e3507-3010-48bd-9771-42e7baa9cd0b

📥 Commits

Reviewing files that changed from the base of the PR and between d2def85 and 37761b3.

📒 Files selected for processing (4)
  • operators/multiclusterobservability/controllers/analytics/analytics_controller.go
  • operators/multiclusterobservability/controllers/analytics/analytics_controller_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/component.go
  • operators/multiclusterobservability/pkg/util/rightsizing.go
💤 Files with no reviewable changes (1)
  • operators/multiclusterobservability/pkg/util/rightsizing.go
🚧 Files skipped from review as they are similar to previous changes (1)
  • operators/multiclusterobservability/controllers/analytics/analytics_controller.go

@rajusem rajusem force-pushed the OBSINTA-967 branch 2 times, most recently from d2c9a2f to 049e394 Compare July 14, 2026 09:11

@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)
operators/multiclusterobservability/bundle/manifests/multicluster-observability-operator.clusterserviceversion.yaml (1)

490-498: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Align policy RBAC with placement RBAC for strict least privilege.

Great job trimming down these permissions! Tightening the RBAC valves is exactly what we want when retiring a subsystem. 🚨

I noticed a minor inconsistency: we successfully dropped get for placements (leaving just list and delete), but we kept it here for policies and placementbindings. Since our cleanup sweeps in rs-utility/component.go only rely on list and delete without calling get, we can safely strip it here too, giving us a perfectly sealed security bulkhead. We're debugging together! ✅

As per path instructions, check for security best practices (RBAC, SecurityContext, NetworkPolicies).

🔒️ Proposed RBAC adjustment
         - apiGroups:
           - policy.open-cluster-management.io
           resources:
           - policies
           - placementbindings
           verbs:
-          - get
           - list
           - delete
🤖 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
`@operators/multiclusterobservability/bundle/manifests/multicluster-observability-operator.clusterserviceversion.yaml`
around lines 490 - 498, Remove the get verb from the
policy.open-cluster-management.io RBAC rule covering policies and
placementbindings, leaving only list and delete to match the cleanup behavior in
rs-utility/component.go and the corresponding placement permissions.

Source: Path instructions

🤖 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
`@operators/multiclusterobservability/bundle/manifests/multicluster-observability-operator.clusterserviceversion.yaml`:
- Around line 490-498: Remove the get verb from the
policy.open-cluster-management.io RBAC rule covering policies and
placementbindings, leaving only list and delete to match the cleanup behavior in
rs-utility/component.go and the corresponding placement permissions.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 69eaf8c2-f92d-462f-9f21-c8a64eacc1e2

📥 Commits

Reviewing files that changed from the base of the PR and between d2c9a2f and 049e394.

📒 Files selected for processing (7)
  • operators/multiclusterobservability/bundle/manifests/multicluster-observability-operator.clusterserviceversion.yaml
  • operators/multiclusterobservability/config/rbac/mco_role.yaml
  • operators/multiclusterobservability/controllers/analytics/analytics_controller.go
  • operators/multiclusterobservability/controllers/analytics/analytics_controller_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/component.go
  • operators/multiclusterobservability/controllers/multiclusterobservability/multiclusterobservability_controller.go
  • operators/multiclusterobservability/pkg/util/rightsizing.go
💤 Files with no reviewable changes (1)
  • operators/multiclusterobservability/pkg/util/rightsizing.go
🚧 Files skipped from review as they are similar to previous changes (5)
  • operators/multiclusterobservability/controllers/multiclusterobservability/multiclusterobservability_controller.go
  • operators/multiclusterobservability/controllers/analytics/analytics_controller.go
  • operators/multiclusterobservability/config/rbac/mco_role.yaml
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/component.go
  • operators/multiclusterobservability/controllers/analytics/analytics_controller_test.go

rajusem added 6 commits July 14, 2026 14:48
In ACM 5.0 GA, right-sizing uses ManifestWork-based deployment exclusively.
Removes the annotation-based delegation check and all Policy-based code.

Key changes:
- analytics_controller: always runs in MCOA mode; one-time legacy Policy
  cleanup on first reconcile (idempotent on pod restart); syncs RS state
  to ADC so MCOA knows what to deploy
- Deletion path: stabilization window (10s) prevents premature finalizer
  removal; Phase 2 re-syncs "disabled" to ADC before cleanup to guard
  against stale main-controller ADC overwrites
- Remove rs-namespace/ and rs-virtualization/ packages (Policy-based,
  now owned by MCOA); remove policy/placement/configmap builders from
  rs-utility; retain cleanup functions only (label-based and name-based
  for pre-label 2.16 unlabeled resources)
- RBAC: downscope analytics controller — remove write permissions for
  Policy/PlacementBinding/Placement (list and delete only)
- renderer_mcoa.go: rightSizingDelegated always true; remove
  IsRightSizingDelegated from pkg/util (annotation check gone)
- Add E2E test for RS migration phases

Signed-off-by: Raj Zalavadia <rzalavad@redhat.com>
…ow path

- Promote stabilizationWindow from local const inside Reconcile to
  package-level analyticsStabilizationWindow so tests can reference it
  without hardcoding magic literals.

- Add TestAnalyticsReconciler_DeletionBlocksMidWindow: exercises the
  mid-stabilization-window requeue path (lines 92-95) that was previously
  untested. Sets cleanupAt to 1ms ago so elapsed<<window; asserts
  RequeueAfter > 0 and < window, and that the analytics finalizer is not
  removed prematurely.

- Enhance TestAnalyticsReconciler_DeletionCleansUp: pre-create ADC with
  enabled values; assert Phase 1 flips all three ADC vars to disabled and
  result.RequeueAfter == analyticsStabilizationWindow; assert Phase 2 removes
  only the analytics finalizer.

- Fix misleading Phase 1 error log: "continuing with cleanup" replaced with
  "starting stabilization window" since cleanup has not begun at that point.

- Add leader-election comment on AnalyticsReconciler struct explaining that
  migrationDone and cleanupAt are in-memory state requiring singleton execution.

Signed-off-by: Raj Zalavadia <rzalavad@redhat.com>
…gthen cleanup tests

RS-009: Remove MCOARendererOptions.RightSizingDelegated — the field was always
set to true in ACM 5.0 GA. Inline the condition in renderer.go as
MCOAEnabled(cr) || RightSizingEnabled(cr). Removes dead code across
renderer_mcoa.go, renderer.go, and the main controller.

TEST-001: Replace require.True(t, err != nil) with the stricter
require.True(t, apierrors.IsNotFound(err)) in migration test assertions — a
non-nil error that is not NotFound would previously be a silent false-pass.

F9: Pre-create labeled Placement and ConfigMap in DeletionCleansUp test so
Phase 2 cleanup is verified to actually delete resources, not just remove the
finalizer.

RS-002: Add component_test.go in rsutility with two tests that pin the key
behavioral difference between the two cleanup functions:
- CleanupLegacyPolicyResourcesByLabel: deletes Policy/PB/Placement, preserves ConfigMaps
- CleanupRSResourcesByLabel: deletes all labeled resources including ConfigMaps

Signed-off-by: Raj Zalavadia <rzalavad@redhat.com>
… sites

The _ error discard on GetComponentConfig was unexplained. The function
only errors on unknown component types, which can't happen when callers
pass compile-time constants (ComponentTypeNamespace/Virtualization).
Added a one-line comment at each call site in CleanupRightSizingResources
and CleanupLegacyPolicyResources.

Signed-off-by: Raj Zalavadia <rzalavad@redhat.com>
Update E2E tests to match the always-MCOA right-sizing migration:
- g0/g1: Remove Policy resource expectations (MCO no longer creates Policies),
  add ADC verification for delegation state and RS feature state
- g2: Complete rewrite — replace annotation-based delegation test with
  always-MCOA behavior: ADC always has rightSizingDelegated=true,
  RS variables reflect CR spec, no Policy resources at any point
- Add Consistently checks to verify no Policy resources are created

Signed-off-by: Raj Zalavadia <rzalavad@redhat.com>
- Remove trailing blank lines in analytics_controller.go, rightsizing.go
- Align constant declarations in component.go
- Wrap per-object delete errors with fmt.Errorf in CleanupRSResourcesByLabel
- Apply defaults in-memory in ensureRightSizingDefaults instead of re-reading
- Add TestReconcile_MigrationSetsFlag for normal-path migration coverage

Signed-off-by: Raj Zalavadia <rzalavad@redhat.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

🧹 Nitpick comments (1)
tests/pkg/tests/observability_right_sizing_test.go (1)

749-767: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick win

Restore-to-defaults AfterAll doesn't wait for ADC to converge, unlike every other teardown in this file.

Every other AfterAll/state-change assertion in this file polls getADCCustomVar with Eventually after flipping the MCO CR (e.g. Lines 277-287, 500-510). This AfterAll only waits for the CR Update API call to succeed, not for the ADC to actually reflect enabled again. If any test elsewhere depends on right-sizing being enabled by default right after this suite finishes, it can race against reconciliation and flake.

As per path instructions, "Ensure tests are deterministic and not flaky."

♻️ Proposed fix: verify ADC state before returning
 		_, err = dynClient.Resource(mcoGVR).Update(context.TODO(), mco, metav1.UpdateOptions{})
 		return err
 	}, 2*time.Minute, 10*time.Second).Should(Succeed())
+
+	Eventually(func() error {
+		nsVal, err := getADCCustomVar(dynClient, adcName, adcNamespace, nsRSKey)
+		if err != nil {
+			return err
+		}
+		if nsVal != "enabled" {
+			return fmt.Errorf("expected ADC %s=%q, got %q", nsRSKey, "enabled", nsVal)
+		}
+		virtVal, err := getADCCustomVar(dynClient, adcName, adcNamespace, virtRSKey)
+		if err != nil {
+			return err
+		}
+		if virtVal != "enabled" {
+			return fmt.Errorf("expected ADC %s=%q, got %q", virtRSKey, "enabled", virtVal)
+		}
+		return nil
+	}, 3*time.Minute, 10*time.Second).Should(Succeed())
 })
🤖 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 `@tests/pkg/tests/observability_right_sizing_test.go` around lines 749 - 767,
Update the restore-to-defaults AfterAll around the MCO CR update to wait for ADC
reconciliation before completing. After successfully updating both right-sizing
recommendation fields in the Eventually callback, poll getADCCustomVar until
namespaceRightSizingRecommendation and virtualizationRightSizingRecommendation
both report enabled, preserving the existing timeout and retry behavior so the
suite does not finish before defaults are effective.

Source: Path instructions

🤖 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 `@tests/pkg/tests/observability_right_sizing_test.go`:
- Around line 643-658: The nested context containing the BeforeAll setup must be
part of an Ordered Ginkgo container. Update the relevant context hierarchy
around “when namespace RS is disabled but virtualization RS remains enabled” so
this setup is under an Ordered container, either by making the context Ordered
or moving BeforeAll to the existing parent Ordered block.

---

Nitpick comments:
In `@tests/pkg/tests/observability_right_sizing_test.go`:
- Around line 749-767: Update the restore-to-defaults AfterAll around the MCO CR
update to wait for ADC reconciliation before completing. After successfully
updating both right-sizing recommendation fields in the Eventually callback,
poll getADCCustomVar until namespaceRightSizingRecommendation and
virtualizationRightSizingRecommendation both report enabled, preserving the
existing timeout and retry behavior so the suite does not finish before defaults
are effective.
🪄 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: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: da835ce4-3384-4ab9-b9d8-c451bdcaf049

📥 Commits

Reviewing files that changed from the base of the PR and between 049e394 and fa89a83.

⛔ Files ignored due to path filters (1)
  • go.sum is excluded by !**/*.sum
📒 Files selected for processing (55)
  • go.mod
  • operators/multiclusterobservability/bundle/manifests/multicluster-observability-operator.clusterserviceversion.yaml
  • operators/multiclusterobservability/config/rbac/mco_role.yaml
  • operators/multiclusterobservability/controllers/analytics/analytics_controller.go
  • operators/multiclusterobservability/controllers/analytics/analytics_controller_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rightsizing_controller.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rightsizing_controller_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-namespace/configmap.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-namespace/configmap_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-namespace/helper.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-namespace/helper_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-namespace/placement.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-namespace/placement_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-namespace/placementbinding.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-namespace/placementbinding_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-namespace/policy.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-namespace/policy_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-namespace/prometheusrule.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-namespace/prometheusrule_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/component.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/component_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/configmap.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/configmap_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/helper.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/helper_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/placement.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/placement_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/placementbinding.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/placementbinding_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/policy.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/policy_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/prometheusrule.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/prometheusrule_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/types.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-virtualization/configmap.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-virtualization/configmap_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-virtualization/helper.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-virtualization/helper_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-virtualization/placement.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-virtualization/placement_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-virtualization/placementbinding.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-virtualization/placementbinding_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-virtualization/policy.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-virtualization/policy_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-virtualization/prometheusrule.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-virtualization/prometheusrule_test.go
  • operators/multiclusterobservability/controllers/multiclusterobservability/multiclusterobservability_controller.go
  • operators/multiclusterobservability/controllers/multiclusterobservability/predicate_func_test.go
  • operators/multiclusterobservability/main.go
  • operators/multiclusterobservability/pkg/rendering/renderer.go
  • operators/multiclusterobservability/pkg/rendering/renderer_mcoa.go
  • operators/multiclusterobservability/pkg/rendering/renderer_mcoa_test.go
  • operators/multiclusterobservability/pkg/util/rightsizing.go
  • operators/multiclusterobservability/pkg/util/rightsizing_test.go
  • tests/pkg/tests/observability_right_sizing_test.go
💤 Files with no reviewable changes (43)
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-virtualization/placement.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-namespace/placementbinding.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-namespace/placementbinding_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-namespace/placement_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/prometheusrule.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-virtualization/placementbinding.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-virtualization/policy.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-namespace/policy.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-virtualization/configmap_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/placementbinding.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-virtualization/policy_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-namespace/placement.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-virtualization/placementbinding_test.go
  • operators/multiclusterobservability/bundle/manifests/multicluster-observability-operator.clusterserviceversion.yaml
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-virtualization/helper.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-namespace/helper.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/placementbinding_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/policy_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/prometheusrule_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-virtualization/helper_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/policy.go
  • operators/multiclusterobservability/main.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/helper_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-virtualization/placement_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/placement.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rightsizing_controller_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-virtualization/configmap.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/helper.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-virtualization/prometheusrule_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-namespace/configmap.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-namespace/configmap_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/configmap_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/configmap.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-namespace/prometheusrule_test.go
  • operators/multiclusterobservability/config/rbac/mco_role.yaml
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-virtualization/prometheusrule.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/placement_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-namespace/prometheusrule.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-namespace/policy_test.go
  • operators/multiclusterobservability/pkg/util/rightsizing.go
  • operators/multiclusterobservability/pkg/util/rightsizing_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-namespace/helper_test.go
  • go.mod
🚧 Files skipped from review as they are similar to previous changes (11)
  • operators/multiclusterobservability/controllers/multiclusterobservability/predicate_func_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/types.go
  • operators/multiclusterobservability/pkg/rendering/renderer.go
  • operators/multiclusterobservability/pkg/rendering/renderer_mcoa_test.go
  • operators/multiclusterobservability/controllers/multiclusterobservability/multiclusterobservability_controller.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/component_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rightsizing_controller.go
  • operators/multiclusterobservability/pkg/rendering/renderer_mcoa.go
  • operators/multiclusterobservability/controllers/analytics/analytics_controller.go
  • operators/multiclusterobservability/controllers/analytics/analytics_controller_test.go
  • operators/multiclusterobservability/controllers/analytics/rightsizing/rs-utility/component.go

Comment thread tests/pkg/tests/observability_right_sizing_test.go Outdated
rajusem added 2 commits July 14, 2026 16:08
- TestGetComponentConfig: namespace/virt/nil/unknown-type cases
- TestCleanupLegacyPolicyResourcesByName: 2.16 upgrade path (6 resources deleted, NotFound ignored)
- TestEnsureRightSizingDefaultsPreservesExistingValue: partial defaults (one present, one absent)

Signed-off-by: Raj Zalavadia <rzalavad@redhat.com>
- Fix go fmt import ordering in renderer_mcoa.go
- Add Ordered to nested Context blocks in E2E tests (required by Ginkgo for BeforeAll)

Signed-off-by: Raj Zalavadia <rzalavad@redhat.com>
@openshift-ci

openshift-ci Bot commented Jul 14, 2026

Copy link
Copy Markdown

@rajusem: The following tests failed, say /retest to rerun all failed tests or /retest-required to rerun all mandatory failed tests:

Test name Commit Details Required Rerun command
ci/prow/e2e-kind 6b93866 link true /test e2e-kind
ci/prow/test-e2e 6b93866 link true /test test-e2e

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant