@@ -880,7 +880,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
880
880
log .Debug ("Reconciliation is paused either through the `spec.managementPolicies` or the pause annotation" , "annotation" , meta .AnnotationKeyReconciliationPaused )
881
881
record .Event (managed , event .Normal (reasonReconciliationPaused , "Reconciliation is paused either through the `spec.managementPolicies` or the pause annotation" ,
882
882
"annotation" , meta .AnnotationKeyReconciliationPaused ))
883
- managed .SetConditions (xpv1 .ReconcilePaused ())
883
+ managed .SetConditions (xpv1 .ReconcilePaused (). WithObservedGeneration ( managed . GetGeneration ()) )
884
884
// if the pause annotation is removed or the management policies changed, we will have a chance to reconcile
885
885
// again and resume and if status update fails, we will reconcile again to retry to update the status
886
886
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
900
900
return reconcile.Result {Requeue : true }, nil
901
901
}
902
902
record .Event (managed , event .Warning (reasonManagementPolicyInvalid , err ))
903
- managed .SetConditions (xpv1 .ReconcileError (err ))
903
+ managed .SetConditions (xpv1 .ReconcileError (err ). WithObservedGeneration ( managed . GetGeneration ()) )
904
904
return reconcile.Result {}, errors .Wrap (r .client .Status ().Update (ctx , managed ), errUpdateManagedStatus )
905
905
}
906
906
@@ -925,7 +925,10 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
925
925
return reconcile.Result {Requeue : true }, nil
926
926
}
927
927
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 ()),
931
+ )
929
932
return reconcile.Result {Requeue : true }, errors .Wrap (r .client .Status ().Update (ctx , managed ), errUpdateManagedStatus )
930
933
}
931
934
if err := r .managed .RemoveFinalizer (ctx , managed ); err != nil {
@@ -937,7 +940,10 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
937
940
if kerrors .IsConflict (err ) {
938
941
return reconcile.Result {Requeue : true }, nil
939
942
}
940
- managed .SetConditions (xpv1 .Deleting (), xpv1 .ReconcileError (err ))
943
+ managed .SetConditions (
944
+ xpv1 .Deleting ().WithObservedGeneration (managed .GetGeneration ()),
945
+ xpv1 .ReconcileError (err ).WithObservedGeneration (managed .GetGeneration ()),
946
+ )
941
947
return reconcile.Result {Requeue : true }, errors .Wrap (r .client .Status ().Update (ctx , managed ), errUpdateManagedStatus )
942
948
}
943
949
@@ -959,7 +965,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
959
965
return reconcile.Result {Requeue : true }, nil
960
966
}
961
967
record .Event (managed , event .Warning (reasonCannotInitialize , err ))
962
- managed .SetConditions (xpv1 .ReconcileError (err ))
968
+ managed .SetConditions (xpv1 .ReconcileError (err ). WithObservedGeneration ( managed . GetGeneration ()) )
963
969
return reconcile.Result {Requeue : true }, errors .Wrap (r .client .Status ().Update (ctx , managed ), errUpdateManagedStatus )
964
970
}
965
971
@@ -970,7 +976,10 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
970
976
if meta .ExternalCreateIncomplete (managed ) {
971
977
log .Debug (errCreateIncomplete )
972
978
record .Event (managed , event .Warning (reasonCannotInitialize , errors .New (errCreateIncomplete )))
973
- managed .SetConditions (xpv1 .Creating (), xpv1 .ReconcileError (errors .New (errCreateIncomplete )))
979
+ managed .SetConditions (
980
+ xpv1 .Creating ().WithObservedGeneration (managed .GetGeneration ()),
981
+ xpv1 .ReconcileError (errors .New (errCreateIncomplete )).WithObservedGeneration (managed .GetGeneration ()),
982
+ )
974
983
return reconcile.Result {Requeue : false }, errors .Wrap (r .client .Status ().Update (ctx , managed ), errUpdateManagedStatus )
975
984
}
976
985
@@ -995,7 +1004,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
995
1004
return reconcile.Result {Requeue : true }, nil
996
1005
}
997
1006
record .Event (managed , event .Warning (reasonCannotResolveRefs , err ))
998
- managed .SetConditions (xpv1 .ReconcileError (err ))
1007
+ managed .SetConditions (xpv1 .ReconcileError (err ). WithObservedGeneration ( managed . GetGeneration ()) )
999
1008
return reconcile.Result {Requeue : true }, errors .Wrap (r .client .Status ().Update (ctx , managed ), errUpdateManagedStatus )
1000
1009
}
1001
1010
}
@@ -1012,7 +1021,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
1012
1021
return reconcile.Result {Requeue : true }, nil
1013
1022
}
1014
1023
record .Event (managed , event .Warning (reasonCannotConnect , err ))
1015
- managed .SetConditions (xpv1 .ReconcileError (errors .Wrap (err , errReconcileConnect )))
1024
+ managed .SetConditions (xpv1 .ReconcileError (errors .Wrap (err , errReconcileConnect )). WithObservedGeneration ( managed . GetGeneration ()) )
1016
1025
return reconcile.Result {Requeue : true }, errors .Wrap (r .client .Status ().Update (ctx , managed ), errUpdateManagedStatus )
1017
1026
}
1018
1027
defer func () {
@@ -1040,15 +1049,15 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
1040
1049
return reconcile.Result {Requeue : true }, nil
1041
1050
}
1042
1051
record .Event (managed , event .Warning (reasonCannotObserve , err ))
1043
- managed .SetConditions (xpv1 .ReconcileError (errors .Wrap (err , errReconcileObserve )))
1052
+ managed .SetConditions (xpv1 .ReconcileError (errors .Wrap (err , errReconcileObserve )). WithObservedGeneration ( managed . GetGeneration ()) )
1044
1053
return reconcile.Result {Requeue : true }, errors .Wrap (r .client .Status ().Update (ctx , managed ), errUpdateManagedStatus )
1045
1054
}
1046
1055
1047
1056
// In the observe-only mode, !observation.ResourceExists will be an error
1048
1057
// case, and we will explicitly return this information to the user.
1049
1058
if ! observation .ResourceExists && policy .ShouldOnlyObserve () {
1050
1059
record .Event (managed , event .Warning (reasonCannotObserve , errors .New (errExternalResourceNotExist )))
1051
- managed .SetConditions (xpv1 .ReconcileError (errors .Wrap (errors .New (errExternalResourceNotExist ), errReconcileObserve )))
1060
+ managed .SetConditions (xpv1 .ReconcileError (errors .Wrap (errors .New (errExternalResourceNotExist ), errReconcileObserve )). WithObservedGeneration ( managed . GetGeneration ()) )
1052
1061
return reconcile.Result {Requeue : true }, errors .Wrap (r .client .Status ().Update (ctx , managed ), errUpdateManagedStatus )
1053
1062
}
1054
1063
@@ -1086,7 +1095,10 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
1086
1095
log .Info (errRecordChangeLog , "error" , err )
1087
1096
}
1088
1097
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 ()),
1101
+ )
1090
1102
return reconcile.Result {Requeue : true }, errors .Wrap (r .client .Status ().Update (ctx , managed ), errUpdateManagedStatus )
1091
1103
}
1092
1104
@@ -1102,7 +1114,10 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
1102
1114
log .Info (errRecordChangeLog , "error" , err )
1103
1115
}
1104
1116
record .Event (managed , event .Normal (reasonDeleted , "Successfully requested deletion of external resource" ))
1105
- managed .SetConditions (xpv1 .Deleting (), xpv1 .ReconcileSuccess ())
1117
+ managed .SetConditions (
1118
+ xpv1 .Deleting ().WithObservedGeneration (managed .GetGeneration ()),
1119
+ xpv1 .ReconcileSuccess ().WithObservedGeneration (managed .GetGeneration ()),
1120
+ )
1106
1121
return reconcile.Result {Requeue : true }, errors .Wrap (r .client .Status ().Update (ctx , managed ), errUpdateManagedStatus )
1107
1122
}
1108
1123
if err := r .managed .UnpublishConnection (ctx , managed , observation .ConnectionDetails ); err != nil {
@@ -1115,7 +1130,10 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
1115
1130
return reconcile.Result {Requeue : true }, nil
1116
1131
}
1117
1132
record .Event (managed , event .Warning (reasonCannotUnpublish , err ))
1118
- managed .SetConditions (xpv1 .Deleting (), xpv1 .ReconcileError (err ))
1133
+ managed .SetConditions (
1134
+ xpv1 .Deleting ().WithObservedGeneration (managed .GetGeneration ()),
1135
+ xpv1 .ReconcileError (err ).WithObservedGeneration (managed .GetGeneration ()),
1136
+ )
1119
1137
return reconcile.Result {Requeue : true }, errors .Wrap (r .client .Status ().Update (ctx , managed ), errUpdateManagedStatus )
1120
1138
}
1121
1139
if err := r .managed .RemoveFinalizer (ctx , managed ); err != nil {
@@ -1127,7 +1145,10 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
1127
1145
if kerrors .IsConflict (err ) {
1128
1146
return reconcile.Result {Requeue : true }, nil
1129
1147
}
1130
- managed .SetConditions (xpv1 .Deleting (), xpv1 .ReconcileError (err ))
1148
+ managed .SetConditions (
1149
+ xpv1 .Deleting ().WithObservedGeneration (managed .GetGeneration ()),
1150
+ xpv1 .ReconcileError (err ).WithObservedGeneration (managed .GetGeneration ()),
1151
+ )
1131
1152
return reconcile.Result {Requeue : true }, errors .Wrap (r .client .Status ().Update (ctx , managed ), errUpdateManagedStatus )
1132
1153
}
1133
1154
@@ -1149,7 +1170,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
1149
1170
return reconcile.Result {Requeue : true }, nil
1150
1171
}
1151
1172
record .Event (managed , event .Warning (reasonCannotPublish , err ))
1152
- managed .SetConditions (xpv1 .ReconcileError (err ))
1173
+ managed .SetConditions (xpv1 .ReconcileError (err ). WithObservedGeneration ( managed . GetGeneration ()) )
1153
1174
return reconcile.Result {Requeue : true }, errors .Wrap (r .client .Status ().Update (ctx , managed ), errUpdateManagedStatus )
1154
1175
}
1155
1176
@@ -1161,7 +1182,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
1161
1182
if kerrors .IsConflict (err ) {
1162
1183
return reconcile.Result {Requeue : true }, nil
1163
1184
}
1164
- managed .SetConditions (xpv1 .ReconcileError (err ))
1185
+ managed .SetConditions (xpv1 .ReconcileError (err ). WithObservedGeneration ( managed . GetGeneration ()) )
1165
1186
return reconcile.Result {Requeue : true }, errors .Wrap (r .client .Status ().Update (ctx , managed ), errUpdateManagedStatus )
1166
1187
}
1167
1188
@@ -1180,7 +1201,10 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
1180
1201
return reconcile.Result {Requeue : true }, nil
1181
1202
}
1182
1203
record .Event (managed , event .Warning (reasonCannotUpdateManaged , errors .Wrap (err , errUpdateManaged )))
1183
- managed .SetConditions (xpv1 .Creating (), xpv1 .ReconcileError (errors .Wrap (err , errUpdateManaged )))
1204
+ managed .SetConditions (
1205
+ xpv1 .Creating ().WithObservedGeneration (managed .GetGeneration ()),
1206
+ xpv1 .ReconcileError (errors .Wrap (err , errUpdateManaged )).WithObservedGeneration (managed .GetGeneration ()),
1207
+ )
1184
1208
return reconcile.Result {Requeue : true }, errors .Wrap (r .client .Status ().Update (ctx , managed ), errUpdateManagedStatus )
1185
1209
}
1186
1210
@@ -1217,7 +1241,10 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
1217
1241
if err := r .change .Log (ctx , managedPreOp , v1alpha1 .OperationType_OPERATION_TYPE_CREATE , err , creation .AdditionalDetails ); err != nil {
1218
1242
log .Info (errRecordChangeLog , "error" , err )
1219
1243
}
1220
- managed .SetConditions (xpv1 .Creating (), xpv1 .ReconcileError (errors .Wrap (err , errReconcileCreate )))
1244
+ managed .SetConditions (
1245
+ xpv1 .Creating ().WithObservedGeneration (managed .GetGeneration ()),
1246
+ xpv1 .ReconcileError (errors .Wrap (err , errReconcileCreate )).WithObservedGeneration (managed .GetGeneration ()),
1247
+ )
1221
1248
return reconcile.Result {Requeue : true }, errors .Wrap (r .client .Status ().Update (ctx , managed ), errUpdateManagedStatus )
1222
1249
}
1223
1250
@@ -1246,7 +1273,10 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
1246
1273
return reconcile.Result {Requeue : true }, nil
1247
1274
}
1248
1275
record .Event (managed , event .Warning (reasonCannotUpdateManaged , errors .Wrap (err , errUpdateManagedAnnotations )))
1249
- managed .SetConditions (xpv1 .Creating (), xpv1 .ReconcileError (errors .Wrap (err , errUpdateManagedAnnotations )))
1276
+ managed .SetConditions (
1277
+ xpv1 .Creating ().WithObservedGeneration (managed .GetGeneration ()),
1278
+ xpv1 .ReconcileError (errors .Wrap (err , errUpdateManagedAnnotations )).WithObservedGeneration (managed .GetGeneration ()),
1279
+ )
1250
1280
return reconcile.Result {Requeue : true }, errors .Wrap (r .client .Status ().Update (ctx , managed ), errUpdateManagedStatus )
1251
1281
}
1252
1282
@@ -1259,7 +1289,10 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
1259
1289
return reconcile.Result {Requeue : true }, nil
1260
1290
}
1261
1291
record .Event (managed , event .Warning (reasonCannotPublish , err ))
1262
- managed .SetConditions (xpv1 .Creating (), xpv1 .ReconcileError (err ))
1292
+ managed .SetConditions (
1293
+ xpv1 .Creating ().WithObservedGeneration (managed .GetGeneration ()),
1294
+ xpv1 .ReconcileError (err ).WithObservedGeneration (managed .GetGeneration ()),
1295
+ )
1263
1296
return reconcile.Result {Requeue : true }, errors .Wrap (r .client .Status ().Update (ctx , managed ), errUpdateManagedStatus )
1264
1297
}
1265
1298
@@ -1269,7 +1302,10 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
1269
1302
// ready for use.
1270
1303
log .Debug ("Successfully requested creation of external resource" )
1271
1304
record .Event (managed , event .Normal (reasonCreated , "Successfully requested creation of external resource" ))
1272
- managed .SetConditions (xpv1 .Creating (), xpv1 .ReconcileSuccess ())
1305
+ managed .SetConditions (
1306
+ xpv1 .Creating ().WithObservedGeneration (managed .GetGeneration ()),
1307
+ xpv1 .ReconcileSuccess ().WithObservedGeneration (managed .GetGeneration ()),
1308
+ )
1273
1309
return reconcile.Result {Requeue : true }, errors .Wrap (r .client .Status ().Update (ctx , managed ), errUpdateManagedStatus )
1274
1310
}
1275
1311
@@ -1284,7 +1320,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
1284
1320
if err := r .client .Update (ctx , managed ); err != nil {
1285
1321
log .Debug (errUpdateManaged , "error" , err )
1286
1322
record .Event (managed , event .Warning (reasonCannotUpdateManaged , err ))
1287
- managed .SetConditions (xpv1 .ReconcileError (errors .Wrap (err , errUpdateManaged )))
1323
+ managed .SetConditions (xpv1 .ReconcileError (errors .Wrap (err , errUpdateManaged )). WithObservedGeneration ( managed . GetGeneration ()) )
1288
1324
return reconcile.Result {Requeue : true }, errors .Wrap (r .client .Status ().Update (ctx , managed ), errUpdateManagedStatus )
1289
1325
}
1290
1326
}
@@ -1298,7 +1334,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
1298
1334
// https://github.com/crossplane/crossplane/issues/289
1299
1335
reconcileAfter := r .pollIntervalHook (managed , r .pollInterval )
1300
1336
log .Debug ("External resource is up to date" , "requeue-after" , time .Now ().Add (reconcileAfter ))
1301
- managed .SetConditions (xpv1 .ReconcileSuccess ())
1337
+ managed .SetConditions (xpv1 .ReconcileSuccess (). WithObservedGeneration ( managed . GetGeneration ()) )
1302
1338
r .metricRecorder .recordFirstTimeReady (managed )
1303
1339
1304
1340
// record that we intentionally did not update the managed resource
@@ -1318,7 +1354,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
1318
1354
if ! policy .ShouldUpdate () {
1319
1355
reconcileAfter := r .pollIntervalHook (managed , r .pollInterval )
1320
1356
log .Debug ("Skipping update due to managementPolicies. Reconciliation succeeded" , "requeue-after" , time .Now ().Add (reconcileAfter ))
1321
- managed .SetConditions (xpv1 .ReconcileSuccess ())
1357
+ managed .SetConditions (xpv1 .ReconcileSuccess (). WithObservedGeneration ( managed . GetGeneration ()) )
1322
1358
return reconcile.Result {RequeueAfter : reconcileAfter }, errors .Wrap (r .client .Status ().Update (ctx , managed ), errUpdateManagedStatus )
1323
1359
}
1324
1360
@@ -1334,7 +1370,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
1334
1370
log .Info (errRecordChangeLog , "error" , err )
1335
1371
}
1336
1372
record .Event (managed , event .Warning (reasonCannotUpdate , err ))
1337
- managed .SetConditions (xpv1 .ReconcileError (errors .Wrap (err , errReconcileUpdate )))
1373
+ managed .SetConditions (xpv1 .ReconcileError (errors .Wrap (err , errReconcileUpdate )). WithObservedGeneration ( managed . GetGeneration ()) )
1338
1374
return reconcile.Result {Requeue : true }, errors .Wrap (r .client .Status ().Update (ctx , managed ), errUpdateManagedStatus )
1339
1375
}
1340
1376
@@ -1350,7 +1386,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
1350
1386
// not, we requeue explicitly, which will trigger backoff.
1351
1387
log .Debug ("Cannot publish connection details" , "error" , err )
1352
1388
record .Event (managed , event .Warning (reasonCannotPublish , err ))
1353
- managed .SetConditions (xpv1 .ReconcileError (err ))
1389
+ managed .SetConditions (xpv1 .ReconcileError (err ). WithObservedGeneration ( managed . GetGeneration ()) )
1354
1390
return reconcile.Result {Requeue : true }, errors .Wrap (r .client .Status ().Update (ctx , managed ), errUpdateManagedStatus )
1355
1391
}
1356
1392
@@ -1362,6 +1398,6 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu
1362
1398
reconcileAfter := r .pollIntervalHook (managed , r .pollInterval )
1363
1399
log .Debug ("Successfully requested update of external resource" , "requeue-after" , time .Now ().Add (reconcileAfter ))
1364
1400
record .Event (managed , event .Normal (reasonUpdated , "Successfully requested update of external resource" ))
1365
- managed .SetConditions (xpv1 .ReconcileSuccess ())
1401
+ managed .SetConditions (xpv1 .ReconcileSuccess (). WithObservedGeneration ( managed . GetGeneration ()) )
1366
1402
return reconcile.Result {RequeueAfter : reconcileAfter }, errors .Wrap (r .client .Status ().Update (ctx , managed ), errUpdateManagedStatus )
1367
1403
}
0 commit comments