Adding the custom finalizer to the object. 76/12076/2
authornaman.gupta <naman.gupta@samsung.com>
Fri, 17 Nov 2023 12:50:08 +0000 (18:20 +0530)
committerThoralf Czichy <thoralf.czichy@nokia.com>
Thu, 7 Dec 2023 09:17:48 +0000 (09:17 +0000)
Adding the custom finalizer to the object to determine if the object is
under deletion or deleted.

Change-Id: Id40d56c4658fb4ab4cc247fce54ad9e7a471babe
Signed-off-by: naman.gupta <naman.gupta@samsung.com>
depRicKubernetesOperator/go.mod
depRicKubernetesOperator/internal/controller/ricplatform_controller.go

index 55fe72a..d6e6614 100644 (file)
@@ -3,8 +3,6 @@ module ricdeploy
 go 1.20
 
 require (
-       github.com/onsi/ginkgo/v2 v2.9.5
-       github.com/onsi/gomega v1.27.7
        k8s.io/apimachinery v0.27.2
        k8s.io/client-go v0.27.2
        sigs.k8s.io/controller-runtime v0.15.0
@@ -22,14 +20,12 @@ require (
        github.com/go-openapi/jsonpointer v0.19.6 // indirect
        github.com/go-openapi/jsonreference v0.20.1 // indirect
        github.com/go-openapi/swag v0.22.3 // indirect
-       github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect
        github.com/gogo/protobuf v1.3.2 // indirect
        github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
        github.com/golang/protobuf v1.5.3 // indirect
        github.com/google/gnostic v0.5.7-v3refs // indirect
        github.com/google/go-cmp v0.5.9 // indirect
        github.com/google/gofuzz v1.1.0 // indirect
-       github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 // indirect
        github.com/google/uuid v1.3.0 // indirect
        github.com/imdario/mergo v0.3.6 // indirect
        github.com/josharian/intern v1.0.0 // indirect
@@ -54,7 +50,6 @@ require (
        golang.org/x/term v0.8.0 // indirect
        golang.org/x/text v0.9.0 // indirect
        golang.org/x/time v0.3.0 // indirect
-       golang.org/x/tools v0.9.1 // indirect
        gomodules.xyz/jsonpatch/v2 v2.3.0 // indirect
        google.golang.org/appengine v1.6.7 // indirect
        google.golang.org/protobuf v1.30.0 // indirect
index 21bcc6d..314b92e 100644 (file)
@@ -25,9 +25,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"
 
        ricdeployv1 "ricdeploy/api/v1"
 )
@@ -53,7 +56,44 @@ type RicPlatformReconciler struct {
 // - https://pkg.go.dev/sigs.k8s.io/controller-runtime@v0.15.0/pkg/reconcile
 func (r *RicPlatformReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
 
-       // TODO(user): your logic here
+       logger := log.FromContext(ctx)
+       logger.Info("Reconcilling RIC")
+       instance := &ricdeployv1.RicPlatform{}
+       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
+       }
+
+       // 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) {
+                       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
 }