...
1 package lumperctl
2
3 import (
4 "context"
5
6 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
7 ctrl "sigs.k8s.io/controller-runtime"
8 "sigs.k8s.io/controller-runtime/pkg/client"
9
10 "edge-infra.dev/pkg/k8s/runtime/inventory"
11 "edge-infra.dev/pkg/k8s/runtime/sap"
12 "edge-infra.dev/pkg/k8s/unstructured"
13 )
14
15 type Finalizer struct {
16 Name string
17 ResourceManager *sap.ResourceManager
18 }
19
20
21 func (f *Finalizer) Finalize(ctx context.Context, obj client.Object, prune bool) error {
22 log := ctrl.LoggerFrom(ctx).WithName("finalizer")
23 unstrturdObj, err := unstructured.FromRuntime(obj)
24 if err != nil {
25 return err
26 }
27 objInventory, err := inventory.GetUnstructuredInventory(unstrturdObj)
28 if err == nil && objInventory != nil && objInventory.Entries != nil && prune {
29 objs, _ := objInventory.ListObjects()
30
31 changeSet, err := f.ResourceManager.DeleteAll(ctx, objs, sap.DeleteOptions{
32 PropagationPolicy: metav1.DeletePropagationBackground,
33 })
34 if err != nil {
35 log.Error(err, "garbage collection failed")
36 return err
37 }
38 if changeSet != nil && len(changeSet.Entries) > 0 {
39 log.Info("garbage collected", "objects", changeSet)
40 }
41 }
42 return nil
43 }
44
View as plain text