@@ -28,7 +28,6 @@ import (
2828
2929 "github.com/go-logr/logr"
3030 "helm.sh/helm/v3/pkg/chart"
31- apierrors "k8s.io/apimachinery/pkg/api/errors"
3231 "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
3332 "k8s.io/apimachinery/pkg/runtime"
3433 "k8s.io/apimachinery/pkg/types"
@@ -37,6 +36,7 @@ import (
3736 ctrl "sigs.k8s.io/controller-runtime"
3837 "sigs.k8s.io/controller-runtime/pkg/client"
3938 "sigs.k8s.io/controller-runtime/pkg/controller"
39+ "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
4040 "sigs.k8s.io/controller-runtime/pkg/log"
4141
4242 cyclopsv1alpha1 "github.com/cyclops-ui/cyclops/cyclops-ctrl/api/v1alpha1"
@@ -107,33 +107,34 @@ func (r *ModuleReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctr
107107
108108 var module cyclopsv1alpha1.Module
109109 err := r .Get (ctx , req .NamespacedName , & module )
110- if apierrors .IsNotFound (err ) {
111- r .logger .Info ("delete module" , "namespaced name" , req .NamespacedName )
112- resources , err := r .kubernetesClient .GetResourcesForModule (req .Name )
113- if err != nil {
110+ if err != nil {
111+ if client .IgnoreNotFound (err ) != nil {
114112 r .logger .Error (err , "error on get module resources" , "namespaced name" , req .NamespacedName )
115- r .monitor .OnFailedReconciliation ()
116- return ctrl.Result {}, err
117113 }
114+ return ctrl.Result {}, client .IgnoreNotFound (err )
115+ }
118116
119- for _ , resource := range resources {
120- if err := r .kubernetesClient .Delete (resource ); err != nil {
121- r .logger .Error (
122- err ,
123- "error on delete module while deleting resource" ,
124- "module namespaced name" ,
125- req .NamespacedName ,
126- "resource namespaced name" ,
127- fmt .Sprintf ("%s/%s" , resource .GetNamespace (), resource .GetName ()),
128- )
117+ if module .GetDeletionTimestamp () != nil {
118+ if controllerutil .ContainsFinalizer (& module , cyclopsv1alpha1 .ResourceFinalizer ) {
119+ if err := r .finalizeModule (module ); err != nil {
120+ return ctrl.Result {}, err
129121 }
130- }
131122
123+ controllerutil .RemoveFinalizer (& module , cyclopsv1alpha1 .ResourceFinalizer )
124+ err := r .Update (ctx , & module )
125+ if err != nil {
126+ return ctrl.Result {}, err
127+ }
128+ }
132129 return ctrl.Result {}, nil
133130 }
134- if err != nil {
135- r .monitor .OnFailedReconciliation ()
136- return ctrl.Result {}, err
131+
132+ if ! controllerutil .ContainsFinalizer (& module , cyclopsv1alpha1 .ResourceFinalizer ) {
133+ controllerutil .AddFinalizer (& module , cyclopsv1alpha1 .ResourceFinalizer )
134+ err = r .Update (ctx , & module )
135+ if err != nil {
136+ return ctrl.Result {}, err
137+ }
137138 }
138139
139140 if len (module .Labels ) != 0 && module .Labels [cyclopsv1alpha1 .ModuleManagerLabel ] == "mcp" {
@@ -431,6 +432,28 @@ func (r *ModuleReconciler) mergeChildrenGVRs(existing, current []cyclopsv1alpha1
431432 return merged
432433}
433434
435+ func (r * ModuleReconciler ) finalizeModule (module cyclopsv1alpha1.Module ) error {
436+ resources , err := r .kubernetesClient .GetResourcesForModule (module .Name )
437+ if err != nil {
438+ return err
439+ }
440+
441+ for _ , resource := range resources {
442+ if err := r .kubernetesClient .Delete (resource ); err != nil {
443+ r .logger .Error (
444+ err ,
445+ "error finalizing module: failed to delete module" ,
446+ "module" ,
447+ module .Name ,
448+ "resource namespaced name" ,
449+ fmt .Sprintf ("%s/%s" , resource .GetNamespace (), resource .GetName ()),
450+ )
451+ }
452+ }
453+
454+ return nil
455+ }
456+
434457func (r * ModuleReconciler ) setStatus (
435458 ctx context.Context ,
436459 module cyclopsv1alpha1.Module ,
0 commit comments