44 "context"
55 "time"
66
7+ "github.com/hashicorp/go-cty/cty"
78 "github.com/hashicorp/terraform-plugin-sdk/v2/diag"
89 "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
910 ipamAPI "github.com/scaleway/scaleway-sdk-go/api/ipam/v1"
@@ -225,10 +226,10 @@ func readVPCGWResourceDataV2(d *schema.ResourceData, gw *v2.Gateway) diag.Diagno
225226}
226227
227228// readVPCGWNetworkResourceDataV1 sets the resource data using a v1 gateway network
228- func readVPCGWNetworkResourceDataV1 (d * schema.ResourceData , gatewayNetwork * vpcgw.GatewayNetwork ) diag.Diagnostics {
229+ func readVPCGWNetworkResourceDataV1 (d * schema.ResourceData , gatewayNetwork * vpcgw.GatewayNetwork , diags diag. Diagnostics ) diag.Diagnostics {
229230 fetchRegion , err := gatewayNetwork .Zone .Region ()
230231 if err != nil {
231- return diag .FromErr (err )
232+ return append ( diags , diag .FromErr (err ) ... )
232233 }
233234
234235 _ = d .Set ("private_network_id" , regional .NewIDString (fetchRegion , gatewayNetwork .PrivateNetworkID ))
@@ -267,10 +268,10 @@ func readVPCGWNetworkResourceDataV1(d *schema.ResourceData, gatewayNetwork *vpcg
267268}
268269
269270// readVPCGWNetworkResourceDataV2 sets the resource data using a v1 gateway network
270- func readVPCGWNetworkResourceDataV2 (d * schema.ResourceData , gatewayNetwork * v2.GatewayNetwork ) diag.Diagnostics {
271+ func readVPCGWNetworkResourceDataV2 (d * schema.ResourceData , gatewayNetwork * v2.GatewayNetwork , diags diag. Diagnostics ) diag.Diagnostics {
271272 fetchRegion , err := gatewayNetwork .Zone .Region ()
272273 if err != nil {
273- return diag .FromErr (err )
274+ return append ( diags , diag .FromErr (err ) ... )
274275 }
275276
276277 _ = d .Set ("private_network_id" , regional .NewIDString (fetchRegion , gatewayNetwork .PrivateNetworkID ))
@@ -303,14 +304,14 @@ func readVPCGWNetworkResourceDataV2(d *schema.ResourceData, gatewayNetwork *v2.G
303304 return nil
304305}
305306
306- func getPrivateIPsV1 (ctx context.Context , gn * vpcgw.GatewayNetwork , m interface {}) interface {} {
307+ func getPrivateIPsV1 (ctx context.Context , gn * vpcgw.GatewayNetwork , m interface {}) ( interface {}, diag. Diagnostics ) {
307308 var privateIPs []map [string ]interface {}
308309
309310 resourceID := gn .ID
310311
311312 region , err := gn .Zone .Region ()
312313 if err != nil {
313- return diag .FromErr (err )
314+ return nil , diag .FromErr (err )
314315 }
315316
316317 resourceType := ipamAPI .ResourceTypeVpcGatewayNetwork
@@ -322,20 +323,29 @@ func getPrivateIPsV1(ctx context.Context, gn *vpcgw.GatewayNetwork, m interface{
322323
323324 privateIPs , err = ipam .GetResourcePrivateIPs (ctx , m , region , opts )
324325 if err != nil {
325- return diag .FromErr (err )
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+ }}
326336 }
327337
328- return privateIPs
338+ return privateIPs , nil
329339}
330340
331- func getPrivateIPsV2 (ctx context.Context , gn * v2.GatewayNetwork , m interface {}) interface {} {
341+ func getPrivateIPsV2 (ctx context.Context , gn * v2.GatewayNetwork , m interface {}) ( interface {}, diag. Diagnostics ) {
332342 var privateIPs []map [string ]interface {}
333343
334344 resourceID := gn .ID
335345
336346 region , err := gn .Zone .Region ()
337347 if err != nil {
338- return diag .FromErr (err )
348+ return nil , diag .FromErr (err )
339349 }
340350
341351 resourceType := ipamAPI .ResourceTypeVpcGatewayNetwork
@@ -347,10 +357,19 @@ func getPrivateIPsV2(ctx context.Context, gn *v2.GatewayNetwork, m interface{})
347357
348358 privateIPs , err = ipam .GetResourcePrivateIPs (ctx , m , region , opts )
349359 if err != nil {
350- return diag .FromErr (err )
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+ }}
351370 }
352371
353- return privateIPs
372+ return privateIPs , nil
354373}
355374
356375// updateGatewayV1 performs the update of the public gateway using the v1 API
0 commit comments