11package vpcgwtestfuncs
22
33import (
4+ "context"
45 "fmt"
6+ "time"
57
8+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry"
69 "github.com/hashicorp/terraform-plugin-testing/helper/resource"
710 "github.com/hashicorp/terraform-plugin-testing/terraform"
811 vpcgwSDK "github.com/scaleway/scaleway-sdk-go/api/vpcgw/v1"
@@ -14,136 +17,120 @@ import (
1417
1518func IsGatewayNetworkDestroyed (tt * acctest.TestTools ) resource.TestCheckFunc {
1619 return func (state * terraform.State ) error {
17- for _ , rs := range state .RootModule ().Resources {
18- if rs .Type != "scaleway_vpc_gateway_network" {
19- continue
20- }
21-
22- vpcgwNetworkAPI , zone , ID , err := vpcgw .NewAPIWithZoneAndIDv2 (tt .Meta , rs .Primary .ID )
23- if err != nil {
24- return err
25- }
26-
27- _ , err = vpcgwNetworkAPI .GetGatewayNetwork (& v2.GetGatewayNetworkRequest {
28- GatewayNetworkID : ID ,
29- Zone : zone ,
30- })
31-
32- if err == nil {
33- return fmt .Errorf (
34- "VPC gateway network %s still exists" ,
35- rs .Primary .ID ,
36- )
37- }
38-
39- // Unexpected api error we return it
40- if ! httperrors .Is404 (err ) {
41- return err
42- }
43- }
44-
45- return nil
20+ ctx := context .Background ()
21+ return retry .RetryContext (ctx , 3 * time .Minute , func () * retry.RetryError {
22+ for _ , rs := range state .RootModule ().Resources {
23+ if rs .Type != "scaleway_vpc_gateway_network" {
24+ continue
25+ }
26+ api , zone , id , err := vpcgw .NewAPIWithZoneAndIDv2 (tt .Meta , rs .Primary .ID )
27+ if err != nil {
28+ return retry .NonRetryableError (err )
29+ }
30+ _ , err = api .GetGatewayNetwork (& v2.GetGatewayNetworkRequest {
31+ GatewayNetworkID : id ,
32+ Zone : zone ,
33+ })
34+ switch {
35+ case err == nil :
36+ return retry .RetryableError (fmt .Errorf ("VPC gateway network (%s) still exists" , rs .Primary .ID ))
37+ case httperrors .Is404 (err ):
38+ continue
39+ default :
40+ return retry .NonRetryableError (err )
41+ }
42+ }
43+ return nil
44+ })
4645 }
4746}
4847
4948func IsGatewayDestroyed (tt * acctest.TestTools ) resource.TestCheckFunc {
5049 return func (state * terraform.State ) error {
51- for _ , rs := range state .RootModule ().Resources {
52- if rs .Type != "scaleway_vpc_public_gateway" {
53- continue
54- }
55-
56- vpcgwAPI , zone , ID , err := vpcgw .NewAPIWithZoneAndIDv2 (tt .Meta , rs .Primary .ID )
57- if err != nil {
58- return err
59- }
60-
61- _ , err = vpcgwAPI .GetGateway (& v2.GetGatewayRequest {
62- GatewayID : ID ,
63- Zone : zone ,
64- })
65-
66- if err == nil {
67- return fmt .Errorf (
68- "VPC public gateway %s still exists" ,
69- rs .Primary .ID ,
70- )
71- }
72-
73- // Unexpected api error we return it
74- if ! httperrors .Is404 (err ) {
75- return err
76- }
77- }
78-
79- return nil
50+ ctx := context .Background ()
51+ return retry .RetryContext (ctx , 3 * time .Minute , func () * retry.RetryError {
52+ for _ , rs := range state .RootModule ().Resources {
53+ if rs .Type != "scaleway_vpc_public_gateway" {
54+ continue
55+ }
56+ api , zone , id , err := vpcgw .NewAPIWithZoneAndIDv2 (tt .Meta , rs .Primary .ID )
57+ if err != nil {
58+ return retry .NonRetryableError (err )
59+ }
60+ _ , err = api .GetGateway (& v2.GetGatewayRequest {
61+ GatewayID : id ,
62+ Zone : zone ,
63+ })
64+ switch {
65+ case err == nil :
66+ return retry .RetryableError (fmt .Errorf ("VPC public gateway (%s) still exists" , rs .Primary .ID ))
67+ case httperrors .Is404 (err ):
68+ continue
69+ default :
70+ return retry .NonRetryableError (err )
71+ }
72+ }
73+ return nil
74+ })
8075 }
8176}
8277
8378func IsDHCPDestroyed (tt * acctest.TestTools ) resource.TestCheckFunc {
8479 return func (state * terraform.State ) error {
85- for _ , rs := range state .RootModule ().Resources {
86- if rs .Type != "scaleway_vpc_public_gateway_dhcp" {
87- continue
88- }
89-
90- vpcgwAPI , zone , ID , err := vpcgw .NewAPIWithZoneAndID (tt .Meta , rs .Primary .ID )
91- if err != nil {
92- return err
93- }
94-
95- _ , err = vpcgwAPI .GetDHCP (& vpcgwSDK.GetDHCPRequest {
96- DHCPID : ID ,
97- Zone : zone ,
98- })
99-
100- if err == nil {
101- return fmt .Errorf (
102- "VPC public gateway DHCP config %s still exists" ,
103- rs .Primary .ID ,
104- )
105- }
106-
107- // Unexpected api error we return it
108- if ! httperrors .Is404 (err ) {
109- return err
110- }
111- }
112-
113- return nil
80+ ctx := context .Background ()
81+ return retry .RetryContext (ctx , 3 * time .Minute , func () * retry.RetryError {
82+ for _ , rs := range state .RootModule ().Resources {
83+ if rs .Type != "scaleway_vpc_public_gateway_dhcp" {
84+ continue
85+ }
86+ api , zone , id , err := vpcgw .NewAPIWithZoneAndID (tt .Meta , rs .Primary .ID ) // v1 API helper
87+ if err != nil {
88+ return retry .NonRetryableError (err )
89+ }
90+ _ , err = api .GetDHCP (& vpcgwSDK.GetDHCPRequest {
91+ DHCPID : id ,
92+ Zone : zone ,
93+ })
94+ switch {
95+ case err == nil :
96+ return retry .RetryableError (fmt .Errorf ("VPC public gateway DHCP config (%s) still exists" , rs .Primary .ID ))
97+ case httperrors .Is404 (err ):
98+ continue
99+ default :
100+ return retry .NonRetryableError (err )
101+ }
102+ }
103+ return nil
104+ })
114105 }
115106}
116107
117108func IsIPDestroyed (tt * acctest.TestTools ) resource.TestCheckFunc {
118109 return func (state * terraform.State ) error {
119- for _ , rs := range state .RootModule ().Resources {
120- if rs .Type != "scaleway_vpc_public_gateway_ip" {
121- continue
122- }
123-
124- vpcgwAPI , zone , ID , err := vpcgw .NewAPIWithZoneAndIDv2 (tt .Meta , rs .Primary .ID )
125- if err != nil {
126- return err
127- }
128-
129- _ , err = vpcgwAPI .GetIP (& v2.GetIPRequest {
130- IPID : ID ,
131- Zone : zone ,
132- })
133-
134- if err == nil {
135- return fmt .Errorf (
136- "VPC public gateway ip %s still exists" ,
137- rs .Primary .ID ,
138- )
139- }
140-
141- // Unexpected api error we return it
142- if ! httperrors .Is404 (err ) {
143- return err
144- }
145- }
146-
147- return nil
110+ ctx := context .Background ()
111+ return retry .RetryContext (ctx , 3 * time .Minute , func () * retry.RetryError {
112+ for _ , rs := range state .RootModule ().Resources {
113+ if rs .Type != "scaleway_vpc_public_gateway_ip" {
114+ continue
115+ }
116+ api , zone , id , err := vpcgw .NewAPIWithZoneAndIDv2 (tt .Meta , rs .Primary .ID )
117+ if err != nil {
118+ return retry .NonRetryableError (err )
119+ }
120+ _ , err = api .GetIP (& v2.GetIPRequest {
121+ IPID : id ,
122+ Zone : zone ,
123+ })
124+ switch {
125+ case err == nil :
126+ return retry .RetryableError (fmt .Errorf ("VPC public gateway ip (%s) still exists" , rs .Primary .ID ))
127+ case httperrors .Is404 (err ):
128+ continue
129+ default :
130+ return retry .NonRetryableError (err )
131+ }
132+ }
133+ return nil
134+ })
148135 }
149136}
0 commit comments