Skip to content

Commit 68ea701

Browse files
author
Per Goncalves da Silva
committed
Set Progressing to False:Archived when revision is archived
Signed-off-by: Per Goncalves da Silva <pegoncal@redhat.com>
1 parent 15d8b52 commit 68ea701

File tree

2 files changed

+33
-7
lines changed

2 files changed

+33
-7
lines changed

internal/operator-controller/controllers/clusterextensionrevision_controller.go

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,10 @@ func (c *ClusterExtensionRevisionReconciler) reconcile(ctx context.Context, rev
131131
return ctrl.Result{}, fmt.Errorf("error ensuring teardown finalizer: %v", err)
132132
}
133133

134-
// If the Available condition is not present, we are still rolling out the objects
134+
// If the Available condition is not present, we are still rolling out the objects.
135+
// NOTE: This assumes that once the Available condition is set, it will always be present.
136+
// If the Available condition is ever removed or reset during the lifecycle,
137+
// this could lead to incorrect behavior.
135138
inRollout := meta.FindStatusCondition(rev.Status.Conditions, ocv1.ClusterExtensionRevisionTypeAvailable) == nil
136139
if inRollout {
137140
if err := c.establishWatch(ctx, rev, revision); err != nil {
@@ -339,17 +342,26 @@ func (c *ClusterExtensionRevisionReconciler) teardown(ctx context.Context, rev *
339342
return ctrl.Result{}, fmt.Errorf("error stopping informers: %v", err)
340343
}
341344

342-
// Ensure Available condition is set to Unknown before removing the finalizer when archiving
343-
if rev.Spec.LifecycleState == ocv1.ClusterExtensionRevisionLifecycleStateArchived &&
344-
!meta.IsStatusConditionPresentAndEqual(rev.Status.Conditions, ocv1.ClusterExtensionRevisionTypeAvailable, metav1.ConditionUnknown) {
345-
meta.SetStatusCondition(&rev.Status.Conditions, metav1.Condition{
345+
// Ensure conditions are set before removing the finalizer when archiving
346+
if rev.Spec.LifecycleState == ocv1.ClusterExtensionRevisionLifecycleStateArchived {
347+
condUpdated := meta.SetStatusCondition(&rev.Status.Conditions, metav1.Condition{
346348
Type: ocv1.ClusterExtensionRevisionTypeAvailable,
347349
Status: metav1.ConditionUnknown,
348350
Reason: ocv1.ClusterExtensionRevisionReasonArchived,
349351
Message: "revision is archived",
350352
ObservedGeneration: rev.Generation,
351353
})
352-
return ctrl.Result{}, nil
354+
condUpdated = meta.SetStatusCondition(&rev.Status.Conditions, metav1.Condition{
355+
Type: ocv1.ClusterExtensionRevisionTypeProgressing,
356+
Status: metav1.ConditionFalse,
357+
Reason: ocv1.ClusterExtensionRevisionReasonArchived,
358+
Message: "revision is archived",
359+
ObservedGeneration: rev.Generation,
360+
}) || condUpdated
361+
362+
if condUpdated {
363+
return ctrl.Result{}, nil
364+
}
353365
}
354366

355367
if err := c.removeFinalizer(ctx, rev, clusterExtensionRevisionTeardownFinalizer); err != nil {

internal/operator-controller/controllers/clusterextensionrevision_controller_test.go

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -673,7 +673,7 @@ func Test_ClusterExtensionRevisionReconciler_Reconcile_Deletion(t *testing.T) {
673673
},
674674
},
675675
{
676-
name: "set Available condition to Unknown with reason Archived when archiving revision",
676+
name: "set Available:Archived:Unknown and Progressing:False:Unknown conditions when a revision is archived",
677677
revisionResult: mockRevisionResult{},
678678
existingObjs: func() []client.Object {
679679
ext := newTestClusterExtension()
@@ -704,6 +704,13 @@ func Test_ClusterExtensionRevisionReconciler_Reconcile_Deletion(t *testing.T) {
704704
require.Equal(t, ocv1.ClusterExtensionRevisionReasonArchived, cond.Reason)
705705
require.Equal(t, "revision is archived", cond.Message)
706706
require.Equal(t, int64(1), cond.ObservedGeneration)
707+
708+
cond = meta.FindStatusCondition(rev.Status.Conditions, ocv1.ClusterExtensionRevisionTypeProgressing)
709+
require.NotNil(t, cond)
710+
require.Equal(t, metav1.ConditionFalse, cond.Status)
711+
require.Equal(t, ocv1.ClusterExtensionRevisionReasonArchived, cond.Reason)
712+
require.Equal(t, "revision is archived", cond.Message)
713+
require.Equal(t, int64(1), cond.ObservedGeneration)
707714
},
708715
},
709716
{
@@ -723,6 +730,13 @@ func Test_ClusterExtensionRevisionReconciler_Reconcile_Deletion(t *testing.T) {
723730
Message: "revision is archived",
724731
ObservedGeneration: rev1.Generation,
725732
})
733+
meta.SetStatusCondition(&rev1.Status.Conditions, metav1.Condition{
734+
Type: ocv1.ClusterExtensionRevisionTypeProgressing,
735+
Status: metav1.ConditionFalse,
736+
Reason: ocv1.ClusterExtensionRevisionReasonArchived,
737+
Message: "revision is archived",
738+
ObservedGeneration: rev1.Generation,
739+
})
726740
require.NoError(t, controllerutil.SetControllerReference(ext, rev1, testScheme))
727741
return []client.Object{rev1, ext}
728742
},

0 commit comments

Comments
 (0)