X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=xappKubernetesOperator%2Finternal%2Fcontroller%2Fxappdep_controller.go;h=38cee8de059b6fea1fbb0d81d0072a4b3b224d0c;hb=655ada7c985269dfef43c0eadf96dad769d20147;hp=ec108a337fa248df4d66cbbfb7c5bb054dbff5d3;hpb=37564deeaa2575f0baff407f593fa696c511b1fb;p=ric-plt%2Fricdms.git diff --git a/xappKubernetesOperator/internal/controller/xappdep_controller.go b/xappKubernetesOperator/internal/controller/xappdep_controller.go index ec108a3..38cee8d 100644 --- a/xappKubernetesOperator/internal/controller/xappdep_controller.go +++ b/xappKubernetesOperator/internal/controller/xappdep_controller.go @@ -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" ) @@ -32,6 +35,15 @@ type XappDepReconciler struct { Scheme *runtime.Scheme } +func (r *XappDepReconciler) handle_deploy_using_generated_go_code(usage string) { + // return + if usage == "create" { + r.CreateAll() + } else { + r.DeleteAll() + } +} + //+kubebuilder:rbac:groups=depxapp.xapp.com,resources=xappdeps,verbs=get;list;watch;create;update;patch;delete //+kubebuilder:rbac:groups=depxapp.xapp.com,resources=xappdeps/status,verbs=get;update;patch //+kubebuilder:rbac:groups=depxapp.xapp.com,resources=xappdeps/finalizers,verbs=update @@ -46,9 +58,50 @@ 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 + logger.Info("--- Job is in Creation state") + r.handle_deploy_using_generated_go_code("create") + logger.Info("--- Job has been Created") + 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. + logger.Info("--- Job is in Deletion state") + r.handle_deploy_using_generated_go_code("delete") + logger.Info("--- Job has been Delete") + 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 }