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
|
package sweepers
import (
"fmt"
"github.com/scaleway/scaleway-sdk-go/api/lb/v1"
"github.com/scaleway/scaleway-sdk-go/logger"
"github.com/scaleway/scaleway-sdk-go/scw"
)
func SweepLB(scwClient *scw.Client, zone scw.Zone) error {
lbAPI := lb.NewZonedAPI(scwClient)
logger.Warningf("sweeper: destroying the lbs in (%s)", zone)
listLBs, err := lbAPI.ListLBs(&lb.ZonedAPIListLBsRequest{
Zone: zone,
}, scw.WithAllPages())
if err != nil {
return fmt.Errorf("error listing lbs in (%s) in sweeper: %s", zone, err)
}
for _, l := range listLBs.LBs {
_, err := lbAPI.WaitForLbInstances(&lb.ZonedAPIWaitForLBInstancesRequest{
Zone: zone,
LBID: l.ID,
})
if err != nil {
return fmt.Errorf("error waiting for lb in sweeper: %s", err)
}
err = lbAPI.DeleteLB(&lb.ZonedAPIDeleteLBRequest{
LBID: l.ID,
ReleaseIP: true,
Zone: zone,
})
if err != nil {
return fmt.Errorf("error deleting lb in sweeper: %s", err)
}
}
return nil
}
func SweepIP(scwClient *scw.Client, zone scw.Zone) error {
lbAPI := lb.NewZonedAPI(scwClient)
logger.Warningf("sweeper: destroying the lb ips in zone (%s)", zone)
listIPs, err := lbAPI.ListIPs(&lb.ZonedAPIListIPsRequest{Zone: zone}, scw.WithAllPages())
if err != nil {
return fmt.Errorf("error listing lb ips in (%s) in sweeper: %s", zone, err)
}
for _, ip := range listIPs.IPs {
if ip.LBID == nil {
err := lbAPI.ReleaseIP(&lb.ZonedAPIReleaseIPRequest{
Zone: zone,
IPID: ip.ID,
})
if err != nil {
return fmt.Errorf("error deleting lb ip in sweeper: %s", err)
}
}
}
return nil
}
func SweepAllLocalities(scwClient *scw.Client) error {
for _, zone := range (&lb.ZonedAPI{}).Zones() {
err := SweepLB(scwClient, zone)
if err != nil {
return err
}
err = SweepIP(scwClient, zone)
if err != nil {
return err
}
}
return nil
}
|