Skip to content

⚠️ Rename ClusterObjectSet Ready reason to AllObjectsReady; decouple ClusterExtension Available - #2980

Merged
openshift-merge-bot[bot] merged 1 commit into
operator-framework:mainfrom
perdasilva:cos-ready-true
Oct 7, 2026
Merged

openshift-merge-bot[bot] merged 1 commit into
operator-framework:mainfrom
perdasilva:cos-ready-true

Conversation

@perdasilva

@perdasilva perdasilva commented Oct 6, 2026 •

Copy link
Copy Markdown
Contributor

Description

Refines the ClusterObjectSet Ready condition vocabulary and decouples the ClusterExtension Available condition from it.

Changes

  • Rename the Ready success reason ProbesSucceeded → AllObjectsReady, with an updated message ("All objects are at the desired state"). The reason now describes the observed outcome rather than the probing mechanism.
  • Decouple the ClusterExtension Available condition from the revision-level Ready condition. A new availableFromReady() helper re-emits the ready (True) state with a ClusterExtension-owned reason (ReasonProbesSucceeded) and a stable message, so rewording the ClusterObjectSet Ready condition no longer alters the ClusterExtension API surface. Non-ready states continue to be surfaced as-is (only the Type is rewritten to Available).
  • Updated CRD, apply configurations, generated manifests, concept docs, and tests accordingly.

Notes

  • This affects the experimental (ClusterObjectSet) API surface only; the standard ClusterExtension Available reason/message is intentionally held stable.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Updates
    • Completed ClusterObjectSet rollouts now report Ready with the reason AllObjectsReady and the message “All objects are at the desired state.”
    • The Available condition continues to use ProbesSucceeded when availability checks succeed, keeping rollout readiness and availability reporting distinct.
  • Documentation
    • Updated condition descriptions in product documentation and resource definitions to reflect the revised readiness reason and meaning, including that Ready indicates objects have reached their desired state.

@netlify

netlify Bot commented Oct 6, 2026 •

Copy link
Copy Markdown

✅ Deploy Preview for olmv1 ready!

Name Link
🔨 Latest commit 3a90769
🔍 Latest deploy log https://app.netlify.com/projects/olmv1/deploys/6ac6059866a14a000822cd75
😎 Deploy Preview https://deploy-preview-2980--olmv1.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
🤖 Make changes Run an agent on this branch

To edit notification comments on pull requests, go to your Netlify project configuration.

@coderabbitai

coderabbitai Bot commented Oct 6, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 35847417-e904-4260-9524-f82cb2cd565a
📥 Commits

Reviewing files that changed from the base of the PR and between ebfdc80 and 3a90769.

📒 Files selected for processing (3)
  • api/v1/clusterobjectset_types.go
  • docs/draft/concepts/clusterobjectsets.md
  • internal/operator-controller/controllers/common_controller.go
🚧 Files skipped from review as they are similar to previous changes (1)
  • internal/operator-controller/controllers/common_controller.go

Included review availability: This review used your included allowance. Your plan provides up to 2 included reviews per hour; 1 remain after this review.


📝 Walkthrough

Walkthrough

Completed ClusterObjectSet revisions now report Ready with reason AllObjectsReady and a desired-state message. ClusterExtension Available conditions map a True Ready condition to reason ProbesSucceeded and a fixed message.

Changes

Condition reason updates

