From 650516c7994512e4cd7603cf7d93058342368f74 Mon Sep 17 00:00:00 2001 From: Sunny Date: Mon, 24 Jul 2023 19:18:38 +0000 Subject: [PATCH] Handle delete before adding finalizer In Reconcile() method, move the object deletion above add finalizer. Finalizers can't be set when an object is being deleted. Signed-off-by: Sunny --- internal/controller/kustomization_controller.go | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/internal/controller/kustomization_controller.go b/internal/controller/kustomization_controller.go index 3def3efc..1248604b 100644 --- a/internal/controller/kustomization_controller.go +++ b/internal/controller/kustomization_controller.go @@ -196,18 +196,20 @@ func (r *KustomizationReconciler) Reconcile(ctx context.Context, req ctrl.Reques } }() + // Prune managed resources if the object is under deletion. + if !obj.ObjectMeta.DeletionTimestamp.IsZero() { + return r.finalize(ctx, obj) + } + // Add finalizer first if it doesn't exist to avoid the race condition // between init and delete. + // Note: Finalizers in general can only be added when the deletionTimestamp + // is not set. if !controllerutil.ContainsFinalizer(obj, kustomizev1.KustomizationFinalizer) { controllerutil.AddFinalizer(obj, kustomizev1.KustomizationFinalizer) return ctrl.Result{Requeue: true}, nil } - // Prune managed resources if the object is under deletion. - if !obj.ObjectMeta.DeletionTimestamp.IsZero() { - return r.finalize(ctx, obj) - } - // Skip reconciliation if the object is suspended. if obj.Spec.Suspend { log.Info("Reconciliation is suspended for this object")