@@ -2,6 +2,9 @@ package vpc
2
2
3
3
import (
4
4
"context"
5
+ "errors"
6
+ "net/http"
7
+ "time"
5
8
6
9
"github.com/scaleway/scaleway-cli/v2/core"
7
10
"github.com/scaleway/scaleway-cli/v2/core/human"
@@ -715,3 +718,39 @@ func intersectZones(regionZones, apiZones []scw.Zone) []scw.Zone {
715
718
716
719
return intersect
717
720
}
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