Skip to content

Commit deb4910

Browse files
authored
CB-28588 Add new module to delete GCP database instances
Add new module to delete GCP database instances
2 parents aae36ca + 0c3b084 commit deb4910

7 files changed

Lines changed: 66 additions & 0 deletions

File tree

action/termination.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ func (a terminationAction) Execute(op types.OpType, filters []types.FilterType,
4848
errors = deleteImages(provider, cloudItems)
4949
case types.Alert:
5050
errors = deleteAlerts(provider, cloudItems)
51+
case types.Database:
52+
errors = deleteDatabases(provider, cloudItems)
5153
default:
5254
panic(fmt.Sprintf("[TERMINATION] Operation on type %T is not allowed", t))
5355
}
@@ -108,3 +110,12 @@ func deleteAlerts(provider types.CloudProvider, items []*types.CloudItem) []erro
108110
}
109111
return provider.DeleteAlerts(types.NewAlertContainer(alerts))
110112
}
113+
114+
func deleteDatabases(provider types.CloudProvider, items []*types.CloudItem) []error {
115+
var databases []*types.Database
116+
for _, item := range items {
117+
database := (*item).GetItem().(types.Database)
118+
databases = append(databases, &database)
119+
}
120+
return provider.DeleteDatabases(types.NewDatabaseContainer(databases))
121+
}

action/termination_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,10 @@ func (p *mockProvider) GetDatabases() ([]*types.Database, error) {
4747
return nil, nil
4848
}
4949

50+
func (p *mockProvider) DeleteDatabases(databases *types.DatabaseContainer) []error {
51+
return nil
52+
}
53+
5054
func (p *mockProvider) GetDisks() ([]*types.Disk, error) {
5155
return nil, nil
5256
}

aws/aws.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,10 @@ func (p awsProvider) GetDatabases() ([]*types.Database, error) {
218218
return getDatabases(p.GetCloudType(), rdsClients, ctClients)
219219
}
220220

221+
func (p awsProvider) DeleteDatabases(databases *types.DatabaseContainer) []error {
222+
return []error{errors.New("[AWS] Deleting databases is not supported yet")}
223+
}
224+
221225
func (p awsProvider) GetDisks() ([]*types.Disk, error) {
222226
log.Debug("[AWS] Fetch volumes")
223227
ec2Clients, _ := p.getEc2AndCTClientsByRegion()

azure/azure.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"errors"
66
"fmt"
7+
78
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
89
"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v6"
910
"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/postgresql/armpostgresqlflexibleservers/v4"
@@ -481,6 +482,10 @@ func (p azureProvider) GetDatabases() ([]*types.Database, error) {
481482
return databases, nil
482483
}
483484

485+
func (p azureProvider) DeleteDatabases(databases *types.DatabaseContainer) []error {
486+
return []error{errors.New("[AZURE] Deleting databases is not supported yet")}
487+
}
488+
484489
func (p azureProvider) GetAlerts() ([]*types.Alert, error) {
485490
return nil, errors.New("[AZURE] Getting alerts is not supported yet")
486491
}

gcp/gcp.go

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -791,6 +791,43 @@ func (p gcpProvider) GetDatabases() ([]*types.Database, error) {
791791
return p.getDatabases(aggregator)
792792
}
793793

794+
func (p gcpProvider) DeleteDatabases(databases *types.DatabaseContainer) []error {
795+
gcpDatabases := databases.Get(types.GCP)
796+
log.Debugf("[GCP] Deleting databases: %v", gcpDatabases)
797+
798+
wg := sync.WaitGroup{}
799+
wg.Add(len(gcpDatabases))
800+
errChan := make(chan error)
801+
802+
for _, database := range gcpDatabases {
803+
804+
go func(database *types.Database) {
805+
defer wg.Done()
806+
807+
if ctx.DryRun {
808+
log.Infof("[GCP] Dry-run set, db is not deleted: %s", database.Name)
809+
} else {
810+
err := p.doAndPollSqlCall(p.sqlClient.Instances.Delete(p.projectID, database.Name))
811+
if err != nil {
812+
log.Errorf("[GCP] Failed to delete db %s, err: %s", database.Name, err)
813+
errChan <- err
814+
}
815+
}
816+
}(database)
817+
}
818+
819+
go func() {
820+
wg.Wait()
821+
close(errChan)
822+
}()
823+
824+
var errs []error
825+
for err := range errChan {
826+
errs = append(errs, err)
827+
}
828+
return errs
829+
}
830+
794831
type instancesListAggregator interface {
795832
Do(...googleapi.CallOption) (*compute.InstanceAggregatedList, error)
796833
}

operation/common_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,10 @@ func (p dummyProvider) GetDatabases() ([]*types.Database, error) {
8989
return nil, nil
9090
}
9191

92+
func (p dummyProvider) DeleteDatabases(databases *types.DatabaseContainer) []error {
93+
return nil
94+
}
95+
9296
func (p dummyProvider) GetDisks() ([]*types.Disk, error) {
9397
return nil, nil
9498
}

types/cloud.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ type CloudProvider interface {
3535
DeleteAlerts(*AlertContainer) []error
3636
GetAccesses() ([]*Access, error)
3737
GetDatabases() ([]*Database, error)
38+
DeleteDatabases(*DatabaseContainer) []error
3839
GetDisks() ([]*Disk, error)
3940
DeleteDisks(*DiskContainer) []error
4041
GetImages() ([]*Image, error)

0 commit comments

Comments
 (0)