@@ -2,6 +2,9 @@ package vpc
22
33import (
44 "context"
5+ "errors"
6+ "net/http"
7+ "time"
58
69 "github.com/scaleway/scaleway-cli/v2/core"
710 "github.com/scaleway/scaleway-cli/v2/core/human"
@@ -715,3 +718,39 @@ func intersectZones(regionZones, apiZones []scw.Zone) []scw.Zone {
715718
716719 return intersect
717720}
721+
722+ func privateNetworkDeleteBuilder (c * core.Command ) * core.Command {
723+ c .Run = func (ctx context.Context , args any ) (i any , e error ) {
724+ request := args .(* vpc.DeletePrivateNetworkRequest )
725+
726+ client := core .ExtractClient (ctx )
727+ api := vpc .NewAPI (client )
728+
729+ return tryDeletingPrivateNetwork (ctx , api , request .Region , request .PrivateNetworkID , 5 )
730+ }
731+
732+ return c
733+ }
734+
735+ func tryDeletingPrivateNetwork (
736+ ctx context.Context ,
737+ api * vpc.API ,
738+ region scw.Region ,
739+ pnID string ,
740+ retriesLeft int ,
741+ ) (* vpc.PrivateNetwork , error ) {
742+ err := api .DeletePrivateNetwork (& vpc.DeletePrivateNetworkRequest {
743+ PrivateNetworkID : pnID ,
744+ Region : region ,
745+ }, scw .WithContext (ctx ))
746+
747+ var respErr * scw.ResponseError
748+ if errors .As (err , & respErr ) && respErr .StatusCode == http .StatusInternalServerError {
749+ time .Sleep (time .Second * 5 )
750+ if retriesLeft > 0 {
751+ return tryDeletingPrivateNetwork (ctx , api , region , pnID , retriesLeft - 1 )
752+ }
753+ }
754+
755+ return nil , err
756+ }
0 commit comments