/
db_root.go
89 lines (69 loc) · 2.25 KB
/
db_root.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
77
78
79
80
81
82
83
84
85
86
87
88
89
package scaleway
import (
"time"
"github.com/scaleway/scaleway-sdk-go/api/rdb/v1"
log "github.com/sirupsen/logrus"
"github.com/Qovery/pleco/pkg/common"
)
type ScalewayDB struct {
common.CloudProviderResource
Name string
}
func DeleteExpiredDatabases(sessions ScalewaySessions, options ScalewayOptions) {
expiredDatabases, _ := getExpiredDatabases(sessions.Database, &options)
count, start := common.ElemToDeleteFormattedInfos("expired database", len(expiredDatabases), options.Zone, true)
log.Info(count)
if options.DryRun || len(expiredDatabases) == 0 {
return
}
log.Info(start)
for _, expiredDb := range expiredDatabases {
deleteDB(sessions.Database, expiredDb, options.Zone)
}
}
func getExpiredDatabases(dbAPI *rdb.API, options *ScalewayOptions) ([]ScalewayDB, string) {
databases, region := listDatabases(dbAPI, options.TagName)
expiredDbs := []ScalewayDB{}
for _, db := range databases {
if db.IsResourceExpired(options.TagValue, options.DisableTTLCheck) {
expiredDbs = append(expiredDbs, db)
}
}
return expiredDbs, region
}
func listDatabases(dbAPI *rdb.API, tagName string) ([]ScalewayDB, string) {
input := &rdb.ListInstancesRequest{}
result, err := dbAPI.ListInstances(input)
if err != nil {
log.Errorf("Can't list databases for region %s: %s", input.Region, err.Error())
return []ScalewayDB{}, input.Region.String()
}
databases := []ScalewayDB{}
for _, db := range result.Instances {
essentialTags := common.GetEssentialTags(db.Tags, tagName)
creationDate, _ := time.Parse(time.RFC3339, db.CreatedAt.Format(time.RFC3339))
databases = append(databases, ScalewayDB{
CloudProviderResource: common.CloudProviderResource{
Identifier: db.ID,
Description: "Database: " + db.Name,
CreationDate: creationDate,
TTL: essentialTags.TTL,
Tag: essentialTags.Tag,
IsProtected: essentialTags.IsProtected,
},
Name: db.Name,
})
}
return databases, input.Region.String()
}
func deleteDB(dbAPI *rdb.API, db ScalewayDB, region string) {
_, err := dbAPI.DeleteInstance(
&rdb.DeleteInstanceRequest{
InstanceID: db.Identifier,
})
if err != nil {
log.Errorf("Can't delete database %s: %s", db.Name, err.Error())
} else {
log.Debugf("Database %s in %s deleted.", db.Name, region)
}
}