Skip to content

Commit

Permalink
remove status controller finilizer
Browse files Browse the repository at this point in the history
  • Loading branch information
zreigz committed Jul 25, 2024
1 parent 6d3feb3 commit 929cab3
Showing 1 changed file with 32 additions and 28 deletions.
60 changes: 32 additions & 28 deletions internal/controller/status_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,14 @@ package controller
import (
"context"

"sigs.k8s.io/controller-runtime/pkg/event"

corev1 "k8s.io/api/core/v1"
cliutilscommon "sigs.k8s.io/cli-utils/pkg/common"
"sigs.k8s.io/cli-utils/pkg/inventory"
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/client"
k8sClient "sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
"sigs.k8s.io/controller-runtime/pkg/log"
"sigs.k8s.io/controller-runtime/pkg/predicate"
"sigs.k8s.io/controller-runtime/pkg/reconcile"
Expand All @@ -19,10 +20,6 @@ import (
"github.com/pluralsh/deployment-operator/pkg/common"
)

const (
StatusFinalizer = "deployments.plural.sh/inventory-protection"
)

type StatusReconciler struct {
k8sClient.Client
inventoryCache cache.InventoryResourceKeys
Expand All @@ -37,6 +34,10 @@ func (r *StatusReconciler) Reconcile(ctx context.Context, req reconcile.Request)
return ctrl.Result{}, k8sClient.IgnoreNotFound(err)
}

if !configMap.DeletionTimestamp.IsZero() {
return ctrl.Result{}, nil
}

scope, err := NewDefaultScope(ctx, r.Client, configMap)
if err != nil {
logger.Error(err, "failed to create configmap definition scope")
Expand All @@ -50,12 +51,6 @@ func (r *StatusReconciler) Reconcile(ctx context.Context, req reconcile.Request)
}
}()

// Handle proper resource deletion via finalizer
result, err := r.addOrRemoveFinalizer(configMap)
if result != nil {
return *result, err
}

inv, err := common.ToUnstructured(configMap)
if err != nil {
return ctrl.Result{}, err
Expand Down Expand Up @@ -88,28 +83,37 @@ func (r *StatusReconciler) SetupWithManager(mgr ctrl.Manager) error {
_, exists := o.GetLabels()[cliutilscommon.InventoryLabel]
return exists
})).
WithEventFilter(withInventoryEventFilter(r.inventoryCache)).
Complete(r)
}

func (r *StatusReconciler) addOrRemoveFinalizer(cm *corev1.ConfigMap) (*ctrl.Result, error) {
// If object is not being deleted and if it does not have our finalizer,
// then lets add the finalizer. This is equivalent to registering our finalizer.
if cm.ObjectMeta.DeletionTimestamp.IsZero() && !controllerutil.ContainsFinalizer(cm, StatusFinalizer) {
controllerutil.AddFinalizer(cm, StatusFinalizer)
}

// If object is being deleted cleanup and remove the finalizer.
if !cm.ObjectMeta.DeletionTimestamp.IsZero() {
inventoryID := r.inventoryID(cm)
delete(r.inventoryCache, inventoryID)
cache.GetResourceCache().Unregister(r.inventoryCache.Values().TypeIdentifierSet())

// Stop reconciliation as the item is being deleted
controllerutil.RemoveFinalizer(cm, StatusFinalizer)
return &ctrl.Result{}, nil
func withInventoryEventFilter(inventoryCache cache.InventoryResourceKeys) predicate.Predicate {
return predicate.Funcs{
CreateFunc: func(e event.CreateEvent) bool {
return true
},
UpdateFunc: func(e event.UpdateEvent) bool {
return true
},
DeleteFunc: func(deleteEvent event.DeleteEvent) bool {
if deleteEvent.Object == nil {
return false
}
inventoryID, exists := deleteEvent.Object.GetLabels()[cliutilscommon.InventoryLabel]
if exists {
deleteFromInventoryCache(inventoryCache, inventoryID)
}
return true
},
GenericFunc: func(e event.GenericEvent) bool {
return false
},
}
}

return nil, nil
func deleteFromInventoryCache(inventoryCache cache.InventoryResourceKeys, inventoryID string) {
delete(inventoryCache, inventoryID)
cache.GetResourceCache().Unregister(inventoryCache.Values().TypeIdentifierSet())
}

func (r *StatusReconciler) inventoryID(c *corev1.ConfigMap) string {
Expand Down

0 comments on commit 929cab3

Please sign in to comment.