44package vpc
55
66import (
7+ "context"
78 "fmt"
89 "log"
910
1011 "github.com/IBM-Cloud/terraform-provider-ibm/ibm/flex"
1112 "github.com/IBM-Cloud/terraform-provider-ibm/ibm/validate"
1213 "github.com/IBM/vpc-go-sdk/vpcv1"
14+ "github.com/hashicorp/terraform-plugin-sdk/v2/diag"
1315 "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1416)
1517
1618func DataSourceIBMISSubnet () * schema.Resource {
1719 return & schema.Resource {
18- Read : dataSourceIBMISSubnetRead ,
20+ ReadContext : dataSourceIBMISSubnetRead ,
1921
2022 Schema : map [string ]* schema.Schema {
2123
@@ -208,28 +210,32 @@ func DataSourceIBMISSubnetValidator() *validate.ResourceValidator {
208210 return & ibmISSubnetDataSourceValidator
209211}
210212
211- func dataSourceIBMISSubnetRead (d * schema.ResourceData , meta interface {}) error {
212- err := subnetGetByNameOrID (d , meta )
213+ func dataSourceIBMISSubnetRead (context context. Context , d * schema.ResourceData , meta interface {}) diag. Diagnostics {
214+ err := subnetGetByNameOrID (context , d , meta )
213215 if err != nil {
214216 return err
215217 }
216218 return nil
217219}
218220
219- func subnetGetByNameOrID (d * schema.ResourceData , meta interface {}) error {
221+ func subnetGetByNameOrID (context context. Context , d * schema.ResourceData , meta interface {}) diag. Diagnostics {
220222 sess , err := vpcClient (meta )
221223 if err != nil {
222- return err
224+ tfErr := flex .DiscriminatedTerraformErrorf (err , err .Error (), "(Data) ibm_is_subnet" , "read" , "initialize-client" )
225+ log .Printf ("[DEBUG]\n %s" , tfErr .GetDebugMessage ())
226+ return tfErr .GetDiag ()
223227 }
224228 var subnet * vpcv1.Subnet
225229 if v , ok := d .GetOk ("identifier" ); ok {
226230 id := v .(string )
227231 getSubnetOptions := & vpcv1.GetSubnetOptions {
228232 ID : & id ,
229233 }
230- subnetinfo , response , err := sess .GetSubnet ( getSubnetOptions )
234+ subnetinfo , _ , err := sess .GetSubnetWithContext ( context , getSubnetOptions )
231235 if err != nil {
232- return fmt .Errorf ("[ERROR] Error Getting Subnet (%s): %s\n %s" , id , err , response )
236+ tfErr := flex .TerraformErrorf (err , fmt .Sprintf ("GetSubnetWithContext failed: %s" , err .Error ()), "(Data) ibm_is_subnet" , "read" )
237+ log .Printf ("[DEBUG]\n %s" , tfErr .GetDebugMessage ())
238+ return tfErr .GetDiag ()
233239 }
234240 subnet = subnetinfo
235241 } else if v , ok := d .GetOk (isSubnetName ); ok {
@@ -245,9 +251,11 @@ func subnetGetByNameOrID(d *schema.ResourceData, meta interface{}) error {
245251 vpcIDOk := vpcIdOk .(string )
246252 getSubnetsListOptions .VPCID = & vpcIDOk
247253 }
248- subnetsCollection , response , err := sess .ListSubnets ( getSubnetsListOptions )
254+ subnetsCollection , _ , err := sess .ListSubnetsWithContext ( context , getSubnetsListOptions )
249255 if err != nil {
250- return fmt .Errorf ("[ERROR] Error Fetching subnets List %s\n %s" , err , response )
256+ tfErr := flex .TerraformErrorf (err , fmt .Sprintf ("ListSubnetsWithContext failed: %s" , err .Error ()), "(Data) ibm_is_subnet" , "read" )
257+ log .Printf ("[DEBUG]\n %s" , tfErr .GetDebugMessage ())
258+ return tfErr .GetDiag ()
251259 }
252260 start = flex .GetNext (subnetsCollection .Next )
253261 allrecs = append (allrecs , subnetsCollection .Subnets ... )
@@ -263,7 +271,10 @@ func subnetGetByNameOrID(d *schema.ResourceData, meta interface{}) error {
263271 }
264272 }
265273 if subnet == nil {
266- return fmt .Errorf ("[ERROR] No subnet found with name (%s)" , name )
274+ err = fmt .Errorf ("[ERROR] No subnet found with name (%s)" , name )
275+ tfErr := flex .TerraformErrorf (err , fmt .Sprintf ("ListSubnetsWithContext failed: %s" , err .Error ()), "(Data) ibm_is_subnet" , "read" )
276+ log .Printf ("[DEBUG]\n %s" , tfErr .GetDebugMessage ())
277+ return tfErr .GetDiag ()
267278 }
268279 }
269280
@@ -272,29 +283,55 @@ func subnetGetByNameOrID(d *schema.ResourceData, meta interface{}) error {
272283 if subnet .RoutingTable != nil {
273284 err = d .Set ("routing_table" , dataSourceSubnetFlattenroutingTable (* subnet .RoutingTable ))
274285 if err != nil {
275- return fmt .Errorf ("Error setting routing_table %s" , err )
286+ return flex . DiscriminatedTerraformErrorf ( err , fmt .Sprintf ("Error setting available_ipv4_address_count: %s" , err ), "(Data) ibm_is_subnet" , "read" , "set-routing_table" ). GetDiag ( )
276287 }
277288 }
278- d .Set (isSubnetName , * subnet .Name )
279- d .Set (isSubnetIpv4CidrBlock , * subnet .Ipv4CIDRBlock )
280- d .Set (isSubnetAvailableIpv4AddressCount , * subnet .AvailableIpv4AddressCount )
281- d .Set (isSubnetTotalIpv4AddressCount , * subnet .TotalIpv4AddressCount )
289+ if err = d .Set ("name" , subnet .Name ); err != nil {
290+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting name: %s" , err ), "(Data) ibm_is_subnet" , "read" , "set-name" ).GetDiag ()
291+ }
292+ if err = d .Set ("ipv4_cidr_block" , subnet .Ipv4CIDRBlock ); err != nil {
293+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting ipv4_cidr_block: %s" , err ), "(Data) ibm_is_subnet" , "read" , "set-ipv4_cidr_block" ).GetDiag ()
294+ }
295+ if err = d .Set ("available_ipv4_address_count" , flex .IntValue (subnet .AvailableIpv4AddressCount )); err != nil {
296+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting available_ipv4_address_count: %s" , err ), "(Data) ibm_is_subnet" , "read" , "set-available_ipv4_address_count" ).GetDiag ()
297+ }
298+ if err = d .Set ("total_ipv4_address_count" , flex .IntValue (subnet .TotalIpv4AddressCount )); err != nil {
299+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting total_ipv4_address_count: %s" , err ), "(Data) ibm_is_subnet" , "read" , "set-total_ipv4_address_count" ).GetDiag ()
300+ }
282301 if subnet .NetworkACL != nil {
283- d .Set (isSubnetNetworkACL , * subnet .NetworkACL .ID )
302+ if err = d .Set (isSubnetNetworkACL , * subnet .NetworkACL .ID ); err != nil {
303+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting network_acl: %s" , err ), "(Data) ibm_is_subnet" , "read" , "set-network_acl" ).GetDiag ()
304+ }
284305 }
285306 if subnet .PublicGateway != nil {
286- d .Set (isSubnetPublicGateway , * subnet .PublicGateway .ID )
307+ if err = d .Set (isSubnetPublicGateway , * subnet .PublicGateway .ID ); err != nil {
308+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting public_gateway: %s" , err ), "(Data) ibm_is_subnet" , "read" , "set-public_gateway" ).GetDiag ()
309+ }
287310 } else {
288311 d .Set (isSubnetPublicGateway , nil )
289312 }
290- d .Set (isSubnetStatus , * subnet .Status )
291- d .Set (isSubnetZone , * subnet .Zone .Name )
292- d .Set (isSubnetVPC , * subnet .VPC .ID )
293- d .Set (isSubnetVPCName , * subnet .VPC .Name )
313+ if err = d .Set ("status" , subnet .Status ); err != nil {
314+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting status: %s" , err ), "(Data) ibm_is_subnet" , "read" , "set-status" ).GetDiag ()
315+ }
316+ if subnet .Zone != nil {
317+ if err = d .Set (isSubnetZone , * subnet .Zone .Name ); err != nil {
318+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting zone: %s" , err ), "(Data) ibm_is_subnet" , "read" , "set-zone" ).GetDiag ()
319+ }
320+ }
321+ if subnet .VPC != nil {
322+ if err = d .Set (isSubnetVPC , * subnet .VPC .ID ); err != nil {
323+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting vpc: %s" , err ), "(Data) ibm_is_subnet" , "read" , "set-vpc" ).GetDiag ()
324+ }
325+ if err = d .Set (isSubnetVPCName , * subnet .VPC .Name ); err != nil {
326+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting vpc_name: %s" , err ), "(Data) ibm_is_subnet" , "read" , "set-vpc_name" ).GetDiag ()
327+ }
328+ }
294329
295330 controller , err := flex .GetBaseController (meta )
296331 if err != nil {
297- return err
332+ tfErr := flex .TerraformErrorf (err , fmt .Sprintf ("GetBaseController failed: %s" , err .Error ()), "(Data) ibm_is_subnet" , "read" )
333+ log .Printf ("[DEBUG]\n %s" , tfErr .GetDebugMessage ())
334+ return tfErr .GetDiag ()
298335 }
299336
300337 tags , err := flex .GetGlobalTagsUsingCRN (meta , * subnet .CRN , "" , isUserTagType )
@@ -308,17 +345,34 @@ func subnetGetByNameOrID(d *schema.ResourceData, meta interface{}) error {
308345 log .Printf (
309346 "Error on get of resource subnet (%s) access tags: %s" , d .Id (), err )
310347 }
311-
312- d .Set (isSubnetTags , tags )
313- d .Set (isSubnetAccessTags , accesstags )
314- d .Set (isSubnetCRN , * subnet .CRN )
315- d .Set (flex .ResourceControllerURL , controller + "/vpc-ext/network/subnets" )
316- d .Set (flex .ResourceName , * subnet .Name )
317- d .Set (flex .ResourceCRN , * subnet .CRN )
318- d .Set (flex .ResourceStatus , * subnet .Status )
348+ if err = d .Set (isSubnetTags , tags ); err != nil {
349+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting tags: %s" , err ), "(Data) ibm_is_subnet" , "read" , "set-tags" ).GetDiag ()
350+ }
351+ if err = d .Set (isSubnetAccessTags , accesstags ); err != nil {
352+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting access_tags: %s" , err ), "(Data) ibm_is_subnet" , "read" , "set-access_tags" ).GetDiag ()
353+ }
354+ if err = d .Set ("crn" , subnet .CRN ); err != nil {
355+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting crn: %s" , err ), "(Data) ibm_is_subnet" , "read" , "set-crn" ).GetDiag ()
356+ }
357+ if err = d .Set (flex .ResourceControllerURL , controller + "/vpc-ext/network/subnets" ); err != nil {
358+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting resource_controller_url: %s" , err ), "(Data) ibm_is_subnet" , "read" , "set-resource_controller_url" ).GetDiag ()
359+ }
360+ if err = d .Set (flex .ResourceName , * subnet .Name ); err != nil {
361+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting resource_name: %s" , err ), "(Data) ibm_is_subnet" , "read" , "set-resource_name" ).GetDiag ()
362+ }
363+ if err = d .Set (flex .ResourceCRN , * subnet .CRN ); err != nil {
364+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting resource_crn: %s" , err ), "(Data) ibm_is_subnet" , "read" , "set-resource_crn" ).GetDiag ()
365+ }
366+ if err = d .Set (flex .ResourceStatus , * subnet .Status ); err != nil {
367+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting resource_status: %s" , err ), "(Data) ibm_is_subnet" , "read" , "set-resource_status" ).GetDiag ()
368+ }
319369 if subnet .ResourceGroup != nil {
320- d .Set (isSubnetResourceGroup , * subnet .ResourceGroup .ID )
321- d .Set (flex .ResourceGroupName , * subnet .ResourceGroup .Name )
370+ if err = d .Set (isSubnetResourceGroup , * subnet .ResourceGroup .ID ); err != nil {
371+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting resource_group: %s" , err ), "(Data) ibm_is_subnet" , "read" , "set-resource_group" ).GetDiag ()
372+ }
373+ if err = d .Set (flex .ResourceGroupName , * subnet .ResourceGroup .Name ); err != nil {
374+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting resource_group_name: %s" , err ), "(Data) ibm_is_subnet" , "read" , "set-resource_group_name" ).GetDiag ()
375+ }
322376 }
323377 return nil
324378}
0 commit comments