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 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
|
package sweepers
import (
"fmt"
vpcgwSDK "github.com/scaleway/scaleway-sdk-go/api/vpcgw/v1"
"github.com/scaleway/scaleway-sdk-go/scw"
)
func SweepVPCPublicGateway(scwClient *scw.Client, zone scw.Zone) error {
api := vpcgwSDK.NewAPI(scwClient)
listGatewayResponse, err := api.ListGateways(&vpcgwSDK.ListGatewaysRequest{
Zone: zone,
}, scw.WithAllPages())
if err != nil {
return fmt.Errorf("error listing public gateway in sweeper: %w", err)
}
for _, gateway := range listGatewayResponse.Gateways {
err := api.DeleteGateway(&vpcgwSDK.DeleteGatewayRequest{
Zone: zone,
GatewayID: gateway.ID,
})
if err != nil {
return fmt.Errorf("error deleting public gateway in sweeper: %w", err)
}
}
return nil
}
func SweepGatewayNetworks(scwClient *scw.Client, zone scw.Zone) error {
api := vpcgwSDK.NewAPI(scwClient)
listPNResponse, err := api.ListGatewayNetworks(&vpcgwSDK.ListGatewayNetworksRequest{
Zone: zone,
}, scw.WithAllPages())
if err != nil {
return fmt.Errorf("error listing gateway network in sweeper: %s", err)
}
for _, gn := range listPNResponse.GatewayNetworks {
err := api.DeleteGatewayNetwork(&vpcgwSDK.DeleteGatewayNetworkRequest{
GatewayNetworkID: gn.GatewayID,
Zone: zone,
// Cleanup the dhcp resource related. DON'T CALL THE SWEEPER DHCP
CleanupDHCP: true,
})
if err != nil {
return fmt.Errorf("error deleting gateway network in sweeper: %s", err)
}
}
return nil
}
func SweepVPCPublicGatewayIP(scwClient *scw.Client, zone scw.Zone) error {
api := vpcgwSDK.NewAPI(scwClient)
listIPResponse, err := api.ListIPs(&vpcgwSDK.ListIPsRequest{
Zone: zone,
}, scw.WithAllPages())
if err != nil {
return fmt.Errorf("error listing public gateway ip in sweeper: %s", err)
}
for _, ip := range listIPResponse.IPs {
err := api.DeleteIP(&vpcgwSDK.DeleteIPRequest{
Zone: zone,
IPID: ip.ID,
})
if err != nil {
return fmt.Errorf("error deleting public gateway ip in sweeper: %s", err)
}
}
return nil
}
func SweepVPCPublicGatewayDHCP(scwClient *scw.Client, zone scw.Zone) error {
api := vpcgwSDK.NewAPI(scwClient)
listDHCPsResponse, err := api.ListDHCPs(&vpcgwSDK.ListDHCPsRequest{
Zone: zone,
}, scw.WithAllPages())
if err != nil {
return fmt.Errorf("error listing public gateway dhcps in sweeper: %w", err)
}
for _, dhcp := range listDHCPsResponse.Dhcps {
err := api.DeleteDHCP(&vpcgwSDK.DeleteDHCPRequest{
Zone: zone,
DHCPID: dhcp.ID,
})
if err != nil {
return fmt.Errorf("error deleting public gateway dhcp in sweeper: %w", err)
}
}
return nil
}
func SweepAllLocalities(scwClient *scw.Client) error {
for _, zone := range (&vpcgwSDK.API{}).Zones() {
err := SweepVPCPublicGateway(scwClient, zone)
if err != nil {
return err
}
err = SweepGatewayNetworks(scwClient, zone)
if err != nil {
return err
}
err = SweepVPCPublicGatewayIP(scwClient, zone)
if err != nil {
return err
}
err = SweepVPCPublicGatewayDHCP(scwClient, zone)
if err != nil {
return err
}
}
return nil
}
|