Skip to content

Commit 22fbe55

Browse files
authored
CLOUDP-212108: Fix net peering cleanups (#1265)
Signed-off-by: Jose Vazquez <jose.vazquez@mongodb.com>
1 parent 0959e99 commit 22fbe55

File tree

3 files changed

+67
-8
lines changed

3 files changed

+67
-8
lines changed

tools/clean/atlas/atlas.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ func (c *Cleaner) Clean(ctx context.Context, lifetime int) error {
5252
for _, proj := range projects {
5353
p := proj
5454

55-
fmt.Println(text.FgHiWhite.Sprintf("\tStarting deletion of project %s(%s) ...", p.GetName(), p.GetId()))
55+
fmt.Println(text.FgHiWhite.Sprintf("\tStarting deletion of project %s(%s) (created at %v)...", p.GetName(), p.GetId(), p.Created))
5656

5757
if time.Since(p.Created) < time.Duration(lifetime)*time.Hour {
5858
fmt.Println(text.FgYellow.Sprintf("\tProject %s(%s) skipped once created less than %d hour ago", p.GetName(), p.GetId(), lifetime))

tools/clean/atlas/network_peering.go

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,28 @@ import (
88
"go.mongodb.org/atlas-sdk/v20231001002/admin"
99
)
1010

11-
func (c *Cleaner) listNetworkPeering(ctx context.Context, projectID string) []admin.BaseNetworkPeeringConnectionSettings {
12-
peers, _, err := c.client.NetworkPeeringApi.
13-
ListPeeringConnections(ctx, projectID).
14-
Execute()
15-
if err != nil {
16-
fmt.Println(text.FgRed.Sprintf("\tFailed to list networking peering for project %s: %s", projectID, err))
11+
var (
12+
SupportedProviders = []string{"AWS", "AZURE", "GCP"}
13+
)
1714

15+
func (c *Cleaner) listNetworkPeering(ctx context.Context, projectID string) []admin.BaseNetworkPeeringConnectionSettings {
16+
peers := []admin.BaseNetworkPeeringConnectionSettings{}
17+
for _, providerName := range SupportedProviders {
18+
peers = append(peers, c.listNetworkPeeringForProvider(ctx, projectID, providerName)...)
19+
}
20+
if len(peers) == 0 {
1821
return nil
1922
}
23+
return peers
24+
}
2025

26+
func (c *Cleaner) listNetworkPeeringForProvider(ctx context.Context, projectID, providerName string) []admin.BaseNetworkPeeringConnectionSettings {
27+
queryArgs := admin.ListPeeringConnectionsApiParams{GroupId: projectID, ProviderName: &providerName}
28+
peers, _, err := c.client.NetworkPeeringApi.ListPeeringConnectionsWithParams(ctx, &queryArgs).Execute()
29+
if err != nil {
30+
fmt.Println(text.FgRed.Sprintf("\tFailed to list %s networking peering for project %s: %s", providerName, projectID, err))
31+
return []admin.BaseNetworkPeeringConnectionSettings{}
32+
}
2133
return peers.Results
2234
}
2335

tools/clean/provider/gcp.go

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,60 @@ type GCP struct {
1919
projectID string
2020

2121
networkClient *compute.NetworksClient
22+
subnetworksClient *compute.SubnetworksClient
2223
forwardRuleClient *compute.ForwardingRulesClient
2324
addressClient *compute.AddressesClient
2425
keyManagementClient *kms.KeyManagementClient
2526
}
2627

2728
func (gcp *GCP) DeleteVpc(ctx context.Context, vpcName string) error {
29+
vpcGetRequest := &computepb.GetNetworkRequest{
30+
Project: gcp.projectID,
31+
Network: vpcName,
32+
}
33+
net, err := gcp.networkClient.Get(ctx, vpcGetRequest)
34+
if err != nil {
35+
return fmt.Errorf("failed to get VPC %q: %v", vpcName, err)
36+
}
37+
for _, subnetURL := range net.Subnetworks {
38+
subnet, region := decodeSubnetURL(subnetURL)
39+
if subnet == "" {
40+
return fmt.Errorf("failed to decode subnet URL %q", subnetURL)
41+
}
42+
subnetDeleteRequest := &computepb.DeleteSubnetworkRequest{
43+
Project: gcp.projectID,
44+
Subnetwork: subnet,
45+
Region: region,
46+
}
47+
op, err := gcp.subnetworksClient.Delete(ctx, subnetDeleteRequest)
48+
if err := waitOrFailOp(ctx, op, err); err != nil {
49+
return fmt.Errorf("failed to delete subnet %q: %v", subnet, err)
50+
}
51+
}
2852
vpcRequest := &computepb.DeleteNetworkRequest{
2953
Project: gcp.projectID,
3054
Network: vpcName,
3155
}
3256

3357
op, err := gcp.networkClient.Delete(ctx, vpcRequest)
58+
if err := waitOrFailOp(ctx, op, err); err != nil {
59+
return fmt.Errorf("failed to delete VPC %q: %v", vpcName, err)
60+
}
61+
62+
return nil
63+
}
64+
65+
func decodeSubnetURL(subnetURL string) (string, string) {
66+
parts := strings.Split(subnetURL, "/")
67+
if len(parts) < 11 {
68+
return "", ""
69+
}
70+
region := parts[8]
71+
subnet := parts[10]
72+
return subnet, region
73+
}
74+
75+
func waitOrFailOp(ctx context.Context, op *compute.Operation, err error) error {
3476
if err != nil {
3577
return err
3678
}
@@ -39,7 +81,6 @@ func (gcp *GCP) DeleteVpc(ctx context.Context, vpcName string) error {
3981
if err != nil {
4082
return err
4183
}
42-
4384
return nil
4485
}
4586

@@ -177,6 +218,11 @@ func NewGCPCleaner(ctx context.Context) (*GCP, error) {
177218
return nil, err
178219
}
179220

221+
subnetworksClient, err := compute.NewSubnetworksRESTClient(ctx)
222+
if err != nil {
223+
return nil, err
224+
}
225+
180226
forwardRuleClient, err := compute.NewForwardingRulesRESTClient(ctx)
181227
if err != nil {
182228
return nil, err
@@ -195,6 +241,7 @@ func NewGCPCleaner(ctx context.Context) (*GCP, error) {
195241
return &GCP{
196242
projectID: projectID,
197243
networkClient: networkClient,
244+
subnetworksClient: subnetworksClient,
198245
forwardRuleClient: forwardRuleClient,
199246
addressClient: addressClient,
200247
keyManagementClient: keyManagementClient,

0 commit comments

Comments
 (0)