@@ -3,13 +3,18 @@ package scaleway
3
3
import (
4
4
"context"
5
5
"strings"
6
+ "time"
6
7
7
8
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
8
9
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
9
10
"github.com/scaleway/scaleway-sdk-go/api/lb/v1"
10
11
"github.com/scaleway/scaleway-sdk-go/scw"
11
12
)
12
13
14
+ const (
15
+ DefaultWaitLBRetryInterval = 30 * time .Second
16
+ )
17
+
13
18
func resourceScalewayLb () * schema.Resource {
14
19
return & schema.Resource {
15
20
CreateContext : resourceScalewayLbCreate ,
@@ -60,6 +65,12 @@ func resourceScalewayLb() *schema.Resource {
60
65
Computed : true ,
61
66
Description : "The load-balance public IP address" ,
62
67
},
68
+ "release_ip" : {
69
+ Type : schema .TypeBool ,
70
+ Optional : true ,
71
+ Default : false ,
72
+ Description : "Release the IPs related to this load-balancer" ,
73
+ },
63
74
"region" : regionComputedSchema (),
64
75
"zone" : zoneSchema (),
65
76
"organization_id" : organizationIDSchema (),
@@ -132,13 +143,20 @@ func resourceScalewayLbRead(ctx context.Context, d *schema.ResourceData, meta in
132
143
return diag .FromErr (err )
133
144
}
134
145
146
+ var relaseIPValue bool
147
+ releaseIPAddress , releaseIPPExist := d .GetOk ("release_ip" )
148
+ if releaseIPPExist {
149
+ relaseIPValue = * expandBoolPtr (releaseIPAddress )
150
+ }
151
+
152
+ _ = d .Set ("release_ip" , relaseIPValue )
135
153
_ = d .Set ("name" , res .Name )
136
154
_ = d .Set ("zone" , zone .String ())
137
155
_ = d .Set ("region" , region .String ())
138
156
_ = d .Set ("organization_id" , res .OrganizationID )
139
157
_ = d .Set ("project_id" , res .ProjectID )
140
158
_ = d .Set ("tags" , res .Tags )
141
- // For now API return lowercase lb type. This should be fix in a near future on the API side
159
+ // For now API return lowercase lb type. This should be fixed in a near future on the API side
142
160
_ = d .Set ("type" , strings .ToUpper (res .Type ))
143
161
_ = d .Set ("ip_id" , newZonedIDString (zone , res .IP [0 ].ID ))
144
162
_ = d .Set ("ip_address" , res .IP [0 ].IPAddress )
@@ -160,6 +178,17 @@ func resourceScalewayLbUpdate(ctx context.Context, d *schema.ResourceData, meta
160
178
Tags : expandStrings (d .Get ("tags" )),
161
179
}
162
180
181
+ _ , err = lbAPI .WaitForLb (& lb.ZonedAPIWaitForLBRequest {
182
+ LBID : ID ,
183
+ Zone : zone ,
184
+ Timeout : scw .TimeDurationPtr (LbWaitForTimeout ),
185
+ RetryInterval : DefaultWaitRetryInterval ,
186
+ }, scw .WithContext (ctx ))
187
+
188
+ if err != nil && ! is404Error (err ) {
189
+ return diag .FromErr (err )
190
+ }
191
+
163
192
_ , err = lbAPI .UpdateLB (req , scw .WithContext (ctx ))
164
193
if err != nil {
165
194
return diag .FromErr (err )
@@ -175,21 +204,27 @@ func resourceScalewayLbDelete(ctx context.Context, d *schema.ResourceData, meta
175
204
return diag .FromErr (err )
176
205
}
177
206
178
- err = lbAPI .DeleteLB (& lb.ZonedAPIDeleteLBRequest {
179
- Zone : zone ,
180
- LBID : ID ,
181
- ReleaseIP : false ,
207
+ _ , err = lbAPI .WaitForLb (& lb.ZonedAPIWaitForLBRequest {
208
+ LBID : ID ,
209
+ Zone : zone ,
210
+ Timeout : scw .TimeDurationPtr (LbWaitForTimeout ),
211
+ RetryInterval : DefaultWaitRetryInterval ,
182
212
}, scw .WithContext (ctx ))
183
213
184
214
if err != nil && ! is404Error (err ) {
185
215
return diag .FromErr (err )
186
216
}
187
217
188
- _ , err = lbAPI .WaitForLb (& lb.ZonedAPIWaitForLBRequest {
189
- LBID : ID ,
190
- Zone : zone ,
191
- Timeout : scw .TimeDurationPtr (LbWaitForTimeout ),
192
- RetryInterval : DefaultWaitRetryInterval ,
218
+ var releaseAddressValue bool
219
+ releaseIPAddress , releaseIPPExist := d .GetOk ("release_ip" )
220
+ if releaseIPPExist {
221
+ releaseAddressValue = * expandBoolPtr (releaseIPAddress )
222
+ }
223
+
224
+ err = lbAPI .DeleteLB (& lb.ZonedAPIDeleteLBRequest {
225
+ Zone : zone ,
226
+ LBID : ID ,
227
+ ReleaseIP : releaseAddressValue ,
193
228
}, scw .WithContext (ctx ))
194
229
195
230
if err != nil && ! is404Error (err ) {
0 commit comments