/
processing.go
76 lines (61 loc) · 1.95 KB
/
processing.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
package app
import (
"github.com/softonic/cloud-disks-cleaner/pkg/gcp"
"github.com/softonic/cloud-disks-cleaner/pkg/kubernetes"
"github.com/softonic/cloud-disks-cleaner/pkg/usage"
"google.golang.org/api/compute/v1"
"k8s.io/klog"
)
func ProcessUnusedDisks(gcpChecker usage.Checker, k8sChecker usage.Checker) ([]string, []string, error) {
disksToBeRemoved := []string{}
pvsToBeRemoved := []string{}
computeDisks, err := gcpChecker.ListResources()
if err != nil {
return nil, nil, err
}
for _, diskInterface := range computeDisks {
disk, ok := diskInterface.(*compute.Disk)
if !ok {
klog.Errorf("Error: expected item of type compute.Disk, got %T", diskInterface)
continue // skip to the next disk if there's a type mismatch
}
isNotUsedByAnyNode, _, err := gcpChecker.IsResourceUnused(disk.Name)
if err == nil && !isNotUsedByAnyNode {
continue
} else if err != nil {
klog.Errorf("Error checking usage of disk %s: %v", disk.Name, err)
return nil, nil, err
}
isUnused, pvName, err := k8sChecker.IsResourceUnused(disk.Name)
if err != nil {
klog.Errorf("Error checking usage of disk %s: %v", disk.Name, err)
continue // skip to the next disk if there's an error
}
if isUnused {
disksToBeRemoved = append(disksToBeRemoved, disk.Name)
pvsToBeRemoved = append(pvsToBeRemoved, pvName)
}
klog.Infof("list of pvs => %v", pvsToBeRemoved)
}
return disksToBeRemoved, pvsToBeRemoved, nil
}
func RemoveUnusedDisks(gcpDeleter *gcp.GCPDeleter, disks []string) {
for _, disk := range disks {
klog.Infof("Delete disk %s", disk)
err := gcpDeleter.DeleteResource("disk", disk)
if err != nil {
klog.Errorf("Failed to delete disk %s: %v", disk, err)
continue
}
}
}
func RemoveUnusedPVs(k8sDeleter *kubernetes.K8sDeleter, pvs []string) {
for _, PV := range pvs {
klog.Infof("Delete PV %s", PV)
err := k8sDeleter.DeleteResource(PV)
if err != nil {
klog.Errorf("Failed to delete PV %s: %v", PV, err)
continue
}
}
}