package lumperctl import ( "context" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" "edge-infra.dev/pkg/k8s/runtime/inventory" "edge-infra.dev/pkg/k8s/runtime/sap" "edge-infra.dev/pkg/k8s/unstructured" ) type Finalizer struct { Name string ResourceManager *sap.ResourceManager } // Finalize loops over the inventory and garbage collects the entries before removing the finalizer. func (f *Finalizer) Finalize(ctx context.Context, obj client.Object, prune bool) error { log := ctrl.LoggerFrom(ctx).WithName("finalizer") unstrturdObj, err := unstructured.FromRuntime(obj) if err != nil { return err } objInventory, err := inventory.GetUnstructuredInventory(unstrturdObj) if err == nil && objInventory != nil && objInventory.Entries != nil && prune { objs, _ := objInventory.ListObjects() changeSet, err := f.ResourceManager.DeleteAll(ctx, objs, sap.DeleteOptions{ PropagationPolicy: metav1.DeletePropagationBackground, }) if err != nil { log.Error(err, "garbage collection failed") return err } if changeSet != nil && len(changeSet.Entries) > 0 { log.Info("garbage collected", "objects", changeSet) } } return nil }