@@ -4,8 +4,10 @@ import (
4
4
"context"
5
5
"time"
6
6
7
+ "github.com/hashicorp/go-cty/cty"
7
8
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
8
9
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
10
+ ipamAPI "github.com/scaleway/scaleway-sdk-go/api/ipam/v1"
9
11
"github.com/scaleway/scaleway-sdk-go/api/vpcgw/v1"
10
12
v2 "github.com/scaleway/scaleway-sdk-go/api/vpcgw/v2"
11
13
"github.com/scaleway/scaleway-sdk-go/scw"
@@ -14,6 +16,7 @@ import (
14
16
"github.com/scaleway/terraform-provider-scaleway/v2/internal/locality/zonal"
15
17
"github.com/scaleway/terraform-provider-scaleway/v2/internal/meta"
16
18
"github.com/scaleway/terraform-provider-scaleway/v2/internal/services/instance"
19
+ "github.com/scaleway/terraform-provider-scaleway/v2/internal/services/ipam"
17
20
"github.com/scaleway/terraform-provider-scaleway/v2/internal/types"
18
21
)
19
22
@@ -223,10 +226,10 @@ func readVPCGWResourceDataV2(d *schema.ResourceData, gw *v2.Gateway) diag.Diagno
223
226
}
224
227
225
228
// readVPCGWNetworkResourceDataV1 sets the resource data using a v1 gateway network
226
- func readVPCGWNetworkResourceDataV1 (d * schema.ResourceData , gatewayNetwork * vpcgw.GatewayNetwork ) diag.Diagnostics {
229
+ func readVPCGWNetworkResourceDataV1 (d * schema.ResourceData , gatewayNetwork * vpcgw.GatewayNetwork , diags diag. Diagnostics ) diag.Diagnostics {
227
230
fetchRegion , err := gatewayNetwork .Zone .Region ()
228
231
if err != nil {
229
- return diag .FromErr (err )
232
+ return append ( diags , diag .FromErr (err ) ... )
230
233
}
231
234
232
235
_ = d .Set ("private_network_id" , regional .NewIDString (fetchRegion , gatewayNetwork .PrivateNetworkID ))
@@ -265,10 +268,10 @@ func readVPCGWNetworkResourceDataV1(d *schema.ResourceData, gatewayNetwork *vpcg
265
268
}
266
269
267
270
// readVPCGWNetworkResourceDataV2 sets the resource data using a v1 gateway network
268
- func readVPCGWNetworkResourceDataV2 (d * schema.ResourceData , gatewayNetwork * v2.GatewayNetwork ) diag.Diagnostics {
271
+ func readVPCGWNetworkResourceDataV2 (d * schema.ResourceData , gatewayNetwork * v2.GatewayNetwork , diags diag. Diagnostics ) diag.Diagnostics {
269
272
fetchRegion , err := gatewayNetwork .Zone .Region ()
270
273
if err != nil {
271
- return diag .FromErr (err )
274
+ return append ( diags , diag .FromErr (err ) ... )
272
275
}
273
276
274
277
_ = d .Set ("private_network_id" , regional .NewIDString (fetchRegion , gatewayNetwork .PrivateNetworkID ))
@@ -301,6 +304,74 @@ func readVPCGWNetworkResourceDataV2(d *schema.ResourceData, gatewayNetwork *v2.G
301
304
return nil
302
305
}
303
306
307
+ func getPrivateIPsV1 (ctx context.Context , gn * vpcgw.GatewayNetwork , m interface {}) (interface {}, diag.Diagnostics ) {
308
+ var privateIPs []map [string ]interface {}
309
+
310
+ resourceID := gn .ID
311
+
312
+ region , err := gn .Zone .Region ()
313
+ if err != nil {
314
+ return nil , diag .FromErr (err )
315
+ }
316
+
317
+ resourceType := ipamAPI .ResourceTypeVpcGatewayNetwork
318
+ opts := & ipam.GetResourcePrivateIPsOptions {
319
+ ResourceID : & resourceID ,
320
+ ResourceType : & resourceType ,
321
+ PrivateNetworkID : & gn .PrivateNetworkID ,
322
+ }
323
+
324
+ privateIPs , err = ipam .GetResourcePrivateIPs (ctx , m , region , opts )
325
+ if err != nil {
326
+ if ! httperrors .Is403 (err ) {
327
+ return nil , diag .FromErr (err )
328
+ }
329
+
330
+ return nil , diag.Diagnostics {diag.Diagnostic {
331
+ Severity : diag .Warning ,
332
+ Summary : err .Error (),
333
+ Detail : "Got 403 while reading private IPs from IPAM API, please check your IAM permissions" ,
334
+ AttributePath : cty .GetAttrPath ("private_ips" ),
335
+ }}
336
+ }
337
+
338
+ return privateIPs , nil
339
+ }
340
+
341
+ func getPrivateIPsV2 (ctx context.Context , gn * v2.GatewayNetwork , m interface {}) (interface {}, diag.Diagnostics ) {
342
+ var privateIPs []map [string ]interface {}
343
+
344
+ resourceID := gn .ID
345
+
346
+ region , err := gn .Zone .Region ()
347
+ if err != nil {
348
+ return nil , diag .FromErr (err )
349
+ }
350
+
351
+ resourceType := ipamAPI .ResourceTypeVpcGatewayNetwork
352
+ opts := & ipam.GetResourcePrivateIPsOptions {
353
+ ResourceID : & resourceID ,
354
+ ResourceType : & resourceType ,
355
+ PrivateNetworkID : & gn .PrivateNetworkID ,
356
+ }
357
+
358
+ privateIPs , err = ipam .GetResourcePrivateIPs (ctx , m , region , opts )
359
+ if err != nil {
360
+ if ! httperrors .Is403 (err ) {
361
+ return nil , diag .FromErr (err )
362
+ }
363
+
364
+ return nil , diag.Diagnostics {diag.Diagnostic {
365
+ Severity : diag .Warning ,
366
+ Summary : err .Error (),
367
+ Detail : "Got 403 while reading private IPs from IPAM API, please check your IAM permissions" ,
368
+ AttributePath : cty .GetAttrPath ("private_ips" ),
369
+ }}
370
+ }
371
+
372
+ return privateIPs , nil
373
+ }
374
+
304
375
// updateGatewayV1 performs the update of the public gateway using the v1 API
305
376
func updateGatewayV1 (ctx context.Context , d * schema.ResourceData , apiV1 * vpcgw.API , zone scw.Zone , id string ) error {
306
377
v1UpdateRequest := & vpcgw.UpdateGatewayRequest {
0 commit comments