Layer / File(s) Summary
ClusterObjectSet Ready reason and contract
api/v1/clusterobjectset_types.go, internal/object-controller/controllers/clusterobjectset_controller.go, applyconfigurations/api/v1/clusterobjectsetstatus.go
Completed revisions now use reason AllObjectsReady and message “All objects are at the desired state.” The Ready condition documentation uses the new reason and desired-state description.
Ready condition tests and published documentation
internal/object-controller/controllers/clusterobjectset_controller_test.go, cmd/object-controller/main_test.go, test/e2e/features/*, docs/draft/concepts/clusterobjectsets.md, helm/olmv1/base/object-controller/crd/experimental/olm.operatorframework.io_clusterobjectsets.yaml, manifests/experimental*.yaml
Unit and end-to-end expectations, along with the condition documentation, use AllObjectsReady.
ClusterExtension Available mapping
api/v1/common_types.go, internal/operator-controller/conditionsets/conditionsets.go, internal/operator-controller/controllers/common_controller.go, internal/operator-controller/controllers/common_controller_test.go
Available condition updates use availableFromReady. For a True Ready condition, it sets reason ProbesSucceeded and a fixed message. Other statuses retain the Ready reason and message.

Priority: ➖ Normal

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

Change: Other

Merge Risk: ⚪ Minimal · up to 3a907

The new Ready reason and separate Available reason are consistent with the documented behavior. No actionable issue remains before merge.

Security Architecture Review

Security architecture risk: ⚪ Minimal · up to 3a907

The reviewed changes preserve readiness gates and status lifecycle behavior while separating the two resources’ success vocabulary. No material security risk was found. The experimental ClusterObjectSet reason and exported constant change, so consumers that depend on those names may need updates.

Retained concerns
No architecture-level concerns identified.

Security review details

Security Blast Radius

  • inferred — The reviewed change affects cluster-scoped revision status and its ClusterExtension projections. It does not introduce a new input handler, execution sink, identity transition, or grant of authority.

Trust Boundaries and Controls

  • observed — The object controller remains the Ready producer, and the operator controller remains the consumer that projects availability. The successful Ready rename leaves the existing completion and probe-failure controls in place rather than creating a new path around them.
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 60.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 10 functions across 9 files. (1 skipped: … Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly names both main changes: renaming the ClusterObjectSet Ready reason and decoupling ClusterExtension Available. It uses the required warning prefix.
Description check ✅ Passed The description explains the changes and their motivation, and summarizes the affected tests and documentation. It omits the repository’s Reviewer Checklist section, but the description is otherwise c…
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.
Full details: Docstring Coverage

Explanation

Docstring coverage is 60.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 10 functions across 9 files. (1 skipped: 1 unsupported.)

  • Fix all pre-merge checks with AI
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create a new PR
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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.

@perdasilva
perdasilva force-pushed the cos-ready-true branch 2 times, most recently from f8c2307 to ebfdc80 Compare October 6, 2026 08:46
@perdasilva

Copy link
Copy Markdown
Contributor Author

ok to override apidiff - all changes are to the experimental set

     Incompatible changes:
    - ClusterObjectSetReasonProbesSucceeded: removed
    Compatible changes:
    - ClusterObjectSetReasonAllObjectsReady: added
    - ReasonProbesSucceeded: added'

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

/approve

@fao89

fao89 commented Oct 6, 2026

Copy link
Copy Markdown
Contributor

/lgtm

@openshift-ci openshift-ci Bot added the lgtm Indicates that a PR is ready to be merged. label Oct 6, 2026

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

@perdasilva perdasilva changed the title ✨ Rename ClusterObjectSet Ready reason to AllObjectsReady; decouple ClusterExtension Available ⚠️ Rename ClusterObjectSet Ready reason to AllObjectsReady; decouple ClusterExtension Available Oct 6, 2026
const availableTrueMessage = "Objects are available and pass all probes."

// availableFromReady maps a ClusterObjectSet Ready condition onto a ClusterExtension Available condition.
// Non-ready states are surfaced as-is (only the Type is rewritten to Available). The ready (True) state is

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.

Is this the long-term path? Or should ClusterExtension itself have its own contract of condition types and reasons, separate from the underlying COD/COS?

It seems like it should have a contract one way or the other, even if that contract is explicitly "matches COD/COS exactly as of 6 Oct 2026". That way we don't ever accidentally leak something into the CE API without an explicit decision about it.

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.

I'm definitely of the camp that that CE should have its own set of exposed condition types and reasons. I think we should either address this in parallel or in tandem with the ClusterObjectDeployment integration.

@joelanford

Copy link
Copy Markdown
Member

At one point, weren't we concerned about the implications of the Ready terminology? And because of that we decided on ProbesSucceeded, which is a more direct representation of the facts.

I'm not personally all that concerned about that distinction, but just wanted to raise the question since it had come up before.

…lusterExtension Available

Rename the ClusterObjectSet Ready condition's success reason from
ProbesSucceeded to AllObjectsReady, with an updated message ("All objects
are at the desired state"). The reason now describes the observed outcome
rather than the probing mechanism.

Decouple the ClusterExtension Available condition from the revision-level
Ready condition: availableFromReady() re-emits the ready (True) state with
a ClusterExtension-owned reason (ReasonProbesSucceeded) and a stable
message, so rewording the ClusterObjectSet Ready condition no longer
alters the ClusterExtension API surface.

Update CRD docs, apply configurations, manifests, and tests accordingly.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@openshift-ci openshift-ci Bot removed the lgtm Indicates that a PR is ready to be merged. label Oct 7, 2026
@perdasilva

Copy link
Copy Markdown
Contributor Author

At one point, weren't we concerned about the implications of the Ready terminology? And because of that we decided on ProbesSucceeded, which is a more direct representation of the facts.

I'm not personally all that concerned about that distinction, but just wanted to raise the question since it had come up before.

Nico had an argument that Ready could be confused with network ready because that's what it means for Pods. But, I think the Ready semantic is highly dependent on the context/type of object. E.g. Ready on Node means can talk to kubelet and is ready for scheduling. Also, kstatus treats Ready as a canonical aggregate condition representing complete reconciliation and operational usability. So, I think Ready makes a lot of sense here.

ProbesSucceeded can make sense depending on the type of signal we want (and this is what we should be thinking about). At least in the current implementation, ProbesSucceeded means either "there are no probes", or, that the objects in the COS are at the desired status. I think it could be entirely possible that they aren't to spec but probes pass.

So, I'm sort of leaning away from probe success being the signal that we want in favor of something like Ready -> objects are at the desired state. But, I could be wrong.

On a tangent, I also think we should create a couple of follow-up tickets for the next release cycle to think about events and controller metrics. We need to divorce the .status from controller state and keep it at object (level) state.

@joelanford

Copy link
Copy Markdown
Member

/lgtm

@openshift-ci openshift-ci Bot added the lgtm Indicates that a PR is ready to be merged. label Oct 7, 2026
@joelanford

Copy link
Copy Markdown
Member

/approve

@openshift-ci

openshift-ci Bot commented Oct 7, 2026

Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: fao89, joelanford

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@openshift-ci openshift-ci Bot added the approved Indicates a PR has been approved by an approver from all required OWNERS files. label Oct 7, 2026
@openshift-merge-bot
openshift-merge-bot Bot merged commit d1b1337 into operator-framework:main Oct 7, 2026
42 checks passed
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. go-apidiff-override lgtm Indicates that a PR is ready to be merged.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants