@@ -193,7 +193,7 @@ func (r *KustomizationReconciler) Reconcile(ctx context.Context, req ctrl.Reques
193193 time .Since (reconcileStart ).String (),
194194 obj .Spec .Interval .Duration .String ())
195195 log .Info (msg , "revision" , obj .Status .LastAttemptedRevision )
196- r .event (obj , obj .Status .LastAppliedRevision , eventv1 .EventSeverityInfo , msg ,
196+ r .event (obj , obj .Status .LastAppliedRevision , obj . Status . LastAppliedOriginRevision , eventv1 .EventSeverityInfo , msg ,
197197 map [string ]string {
198198 kustomizev1 .GroupVersion .Group + "/" + eventv1 .MetaCommitStatusKey : eventv1 .MetaCommitStatusUpdateValue ,
199199 })
@@ -234,7 +234,7 @@ func (r *KustomizationReconciler) Reconcile(ctx context.Context, req ctrl.Reques
234234 if acl .IsAccessDenied (err ) {
235235 conditions .MarkFalse (obj , meta .ReadyCondition , apiacl .AccessDeniedReason , "%s" , err )
236236 log .Error (err , "Access denied to cross-namespace source" )
237- r .event (obj , "unknown " , eventv1 .EventSeverityError , err .Error (), nil )
237+ r .event (obj , "" , " " , eventv1 .EventSeverityError , err .Error (), nil )
238238 return ctrl.Result {RequeueAfter : obj .GetRetryInterval ()}, nil
239239 }
240240
@@ -249,14 +249,16 @@ func (r *KustomizationReconciler) Reconcile(ctx context.Context, req ctrl.Reques
249249 log .Info (msg )
250250 return ctrl.Result {RequeueAfter : r .requeueDependency }, nil
251251 }
252+ revision := artifactSource .GetArtifact ().Revision
253+ originRevision := getOriginRevision (artifactSource )
252254
253255 // Check dependencies and requeue the reconciliation if the check fails.
254256 if len (obj .Spec .DependsOn ) > 0 {
255257 if err := r .checkDependencies (ctx , obj , artifactSource ); err != nil {
256258 conditions .MarkFalse (obj , meta .ReadyCondition , meta .DependencyNotReadyReason , "%s" , err )
257259 msg := fmt .Sprintf ("Dependencies do not meet ready condition, retrying in %s" , r .requeueDependency .String ())
258260 log .Info (msg )
259- r .event (obj , artifactSource . GetArtifact (). Revision , eventv1 .EventSeverityInfo , msg , nil )
261+ r .event (obj , revision , originRevision , eventv1 .EventSeverityInfo , msg , nil )
260262 return ctrl.Result {RequeueAfter : r .requeueDependency }, nil
261263 }
262264 log .Info ("All dependencies are ready, proceeding with reconciliation" )
@@ -279,8 +281,8 @@ func (r *KustomizationReconciler) Reconcile(ctx context.Context, req ctrl.Reques
279281 time .Since (reconcileStart ).String (),
280282 obj .GetRetryInterval ().String ()),
281283 "revision" ,
282- artifactSource . GetArtifact (). Revision )
283- r .event (obj , artifactSource . GetArtifact (). Revision , eventv1 .EventSeverityError ,
284+ revision )
285+ r .event (obj , revision , originRevision , eventv1 .EventSeverityError ,
284286 reconcileErr .Error (), nil )
285287 return ctrl.Result {RequeueAfter : obj .GetRetryInterval ()}, nil
286288 }
@@ -298,6 +300,7 @@ func (r *KustomizationReconciler) reconcile(
298300
299301 // Update status with the reconciliation progress.
300302 revision := src .GetArtifact ().Revision
303+ originRevision := getOriginRevision (src )
301304 progressingMsg := fmt .Sprintf ("Fetching manifests for revision %s with a timeout of %s" , revision , obj .GetTimeout ().String ())
302305 conditions .MarkUnknown (obj , meta .ReadyCondition , meta .ProgressingReason , "%s" , "Reconciliation in progress" )
303306 conditions .MarkReconciling (obj , meta .ProgressingReason , "%s" , progressingMsg )
@@ -419,7 +422,7 @@ func (r *KustomizationReconciler) reconcile(
419422 }
420423
421424 // Validate and apply resources in stages.
422- drifted , changeSet , err := r .apply (ctx , resourceManager , obj , revision , objects )
425+ drifted , changeSet , err := r .apply (ctx , resourceManager , obj , revision , originRevision , objects )
423426 if err != nil {
424427 conditions .MarkFalse (obj , meta .ReadyCondition , meta .ReconciliationFailedReason , "%s" , err )
425428 return err
@@ -444,7 +447,7 @@ func (r *KustomizationReconciler) reconcile(
444447 }
445448
446449 // Run garbage collection for stale resources that do not have pruning disabled.
447- if _ , err := r .prune (ctx , resourceManager , obj , revision , staleObjects ); err != nil {
450+ if _ , err := r .prune (ctx , resourceManager , obj , revision , originRevision , staleObjects ); err != nil {
448451 conditions .MarkFalse (obj , meta .ReadyCondition , meta .PruneFailedReason , "%s" , err )
449452 return err
450453 }
@@ -456,15 +459,17 @@ func (r *KustomizationReconciler) reconcile(
456459 patcher ,
457460 obj ,
458461 revision ,
462+ originRevision ,
459463 isNewRevision ,
460464 drifted ,
461465 changeSet .ToObjMetadataSet ()); err != nil {
462466 conditions .MarkFalse (obj , meta .ReadyCondition , meta .HealthCheckFailedReason , "%s" , err )
463467 return err
464468 }
465469
466- // Set last applied revision .
470+ // Set last applied revisions .
467471 obj .Status .LastAppliedRevision = revision
472+ obj .Status .LastAppliedOriginRevision = originRevision
468473
469474 // Mark the object as ready.
470475 conditions .MarkTrue (obj ,
@@ -656,6 +661,7 @@ func (r *KustomizationReconciler) apply(ctx context.Context,
656661 manager * ssa.ResourceManager ,
657662 obj * kustomizev1.Kustomization ,
658663 revision string ,
664+ originRevision string ,
659665 objects []* unstructured.Unstructured ) (bool , * ssa.ChangeSet , error ) {
660666 log := ctrl .LoggerFrom (ctx )
661667
@@ -841,7 +847,7 @@ func (r *KustomizationReconciler) apply(ctx context.Context,
841847 // emit event only if the server-side apply resulted in changes
842848 applyLog := strings .TrimSuffix (changeSetLog .String (), "\n " )
843849 if applyLog != "" {
844- r .event (obj , revision , eventv1 .EventSeverityInfo , applyLog , nil )
850+ r .event (obj , revision , originRevision , eventv1 .EventSeverityInfo , applyLog , nil )
845851 }
846852
847853 return applyLog != "" , resultSet , nil
@@ -852,6 +858,7 @@ func (r *KustomizationReconciler) checkHealth(ctx context.Context,
852858 patcher * patch.SerialPatcher ,
853859 obj * kustomizev1.Kustomization ,
854860 revision string ,
861+ originRevision string ,
855862 isNewRevision bool ,
856863 drifted bool ,
857864 objects object.ObjMetadataSet ) error {
@@ -910,7 +917,7 @@ func (r *KustomizationReconciler) checkHealth(ctx context.Context,
910917 // Emit recovery event if the previous health check failed.
911918 msg := fmt .Sprintf ("Health check passed in %s" , time .Since (checkStart ).String ())
912919 if ! wasHealthy || (isNewRevision && drifted ) {
913- r .event (obj , revision , eventv1 .EventSeverityInfo , msg , nil )
920+ r .event (obj , revision , originRevision , eventv1 .EventSeverityInfo , msg , nil )
914921 }
915922
916923 conditions .MarkTrue (obj , meta .HealthyCondition , meta .SucceededReason , "%s" , msg )
@@ -925,6 +932,7 @@ func (r *KustomizationReconciler) prune(ctx context.Context,
925932 manager * ssa.ResourceManager ,
926933 obj * kustomizev1.Kustomization ,
927934 revision string ,
935+ originRevision string ,
928936 objects []* unstructured.Unstructured ) (bool , error ) {
929937 if ! obj .Spec .Prune {
930938 return false , nil
@@ -949,7 +957,7 @@ func (r *KustomizationReconciler) prune(ctx context.Context,
949957 // emit event only if the prune operation resulted in changes
950958 if changeSet != nil && len (changeSet .Entries ) > 0 {
951959 log .Info (fmt .Sprintf ("garbage collection completed: %s" , changeSet .String ()))
952- r .event (obj , revision , eventv1 .EventSeverityInfo , changeSet .String (), nil )
960+ r .event (obj , revision , originRevision , eventv1 .EventSeverityInfo , changeSet .String (), nil )
953961 return true , nil
954962 }
955963
@@ -1004,19 +1012,19 @@ func (r *KustomizationReconciler) finalize(ctx context.Context,
10041012
10051013 changeSet , err := resourceManager .DeleteAll (ctx , objects , opts )
10061014 if err != nil {
1007- r .event (obj , obj .Status .LastAppliedRevision , eventv1 .EventSeverityError , "pruning for deleted resource failed" , nil )
1015+ r .event (obj , obj .Status .LastAppliedRevision , obj . Status . LastAppliedOriginRevision , eventv1 .EventSeverityError , "pruning for deleted resource failed" , nil )
10081016 // Return the error so we retry the failed garbage collection
10091017 return ctrl.Result {}, err
10101018 }
10111019
10121020 if changeSet != nil && len (changeSet .Entries ) > 0 {
1013- r .event (obj , obj .Status .LastAppliedRevision , eventv1 .EventSeverityInfo , changeSet .String (), nil )
1021+ r .event (obj , obj .Status .LastAppliedRevision , obj . Status . LastAppliedOriginRevision , eventv1 .EventSeverityInfo , changeSet .String (), nil )
10141022 }
10151023 } else {
10161024 // when the account to impersonate is gone, log the stale objects and continue with the finalization
10171025 msg := fmt .Sprintf ("unable to prune objects: \n %s" , ssautil .FmtUnstructuredList (objects ))
10181026 log .Error (fmt .Errorf ("skiping pruning, failed to find account to impersonate" ), msg )
1019- r .event (obj , obj .Status .LastAppliedRevision , eventv1 .EventSeverityError , msg , nil )
1027+ r .event (obj , obj .Status .LastAppliedRevision , obj . Status . LastAppliedOriginRevision , eventv1 .EventSeverityError , msg , nil )
10201028 }
10211029 }
10221030
@@ -1027,13 +1035,16 @@ func (r *KustomizationReconciler) finalize(ctx context.Context,
10271035}
10281036
10291037func (r * KustomizationReconciler ) event (obj * kustomizev1.Kustomization ,
1030- revision , severity , msg string ,
1038+ revision , originRevision , severity , msg string ,
10311039 metadata map [string ]string ) {
10321040 if metadata == nil {
10331041 metadata = map [string ]string {}
10341042 }
10351043 if revision != "" {
1036- metadata [kustomizev1 .GroupVersion .Group + "/revision" ] = revision
1044+ metadata [kustomizev1 .GroupVersion .Group + "/" + eventv1 .MetaRevisionKey ] = revision
1045+ }
1046+ if originRevision != "" {
1047+ metadata [kustomizev1 .GroupVersion .Group + "/" + eventv1 .MetaOriginRevisionKey ] = originRevision
10371048 }
10381049
10391050 reason := severity
@@ -1108,3 +1119,14 @@ func (r *KustomizationReconciler) patch(ctx context.Context,
11081119
11091120 return nil
11101121}
1122+
1123+ // getOriginRevision returns the origin revision of the source artifact,
1124+ // or the empty string if it's not present, or if the artifact itself
1125+ // is not present.
1126+ func getOriginRevision (src sourcev1.Source ) string {
1127+ a := src .GetArtifact ()
1128+ if a == nil {
1129+ return ""
1130+ }
1131+ return a .Metadata [OCIArtifactOriginRevisionAnnotation ]
1132+ }
0 commit comments