Adding the custom finalizer to the object. 02/12002/1
authornaman.gupta <naman.gupta@samsung.com>
Fri, 3 Nov 2023 10:26:46 +0000 (15:56 +0530)
committernaman.gupta <naman.gupta@samsung.com>
Fri, 3 Nov 2023 10:26:46 +0000 (15:56 +0530)
Adding the custom finalizer to the object to determine if the object is
under deletion or deleted.

Change-Id: I3360953c1893efe9dc6b8c3649567d3ee36e2b05
Signed-off-by: naman.gupta <naman.gupta@samsung.com>
xappKubernetesOperator/internal/controller/xappdep_controller.go

index ec108a3..5bff8d5 100644 (file)
@@ -19,9 +19,12 @@ package controller
 import (
        "context"
 
+       "k8s.io/apimachinery/pkg/api/errors"
        "k8s.io/apimachinery/pkg/runtime"
        ctrl "sigs.k8s.io/controller-runtime"
        "sigs.k8s.io/controller-runtime/pkg/client"
+       "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
+       "sigs.k8s.io/controller-runtime/pkg/log"
 
        depxappv1 "depxapp/api/v1"
 )
@@ -46,9 +49,44 @@ type XappDepReconciler struct {
 // For more details, check Reconcile and its Result here:
 // - https://pkg.go.dev/sigs.k8s.io/controller-runtime@v0.15.0/pkg/reconcile
 func (r *XappDepReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
+       logger := log.FromContext(ctx)
+       logger.Info("Reconcilling xapp")
+       instance := &depxappv1.XappDep{}
+       err := r.Get(context.TODO(), req.NamespacedName, instance)
+       if err != nil {
+               if errors.IsNotFound(err) {
+                       // object not found, could have been deleted after reconcile request, hence don't requeue
+                       return ctrl.Result{}, nil
+               }
+               // error reading the object, requeue the request
+               return ctrl.Result{}, err
+       }
 
-       // TODO(user): your logic here
+       // name of our custom finalizer
+       myFinalizerName := "batch.tutorial.kubebuilder.io/finalizer"
+       // examine DeletionTimestamp to determine if object is under deletion
+       if instance.ObjectMeta.DeletionTimestamp.IsZero() {
+               // Adding a Finaliser also adds the DeletionTimestamp while deleting
+               if !controllerutil.ContainsFinalizer(instance, myFinalizerName) {
+                       // Would Be Called only during CR-Creation
+                       controllerutil.AddFinalizer(instance, myFinalizerName)
+                       if err := r.Update(ctx, instance); err != nil {
+                               return ctrl.Result{}, err
+                       }
+               }
+       } else {
+               // The object is being deleted
+               if controllerutil.ContainsFinalizer(instance, myFinalizerName) {
+                       // remove our finalizer from the list and update it.
+                       controllerutil.RemoveFinalizer(instance, myFinalizerName)
+                       if err := r.Update(ctx, instance); err != nil {
+                               return ctrl.Result{}, err
+                       }
+               }
 
+               // Stop reconciliation as the item is being deleted
+               return ctrl.Result{}, nil
+       }
        return ctrl.Result{}, nil
 
 }