@@ -5,6 +5,7 @@ package controllers
55import (
66 "context"
77 "encoding/json"
8+ "errors"
89 "fmt"
910 "strings"
1011 "time"
@@ -105,20 +106,58 @@ func (c *ClusterExtensionRevisionReconciler) reconcile(ctx context.Context, ce *
105106 }
106107 rres , err := c .RevisionEngine .Reconcile (ctx , * revision , opts ... )
107108 if err != nil {
108- return ctrl.Result {}, fmt .Errorf ("revision reconcile: %w" , err )
109+ meta .SetStatusCondition (& rev .Status .Conditions , metav1.Condition {
110+ Type : "Available" ,
111+ Status : metav1 .ConditionFalse ,
112+ Reason : "ReconcileFailure" ,
113+ Message : err .Error (),
114+ ObservedGeneration : rev .Generation ,
115+ })
116+ return ctrl.Result {}, fmt .Errorf ("revision reconcile: %w" , errors .Join (err , c .Client .Status ().Update (ctx , rev )))
109117 }
110118 l .Info ("reconcile report" , "report" , rres .String ())
111119
112120 // Retry failing preflight checks with a flat 10s retry.
113121 // TODO: report status, backoff?
114122 if verr := rres .GetValidationError (); verr != nil {
115123 l .Info ("preflight error, retrying after 10s" , "err" , verr .String ())
116- return ctrl.Result {RequeueAfter : 10 * time .Second }, nil
124+ meta .SetStatusCondition (& rev .Status .Conditions , metav1.Condition {
125+ Type : "Available" ,
126+ Status : metav1 .ConditionFalse ,
127+ Reason : "RevisionValidationFailure" ,
128+ Message : fmt .Sprintf ("revision validation error: %s" , verr ),
129+ ObservedGeneration : rev .Generation ,
130+ })
131+ return ctrl.Result {RequeueAfter : 10 * time .Second }, c .Client .Status ().Update (ctx , rev )
117132 }
118- for _ , pres := range rres .GetPhases () {
133+ for i , pres := range rres .GetPhases () {
119134 if verr := pres .GetValidationError (); verr != nil {
120135 l .Info ("preflight error, retrying after 10s" , "err" , verr .String ())
121- return ctrl.Result {RequeueAfter : 10 * time .Second }, nil
136+ meta .SetStatusCondition (& rev .Status .Conditions , metav1.Condition {
137+ Type : "Available" ,
138+ Status : metav1 .ConditionFalse ,
139+ Reason : "PhaseValidationError" ,
140+ Message : fmt .Sprintf ("phase %d validation error: %s" , i , verr ),
141+ ObservedGeneration : rev .Generation ,
142+ })
143+ return ctrl.Result {RequeueAfter : 10 * time .Second }, c .Client .Status ().Update (ctx , rev )
144+ }
145+ var collidingObjs []string
146+ for _ , ores := range pres .GetObjects () {
147+ if ores .Action () == machinery .ActionCollision {
148+ collidingObjs = append (collidingObjs , ores .String ())
149+ }
150+ }
151+ if len (collidingObjs ) > 0 {
152+ l .Info ("object collision error, retrying after 10s" , "collisions" , collidingObjs )
153+ meta .SetStatusCondition (& rev .Status .Conditions , metav1.Condition {
154+ Type : "Available" ,
155+ Status : metav1 .ConditionFalse ,
156+ Reason : "ObjectCollisions" ,
157+ Message : fmt .Sprintf ("revision object collisions in phase %d\n %s" , i , strings .Join (collidingObjs , "\n \n " )),
158+ ObservedGeneration : rev .Generation ,
159+ })
160+ return ctrl.Result {RequeueAfter : 10 * time .Second }, c .Client .Status ().Update (ctx , rev )
122161 }
123162 }
124163
@@ -191,14 +230,14 @@ func (c *ClusterExtensionRevisionReconciler) reconcile(ctx context.Context, ce *
191230 }
192231 if rres .InTransistion () {
193232 meta .SetStatusCondition (& rev .Status .Conditions , metav1.Condition {
194- Type : "InTransition " ,
233+ Type : "Progressing " ,
195234 Status : metav1 .ConditionTrue ,
196- Reason : "InTransition " ,
235+ Reason : "Progressing " ,
197236 Message : "Rollout in progress." ,
198237 ObservedGeneration : rev .Generation ,
199238 })
200239 } else {
201- meta .RemoveStatusCondition (& rev .Status .Conditions , "InTransition " )
240+ meta .RemoveStatusCondition (& rev .Status .Conditions , "Progressing " )
202241 }
203242
204243 return ctrl.Result {}, c .Client .Status ().Update (ctx , rev )
0 commit comments