From 3e7ac0d8a79f1f514d3735039c7dc92160fd35a4 Mon Sep 17 00:00:00 2001 From: "naman.gupta" Date: Fri, 17 Nov 2023 18:20:08 +0530 Subject: [PATCH] Adding the custom finalizer to the object. 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 --- depRicKubernetesOperator/go.mod | 5 --- .../internal/controller/ricplatform_controller.go | 42 +++++++++++++++++++++- 2 files changed, 41 insertions(+), 6 deletions(-) diff --git a/depRicKubernetesOperator/go.mod b/depRicKubernetesOperator/go.mod index 55fe72a..d6e6614 100644 --- a/depRicKubernetesOperator/go.mod +++ b/depRicKubernetesOperator/go.mod @@ -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 diff --git a/depRicKubernetesOperator/internal/controller/ricplatform_controller.go b/depRicKubernetesOperator/internal/controller/ricplatform_controller.go index 21bcc6d..314b92e 100644 --- a/depRicKubernetesOperator/internal/controller/ricplatform_controller.go +++ b/depRicKubernetesOperator/internal/controller/ricplatform_controller.go @@ -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 } -- 2.16.6