@@ -180,7 +180,7 @@ type ConnectionDetailsFetcher interface {
180180 FetchConnection (ctx context.Context , so resource.ConnectionSecretOwner ) (ConnectionDetails , error )
181181}
182182
183- // A Initializer establishes ownership of the supplied Managed resource.
183+ // Initializer establishes ownership of the supplied Managed resource.
184184// This typically involves the operations that are run before calling any
185185// ExternalClient methods.
186186type Initializer interface {
@@ -880,7 +880,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
880880 log .Debug ("Reconciliation is paused either through the `spec.managementPolicies` or the pause annotation" , "annotation" , meta .AnnotationKeyReconciliationPaused )
881881 record .Event (managed , event .Normal (reasonReconciliationPaused , "Reconciliation is paused either through the `spec.managementPolicies` or the pause annotation" ,
882882 "annotation" , meta .AnnotationKeyReconciliationPaused ))
883- managed .SetConditions (xpv1 .ReconcilePaused ())
883+ managed .SetConditions (xpv1 .ReconcilePaused (). WithObservedGeneration ( managed . GetGeneration ()) )
884884 // if the pause annotation is removed or the management policies changed, we will have a chance to reconcile
885885 // again and resume and if status update fails, we will reconcile again to retry to update the status
886886 return reconcile.Result {}, errors .Wrap (r .client .Status ().Update (ctx , managed ), errUpdateManagedStatus )
@@ -900,7 +900,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
900900 return reconcile.Result {Requeue : true }, nil
901901 }
902902 record .Event (managed , event .Warning (reasonManagementPolicyInvalid , err ))
903- managed .SetConditions (xpv1 .ReconcileError (err ))
903+ managed .SetConditions (xpv1 .ReconcileError (err ). WithObservedGeneration ( managed . GetGeneration ()) )
904904 return reconcile.Result {}, errors .Wrap (r .client .Status ().Update (ctx , managed ), errUpdateManagedStatus )
905905 }
906906
@@ -925,7 +925,9 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
925925 return reconcile.Result {Requeue : true }, nil
926926 }
927927 record .Event (managed , event .Warning (reasonCannotUnpublish , err ))
928- managed .SetConditions (xpv1 .Deleting (), xpv1 .ReconcileError (err ))
928+ managed .SetConditions (
929+ xpv1 .Deleting ().WithObservedGeneration (managed .GetGeneration ()),
930+ xpv1 .ReconcileError (err ).WithObservedGeneration (managed .GetGeneration ()))
929931 return reconcile.Result {Requeue : true }, errors .Wrap (r .client .Status ().Update (ctx , managed ), errUpdateManagedStatus )
930932 }
931933 if err := r .managed .RemoveFinalizer (ctx , managed ); err != nil {
@@ -937,7 +939,9 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
937939 if kerrors .IsConflict (err ) {
938940 return reconcile.Result {Requeue : true }, nil
939941 }
940- managed .SetConditions (xpv1 .Deleting (), xpv1 .ReconcileError (err ))
942+ managed .SetConditions (
943+ xpv1 .Deleting ().WithObservedGeneration (managed .GetGeneration ()),
944+ xpv1 .ReconcileError (err ).WithObservedGeneration (managed .GetGeneration ()))
941945 return reconcile.Result {Requeue : true }, errors .Wrap (r .client .Status ().Update (ctx , managed ), errUpdateManagedStatus )
942946 }
943947
@@ -959,7 +963,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
959963 return reconcile.Result {Requeue : true }, nil
960964 }
961965 record .Event (managed , event .Warning (reasonCannotInitialize , err ))
962- managed .SetConditions (xpv1 .ReconcileError (err ))
966+ managed .SetConditions (xpv1 .ReconcileError (err ). WithObservedGeneration ( managed . GetGeneration ()) )
963967 return reconcile.Result {Requeue : true }, errors .Wrap (r .client .Status ().Update (ctx , managed ), errUpdateManagedStatus )
964968 }
965969
@@ -970,7 +974,9 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
970974 if meta .ExternalCreateIncomplete (managed ) {
971975 log .Debug (errCreateIncomplete )
972976 record .Event (managed , event .Warning (reasonCannotInitialize , errors .New (errCreateIncomplete )))
973- managed .SetConditions (xpv1 .Creating (), xpv1 .ReconcileError (errors .New (errCreateIncomplete )))
977+ managed .SetConditions (
978+ xpv1 .Creating ().WithObservedGeneration (managed .GetGeneration ()),
979+ xpv1 .ReconcileError (errors .New (errCreateIncomplete )).WithObservedGeneration (managed .GetGeneration ()))
974980 return reconcile.Result {Requeue : false }, errors .Wrap (r .client .Status ().Update (ctx , managed ), errUpdateManagedStatus )
975981 }
976982
@@ -995,7 +1001,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
9951001 return reconcile.Result {Requeue : true }, nil
9961002 }
9971003 record .Event (managed , event .Warning (reasonCannotResolveRefs , err ))
998- managed .SetConditions (xpv1 .ReconcileError (err ))
1004+ managed .SetConditions (xpv1 .ReconcileError (err ). WithObservedGeneration ( managed . GetGeneration ()) )
9991005 return reconcile.Result {Requeue : true }, errors .Wrap (r .client .Status ().Update (ctx , managed ), errUpdateManagedStatus )
10001006 }
10011007 }
@@ -1012,7 +1018,8 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
10121018 return reconcile.Result {Requeue : true }, nil
10131019 }
10141020 record .Event (managed , event .Warning (reasonCannotConnect , err ))
1015- managed .SetConditions (xpv1 .ReconcileError (errors .Wrap (err , errReconcileConnect )))
1021+ managed .SetConditions (
1022+ xpv1 .ReconcileError (errors .Wrap (err , errReconcileConnect )).WithObservedGeneration (managed .GetGeneration ()))
10161023 return reconcile.Result {Requeue : true }, errors .Wrap (r .client .Status ().Update (ctx , managed ), errUpdateManagedStatus )
10171024 }
10181025 defer func () {
@@ -1040,15 +1047,17 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
10401047 return reconcile.Result {Requeue : true }, nil
10411048 }
10421049 record .Event (managed , event .Warning (reasonCannotObserve , err ))
1043- managed .SetConditions (xpv1 .ReconcileError (errors .Wrap (err , errReconcileObserve )))
1050+ managed .SetConditions (
1051+ xpv1 .ReconcileError (errors .Wrap (err , errReconcileObserve )).WithObservedGeneration (managed .GetGeneration ()))
10441052 return reconcile.Result {Requeue : true }, errors .Wrap (r .client .Status ().Update (ctx , managed ), errUpdateManagedStatus )
10451053 }
10461054
10471055 // In the observe-only mode, !observation.ResourceExists will be an error
10481056 // case, and we will explicitly return this information to the user.
10491057 if ! observation .ResourceExists && policy .ShouldOnlyObserve () {
10501058 record .Event (managed , event .Warning (reasonCannotObserve , errors .New (errExternalResourceNotExist )))
1051- managed .SetConditions (xpv1 .ReconcileError (errors .Wrap (errors .New (errExternalResourceNotExist ), errReconcileObserve )))
1059+ managed .SetConditions (
1060+ xpv1 .ReconcileError (errors .Wrap (errors .New (errExternalResourceNotExist ), errReconcileObserve )).WithObservedGeneration (managed .GetGeneration ()))
10521061 return reconcile.Result {Requeue : true }, errors .Wrap (r .client .Status ().Update (ctx , managed ), errUpdateManagedStatus )
10531062 }
10541063
@@ -1086,7 +1095,9 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
10861095 log .Info (errRecordChangeLog , "error" , err )
10871096 }
10881097 record .Event (managed , event .Warning (reasonCannotDelete , err ))
1089- managed .SetConditions (xpv1 .Deleting (), xpv1 .ReconcileError (errors .Wrap (err , errReconcileDelete )))
1098+ managed .SetConditions (
1099+ xpv1 .Deleting ().WithObservedGeneration (managed .GetGeneration ()),
1100+ xpv1 .ReconcileError (errors .Wrap (err , errReconcileDelete )).WithObservedGeneration (managed .GetGeneration ()))
10901101 return reconcile.Result {Requeue : true }, errors .Wrap (r .client .Status ().Update (ctx , managed ), errUpdateManagedStatus )
10911102 }
10921103
@@ -1102,7 +1113,9 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
11021113 log .Info (errRecordChangeLog , "error" , err )
11031114 }
11041115 record .Event (managed , event .Normal (reasonDeleted , "Successfully requested deletion of external resource" ))
1105- managed .SetConditions (xpv1 .Deleting (), xpv1 .ReconcileSuccess ())
1116+ managed .SetConditions (
1117+ xpv1 .Deleting ().WithObservedGeneration (managed .GetGeneration ()),
1118+ xpv1 .ReconcileSuccess ().WithObservedGeneration (managed .GetGeneration ()))
11061119 return reconcile.Result {Requeue : true }, errors .Wrap (r .client .Status ().Update (ctx , managed ), errUpdateManagedStatus )
11071120 }
11081121 if err := r .managed .UnpublishConnection (ctx , managed , observation .ConnectionDetails ); err != nil {
@@ -1115,7 +1128,9 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
11151128 return reconcile.Result {Requeue : true }, nil
11161129 }
11171130 record .Event (managed , event .Warning (reasonCannotUnpublish , err ))
1118- managed .SetConditions (xpv1 .Deleting (), xpv1 .ReconcileError (err ))
1131+ managed .SetConditions (
1132+ xpv1 .Deleting ().WithObservedGeneration (managed .GetGeneration ()),
1133+ xpv1 .ReconcileError (err ).WithObservedGeneration (managed .GetGeneration ()))
11191134 return reconcile.Result {Requeue : true }, errors .Wrap (r .client .Status ().Update (ctx , managed ), errUpdateManagedStatus )
11201135 }
11211136 if err := r .managed .RemoveFinalizer (ctx , managed ); err != nil {
@@ -1127,7 +1142,9 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
11271142 if kerrors .IsConflict (err ) {
11281143 return reconcile.Result {Requeue : true }, nil
11291144 }
1130- managed .SetConditions (xpv1 .Deleting (), xpv1 .ReconcileError (err ))
1145+ managed .SetConditions (
1146+ xpv1 .Deleting ().WithObservedGeneration (managed .GetGeneration ()),
1147+ xpv1 .ReconcileError (err ).WithObservedGeneration (managed .GetGeneration ()))
11311148 return reconcile.Result {Requeue : true }, errors .Wrap (r .client .Status ().Update (ctx , managed ), errUpdateManagedStatus )
11321149 }
11331150
@@ -1149,7 +1166,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
11491166 return reconcile.Result {Requeue : true }, nil
11501167 }
11511168 record .Event (managed , event .Warning (reasonCannotPublish , err ))
1152- managed .SetConditions (xpv1 .ReconcileError (err ))
1169+ managed .SetConditions (xpv1 .ReconcileError (err ). WithObservedGeneration ( managed . GetGeneration ()) )
11531170 return reconcile.Result {Requeue : true }, errors .Wrap (r .client .Status ().Update (ctx , managed ), errUpdateManagedStatus )
11541171 }
11551172
@@ -1161,7 +1178,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
11611178 if kerrors .IsConflict (err ) {
11621179 return reconcile.Result {Requeue : true }, nil
11631180 }
1164- managed .SetConditions (xpv1 .ReconcileError (err ))
1181+ managed .SetConditions (xpv1 .ReconcileError (err ). WithObservedGeneration ( managed . GetGeneration ()) )
11651182 return reconcile.Result {Requeue : true }, errors .Wrap (r .client .Status ().Update (ctx , managed ), errUpdateManagedStatus )
11661183 }
11671184
@@ -1180,7 +1197,9 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
11801197 return reconcile.Result {Requeue : true }, nil
11811198 }
11821199 record .Event (managed , event .Warning (reasonCannotUpdateManaged , errors .Wrap (err , errUpdateManaged )))
1183- managed .SetConditions (xpv1 .Creating (), xpv1 .ReconcileError (errors .Wrap (err , errUpdateManaged )))
1200+ managed .SetConditions (
1201+ xpv1 .Creating ().WithObservedGeneration (managed .GetGeneration ()),
1202+ xpv1 .ReconcileError (errors .Wrap (err , errUpdateManaged )).WithObservedGeneration (managed .GetGeneration ()))
11841203 return reconcile.Result {Requeue : true }, errors .Wrap (r .client .Status ().Update (ctx , managed ), errUpdateManagedStatus )
11851204 }
11861205
@@ -1217,7 +1236,9 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
12171236 if err := r .change .Log (ctx , managedPreOp , v1alpha1 .OperationType_OPERATION_TYPE_CREATE , err , creation .AdditionalDetails ); err != nil {
12181237 log .Info (errRecordChangeLog , "error" , err )
12191238 }
1220- managed .SetConditions (xpv1 .Creating (), xpv1 .ReconcileError (errors .Wrap (err , errReconcileCreate )))
1239+ managed .SetConditions (
1240+ xpv1 .Creating ().WithObservedGeneration (managed .GetGeneration ()),
1241+ xpv1 .ReconcileError (errors .Wrap (err , errReconcileCreate )).WithObservedGeneration (managed .GetGeneration ()))
12211242 return reconcile.Result {Requeue : true }, errors .Wrap (r .client .Status ().Update (ctx , managed ), errUpdateManagedStatus )
12221243 }
12231244
@@ -1246,7 +1267,9 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
12461267 return reconcile.Result {Requeue : true }, nil
12471268 }
12481269 record .Event (managed , event .Warning (reasonCannotUpdateManaged , errors .Wrap (err , errUpdateManagedAnnotations )))
1249- managed .SetConditions (xpv1 .Creating (), xpv1 .ReconcileError (errors .Wrap (err , errUpdateManagedAnnotations )))
1270+ managed .SetConditions (
1271+ xpv1 .Creating ().WithObservedGeneration (managed .GetGeneration ()),
1272+ xpv1 .ReconcileError (errors .Wrap (err , errUpdateManagedAnnotations )).WithObservedGeneration (managed .GetGeneration ()))
12501273 return reconcile.Result {Requeue : true }, errors .Wrap (r .client .Status ().Update (ctx , managed ), errUpdateManagedStatus )
12511274 }
12521275
@@ -1259,7 +1282,9 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
12591282 return reconcile.Result {Requeue : true }, nil
12601283 }
12611284 record .Event (managed , event .Warning (reasonCannotPublish , err ))
1262- managed .SetConditions (xpv1 .Creating (), xpv1 .ReconcileError (err ))
1285+ managed .SetConditions (
1286+ xpv1 .Creating ().WithObservedGeneration (managed .GetGeneration ()),
1287+ xpv1 .ReconcileError (err ).WithObservedGeneration (managed .GetGeneration ()))
12631288 return reconcile.Result {Requeue : true }, errors .Wrap (r .client .Status ().Update (ctx , managed ), errUpdateManagedStatus )
12641289 }
12651290
@@ -1269,7 +1294,9 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
12691294 // ready for use.
12701295 log .Debug ("Successfully requested creation of external resource" )
12711296 record .Event (managed , event .Normal (reasonCreated , "Successfully requested creation of external resource" ))
1272- managed .SetConditions (xpv1 .Creating (), xpv1 .ReconcileSuccess ())
1297+ managed .SetConditions (
1298+ xpv1 .Creating ().WithObservedGeneration (managed .GetGeneration ()),
1299+ xpv1 .ReconcileSuccess ().WithObservedGeneration (managed .GetGeneration ()))
12731300 return reconcile.Result {Requeue : true }, errors .Wrap (r .client .Status ().Update (ctx , managed ), errUpdateManagedStatus )
12741301 }
12751302
@@ -1284,7 +1311,8 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
12841311 if err := r .client .Update (ctx , managed ); err != nil {
12851312 log .Debug (errUpdateManaged , "error" , err )
12861313 record .Event (managed , event .Warning (reasonCannotUpdateManaged , err ))
1287- managed .SetConditions (xpv1 .ReconcileError (errors .Wrap (err , errUpdateManaged )))
1314+ managed .SetConditions (
1315+ xpv1 .ReconcileError (errors .Wrap (err , errUpdateManaged )).WithObservedGeneration (managed .GetGeneration ()))
12881316 return reconcile.Result {Requeue : true }, errors .Wrap (r .client .Status ().Update (ctx , managed ), errUpdateManagedStatus )
12891317 }
12901318 }
@@ -1298,7 +1326,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
12981326 // https://github.com/crossplane/crossplane/issues/289
12991327 reconcileAfter := r .pollIntervalHook (managed , r .pollInterval )
13001328 log .Debug ("External resource is up to date" , "requeue-after" , time .Now ().Add (reconcileAfter ))
1301- managed .SetConditions (xpv1 .ReconcileSuccess ())
1329+ managed .SetConditions (xpv1 .ReconcileSuccess (). WithObservedGeneration ( managed . GetGeneration ()) )
13021330 r .metricRecorder .recordFirstTimeReady (managed )
13031331
13041332 // record that we intentionally did not update the managed resource
@@ -1318,7 +1346,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
13181346 if ! policy .ShouldUpdate () {
13191347 reconcileAfter := r .pollIntervalHook (managed , r .pollInterval )
13201348 log .Debug ("Skipping update due to managementPolicies. Reconciliation succeeded" , "requeue-after" , time .Now ().Add (reconcileAfter ))
1321- managed .SetConditions (xpv1 .ReconcileSuccess ())
1349+ managed .SetConditions (xpv1 .ReconcileSuccess (). WithObservedGeneration ( managed . GetGeneration ()) )
13221350 return reconcile.Result {RequeueAfter : reconcileAfter }, errors .Wrap (r .client .Status ().Update (ctx , managed ), errUpdateManagedStatus )
13231351 }
13241352
@@ -1334,7 +1362,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
13341362 log .Info (errRecordChangeLog , "error" , err )
13351363 }
13361364 record .Event (managed , event .Warning (reasonCannotUpdate , err ))
1337- managed .SetConditions (xpv1 .ReconcileError (errors .Wrap (err , errReconcileUpdate )))
1365+ managed .SetConditions (xpv1 .ReconcileError (errors .Wrap (err , errReconcileUpdate )). WithObservedGeneration ( managed . GetGeneration ()) )
13381366 return reconcile.Result {Requeue : true }, errors .Wrap (r .client .Status ().Update (ctx , managed ), errUpdateManagedStatus )
13391367 }
13401368
@@ -1350,7 +1378,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
13501378 // not, we requeue explicitly, which will trigger backoff.
13511379 log .Debug ("Cannot publish connection details" , "error" , err )
13521380 record .Event (managed , event .Warning (reasonCannotPublish , err ))
1353- managed .SetConditions (xpv1 .ReconcileError (err ))
1381+ managed .SetConditions (xpv1 .ReconcileError (err ). WithObservedGeneration ( managed . GetGeneration ()) )
13541382 return reconcile.Result {Requeue : true }, errors .Wrap (r .client .Status ().Update (ctx , managed ), errUpdateManagedStatus )
13551383 }
13561384
@@ -1362,6 +1390,6 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
13621390 reconcileAfter := r .pollIntervalHook (managed , r .pollInterval )
13631391 log .Debug ("Successfully requested update of external resource" , "requeue-after" , time .Now ().Add (reconcileAfter ))
13641392 record .Event (managed , event .Normal (reasonUpdated , "Successfully requested update of external resource" ))
1365- managed .SetConditions (xpv1 .ReconcileSuccess ())
1393+ managed .SetConditions (xpv1 .ReconcileSuccess (). WithObservedGeneration ( managed . GetGeneration ()) )
13661394 return reconcile.Result {RequeueAfter : reconcileAfter }, errors .Wrap (r .client .Status ().Update (ctx , managed ), errUpdateManagedStatus )
13671395}
0 commit comments