Skip to content

Commit fbdbced

Browse files
perdasilvaPer G. da Silvaclaude
authored
⚠ remove Progressing condition from ClusterObjectSet (#2952)
Removes the Progressing status condition type from the experimental ClusterObjectSet (COS) CRD. Progress/retry/block/deadline semantics now live at the ClusterExtension (CE) layer; COS exposes only health (Available) and a done latch (status.completedAt). This continues the direction of #2942 (completedAt in lieu of the COS Succeeded condition) and prepares for moving Progressing to the upcoming ClusterObjectDeployment API. Scope: experimental channel only — COS is experimental-only. No standard-channel CRD/manifest changes. - COS controller expresses all rollout state through a single Available condition with an expanded reason set, and never writes Progressing. Available follows a clear health model: True = healthy, False = something is wrong (whether still rolling out or in error), and Unknown is reserved solely for the initial state before the first reconciliation (never written explicitly by the controller): True/ProbesSucceeded rolled out, all probes pass (paired with completedAt) False/ProbeFailure rolling out, objects failing probes False/RollingOut rolling out, not yet complete False/Reconciling reconcile error prevented observing probes False/Blocked terminal error, manual intervention required False/ProgressDeadlineExceeded deadline exceeded before rollout False/Archived archived / torn down - operator-controller reconstructs the CE Progressing condition from COS Available + completedAt (progressingFromAvailable) instead of mirroring COS Progressing. The CE Progressing/Installed public contract is preserved on status/reason; reconstruction keys on the Available reason, not its status, so the Unknown->False change does not affect the CE contract. Archived revisions are excluded from reconstruction. - Removed the COS Progressing type constant and printcolumn; regenerated CRDs, manifests, applyconfigurations, and API reference docs. - Updated e2e steps and feature files to assert COS Available instead of Progressing (ClusterExtension Progressing assertions unchanged). Signed-off-by: Per G. da Silva <pegoncal@redhat.com> Co-authored-by: Per G. da Silva <pegoncal@redhat.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 18dfd75 commit fbdbced

16 files changed

Lines changed: 515 additions & 348 deletions

File tree

‎api/v1/clusterobjectset_types.go‎

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,7 @@ const (
2626
ClusterObjectSetKind = "ClusterObjectSet"
2727

2828
// Condition Types
29-
ClusterObjectSetTypeAvailable = "Available"
30-
ClusterObjectSetTypeProgressing = "Progressing"
29+
ClusterObjectSetTypeAvailable = "Available"
3130

3231
// Condition Reasons
3332
ClusterObjectSetReasonArchived = "Archived"
@@ -495,19 +494,19 @@ type ClusterObjectSetStatus struct {
495494
// conditions is an optional list of status conditions describing the state of the
496495
// ClusterObjectSet.
497496
//
498-
// The Progressing condition represents whether the revision is actively rolling out:
499-
// - When status is True and reason is RollingOut, the ClusterObjectSet rollout is actively making progress and is in transition.
500-
// - When status is True and reason is Retrying, the ClusterObjectSet has encountered an error that could be resolved on subsequent reconciliation attempts.
501-
// - When status is True and reason is Succeeded, the ClusterObjectSet has reached the desired state.
502-
// - When status is False and reason is Blocked, the ClusterObjectSet has encountered an error that requires manual intervention for recovery.
503-
// - When status is False and reason is Archived, the ClusterObjectSet is archived and not being actively reconciled.
497+
// The Available condition represents the state of the revision.
498+
// True means all objects are at the desired state; False means one or more
499+
// objects are not at the desired state; Unknown is the initial state, before
500+
// the first reconciliation has evaluated the revision.
501+
// - True with reason ProbesSucceeded: the revision has rolled out and all objects pass their readiness probes.
502+
// - False with reason ProbeFailure: one or more objects are failing their readiness probes during rollout.
503+
// - False with reason RollingOut: the revision is actively rolling out and has not yet become available.
504+
// - False with reason Blocked: the revision has encountered an error that requires manual intervention for recovery.
505+
// - False with reason ProgressDeadlineExceeded: the revision did not roll out within spec.progressDeadlineMinutes.
506+
// - False with reason Reconciling: the revision encountered an error that prevented it from observing the probes.
507+
// - False with reason Archived: the revision has been archived and its objects have been torn down.
504508
//
505-
// The Available condition represents whether the revision has been successfully rolled out and is available:
506-
// - When status is True and reason is ProbesSucceeded, the ClusterObjectSet has been successfully rolled out and all objects pass their readiness probes.
507-
// - When status is False and reason is ProbeFailure, one or more objects are failing their readiness probes during rollout.
508-
// - When status is Unknown and reason is Reconciling, the ClusterObjectSet has encountered an error that prevented it from observing the probes.
509-
// - When status is Unknown and reason is Archived, the ClusterObjectSet has been archived and its objects have been torn down.
510-
// - When status is Unknown and reason is Migrated, the ClusterObjectSet was migrated from an existing release and object status probe results have not yet been observed.
509+
// Rollout completion is recorded separately by status.completedAt.
511510
//
512511
// +listType=map
513512
// +listMapKey=type
@@ -562,7 +561,6 @@ type ObservedPhase struct {
562561
// +kubebuilder:resource:scope=Cluster
563562
// +kubebuilder:subresource:status
564563
// +kubebuilder:printcolumn:name="Available",type=string,JSONPath=`.status.conditions[?(@.type=='Available')].status`
565-
// +kubebuilder:printcolumn:name="Progressing",type=string,JSONPath=`.status.conditions[?(@.type=='Progressing')].status`
566564
// +kubebuilder:printcolumn:name=Age,type=date,JSONPath=`.metadata.creationTimestamp`
567565

568566
// ClusterObjectSet represents an immutable snapshot of Kubernetes objects

‎applyconfigurations/api/v1/clusterobjectsetstatus.go‎

Lines changed: 12 additions & 12 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎cmd/object-controller/main_test.go‎

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -132,10 +132,6 @@ func TestStandaloneController(t *testing.T) {
132132
assert.Equal(collect, metav1.ConditionTrue, available.Status)
133133
assert.Equal(collect, ocv1.ClusterObjectSetReasonProbesSucceeded, available.Reason)
134134
}
135-
progressing := meta.FindStatusCondition(cos.Status.Conditions, ocv1.ClusterObjectSetTypeProgressing)
136-
if assert.NotNil(collect, progressing) {
137-
assert.Equal(collect, ocv1.ReasonSucceeded, progressing.Reason)
138-
}
139135
}, time.Minute, 100*time.Millisecond)
140136
cm := &corev1.ConfigMap{}
141137
require.NoError(t, cl.Get(ctx, client.ObjectKey{Name: name, Namespace: ns.Name}, cm))

‎helm/olmv1/base/operator-controller/crd/experimental/olm.operatorframework.io_clusterobjectsets.yaml‎

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,6 @@ spec:
1919
- jsonPath: .status.conditions[?(@.type=='Available')].status
2020
name: Available
2121
type: string
22-
- jsonPath: .status.conditions[?(@.type=='Progressing')].status
23-
name: Progressing
24-
type: string
2522
- jsonPath: .metadata.creationTimestamp
2623
name: Age
2724
type: date
@@ -557,19 +554,19 @@ spec:
557554
conditions is an optional list of status conditions describing the state of the
558555
ClusterObjectSet.
559556
560-
The Progressing condition represents whether the revision is actively rolling out:
561-
- When status is True and reason is RollingOut, the ClusterObjectSet rollout is actively making progress and is in transition.
562-
- When status is True and reason is Retrying, the ClusterObjectSet has encountered an error that could be resolved on subsequent reconciliation attempts.
563-
- When status is True and reason is Succeeded, the ClusterObjectSet has reached the desired state.
564-
- When status is False and reason is Blocked, the ClusterObjectSet has encountered an error that requires manual intervention for recovery.
565-
- When status is False and reason is Archived, the ClusterObjectSet is archived and not being actively reconciled.
566-
567-
The Available condition represents whether the revision has been successfully rolled out and is available:
568-
- When status is True and reason is ProbesSucceeded, the ClusterObjectSet has been successfully rolled out and all objects pass their readiness probes.
569-
- When status is False and reason is ProbeFailure, one or more objects are failing their readiness probes during rollout.
570-
- When status is Unknown and reason is Reconciling, the ClusterObjectSet has encountered an error that prevented it from observing the probes.
571-
- When status is Unknown and reason is Archived, the ClusterObjectSet has been archived and its objects have been torn down.
572-
- When status is Unknown and reason is Migrated, the ClusterObjectSet was migrated from an existing release and object status probe results have not yet been observed.
557+
The Available condition represents the state of the revision.
558+
True means all objects are at the desired state; False means one or more
559+
objects are not at the desired state; Unknown is the initial state, before
560+
the first reconciliation has evaluated the revision.
561+
- True with reason ProbesSucceeded: the revision has rolled out and all objects pass their readiness probes.
562+
- False with reason ProbeFailure: one or more objects are failing their readiness probes during rollout.
563+
- False with reason RollingOut: the revision is actively rolling out and has not yet become available.
564+
- False with reason Blocked: the revision has encountered an error that requires manual intervention for recovery.
565+
- False with reason ProgressDeadlineExceeded: the revision did not roll out within spec.progressDeadlineMinutes.
566+
- False with reason Reconciling: the revision encountered an error that prevented it from observing the probes.
567+
- False with reason Archived: the revision has been archived and its objects have been torn down.
568+
569+
Rollout completion is recorded separately by status.completedAt.
573570
items:
574571
description: Condition contains details for one aspect of the current
575572
state of this API Resource.

0 commit comments

Comments
 (0)