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"
13+ "github.com/IBM/go-sdk-core/v5/core"
1214 "github.com/IBM/vpc-go-sdk/vpcv1"
15+ "github.com/hashicorp/terraform-plugin-sdk/v2/diag"
1316 "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1417)
1518
@@ -24,7 +27,7 @@ const (
2427
2528func DataSourceIBMISImage () * schema.Resource {
2629 return & schema.Resource {
27- Read : dataSourceIBMISImageRead ,
30+ ReadContext : dataSourceIBMISImageRead ,
2831
2932 Schema : map [string ]* schema.Schema {
3033
@@ -266,7 +269,7 @@ func DataSourceIBMISImage() *schema.Resource {
266269 }
267270}
268271
269- func dataSourceIBMISImageRead (d * schema.ResourceData , meta interface {}) error {
272+ func dataSourceIBMISImageRead (context context. Context , d * schema.ResourceData , meta interface {}) diag. Diagnostics {
270273
271274 name := d .Get ("name" ).(string )
272275 identifier := d .Get ("identifier" ).(string )
@@ -275,12 +278,12 @@ func dataSourceIBMISImageRead(d *schema.ResourceData, meta interface{}) error {
275278 visibility = v .(string )
276279 }
277280 if name != "" {
278- err := imageGetByName (d , meta , name , visibility )
281+ err := imageGetByName (context , d , meta , name , visibility )
279282 if err != nil {
280283 return err
281284 }
282285 } else if identifier != "" {
283- err := imageGetById (d , meta , identifier )
286+ err := imageGetById (context , d , meta , identifier )
284287 if err != nil {
285288 return err
286289 }
@@ -289,10 +292,12 @@ func dataSourceIBMISImageRead(d *schema.ResourceData, meta interface{}) error {
289292 return nil
290293}
291294
292- func imageGetByName (d * schema.ResourceData , meta interface {}, name , visibility string ) error {
295+ func imageGetByName (context context. Context , d * schema.ResourceData , meta interface {}, name , visibility string ) diag. Diagnostics {
293296 sess , err := vpcClient (meta )
294297 if err != nil {
295- return err
298+ tfErr := flex .DiscriminatedTerraformErrorf (err , err .Error (), "(Data) ibm_is_image" , "read" , "initialize-client" )
299+ log .Printf ("[DEBUG]\n %s" , tfErr .GetDebugMessage ())
300+ return tfErr .GetDiag ()
296301 }
297302 listImagesOptions := & vpcv1.ListImagesOptions {
298303 Name : & name ,
@@ -301,137 +306,208 @@ func imageGetByName(d *schema.ResourceData, meta interface{}, name, visibility s
301306 if visibility != "" {
302307 listImagesOptions .Visibility = & visibility
303308 }
304- availableImages , response , err := sess .ListImages ( listImagesOptions )
309+ availableImages , _ , err := sess .ListImagesWithContext ( context , listImagesOptions )
305310 if err != nil {
306- return fmt .Errorf ("[ERROR] Error Fetching Images %s\n %s" , err , response )
311+ tfErr := flex .TerraformErrorf (err , fmt .Sprintf ("ListImagesWithContext failed: %s" , err .Error ()), "(Data) ibm_is_image" , "read" )
312+ log .Printf ("[DEBUG]\n %s" , tfErr .GetDebugMessage ())
313+ return tfErr .GetDiag ()
307314 }
308315 allrecs := availableImages .Images
309316
310317 if len (allrecs ) == 0 {
311- return fmt .Errorf ("[ERROR] No image found with name %s" , name )
318+ tfErr := flex .TerraformErrorf (err , fmt .Sprintf ("No image found with name: %s" , name ), "(Data) ibm_is_image" , "read" )
319+ log .Printf ("[DEBUG]\n %s" , tfErr .GetDebugMessage ())
320+ return tfErr .GetDiag ()
312321 }
313322 image := allrecs [0 ]
314323 d .SetId (* image .ID )
315- d .Set (isImageUserDataFormat , * image .UserDataFormat )
316- d .Set ("status" , * image .Status )
324+ if err = d .Set ("user_data_format" , image .UserDataFormat ); err != nil {
325+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting user_data_format: %s" , err ), "(Data) ibm_is_image" , "read" , "set-user_data_format" ).GetDiag ()
326+ }
327+ if err = d .Set ("status" , image .Status ); err != nil {
328+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting status: %s" , err ), "(Data) ibm_is_image" , "read" , "set-status" ).GetDiag ()
329+ }
317330 if * image .Status == "deprecated" {
318331 fmt .Printf ("[WARN] Given image %s is deprecated and soon will be obsolete." , name )
319332 }
320333 if len (image .StatusReasons ) > 0 {
321- d .Set ("status_reasons" , dataSourceIBMIsImageFlattenStatusReasons (image .StatusReasons ))
334+ if err = d .Set ("status_reasons" , dataSourceIBMIsImageFlattenStatusReasons (image .StatusReasons )); err != nil {
335+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting status_reasons: %s" , err ), "(Data) ibm_is_image" , "read" , "set-status_reasons" ).GetDiag ()
336+ }
337+ }
338+ if err = d .Set ("name" , image .Name ); err != nil {
339+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting name: %s" , err ), "(Data) ibm_is_image" , "read" , "set-name" ).GetDiag ()
322340 }
323- d .Set ("name" , * image .Name )
324341 accesstags , err := flex .GetGlobalTagsUsingCRN (meta , * image .CRN , "" , isImageAccessTagType )
325342 if err != nil {
326343 log .Printf (
327344 "Error on get of resource image (%s) access tags: %s" , d .Id (), err )
328345 }
329- d .Set (isImageAccessTags , accesstags )
330- d .Set ("visibility" , * image .Visibility )
346+ if err = d .Set ("access_tags" , accesstags ); err != nil {
347+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting access_tags: %s" , err ), "(Data) ibm_is_image" , "read" , "set-access_tags" ).GetDiag ()
348+ }
349+ if err = d .Set ("visibility" , image .Visibility ); err != nil {
350+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting visibility: %s" , err ), "(Data) ibm_is_image" , "read" , "set-visibility" ).GetDiag ()
351+ }
331352
332353 if image .OperatingSystem != nil {
333354 operatingSystemList := []map [string ]interface {}{}
334355 operatingSystemMap := dataSourceIBMISImageOperatingSystemToMap (* image .OperatingSystem )
335356 operatingSystemList = append (operatingSystemList , operatingSystemMap )
336- d .Set ("operating_system" , operatingSystemList )
357+ if err = d .Set ("operating_system" , operatingSystemList ); err != nil {
358+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting operating_system: %s" , err ), "(Data) ibm_is_image" , "read" , "set-operating_system" ).GetDiag ()
359+ }
337360 }
338361 if image .ResourceGroup != nil {
339362 resourceGroupList := []map [string ]interface {}{}
340363 resourceGroupMap := dataSourceImageResourceGroupToMap (* image .ResourceGroup )
341364 resourceGroupList = append (resourceGroupList , resourceGroupMap )
342- d .Set ("resource_group" , resourceGroupList )
365+ if err = d .Set ("resource_group" , resourceGroupList ); err != nil {
366+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting resource_group: %s" , err ), "(Data) ibm_is_image" , "read" , "set-resource_group" ).GetDiag ()
367+ }
343368 }
344- d .Set ("os" , * image .OperatingSystem .Name )
345- d .Set ("architecture" , * image .OperatingSystem .Architecture )
346- d .Set ("crn" , * image .CRN )
347- if image .Encryption != nil {
348- d .Set ("encryption" , * image .Encryption )
369+ if err = d .Set ("os" , image .OperatingSystem .Name ); err != nil {
370+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting os: %s" , err ), "(Data) ibm_is_image" , "read" , "set-os" ).GetDiag ()
371+ }
372+ if err = d .Set ("architecture" , image .OperatingSystem .Architecture ); err != nil {
373+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting architecture: %s" , err ), "(Data) ibm_is_image" , "read" , "set-architecture" ).GetDiag ()
374+ }
375+ if err = d .Set ("crn" , image .CRN ); err != nil {
376+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting crn: %s" , err ), "(Data) ibm_is_image" , "read" , "set-crn" ).GetDiag ()
377+ }
378+ if err = d .Set ("encryption" , image .Encryption ); err != nil {
379+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting encryption: %s" , err ), "(Data) ibm_is_image" , "read" , "set-encryption" ).GetDiag ()
349380 }
350381 if image .EncryptionKey != nil {
351- d .Set ("encryption_key" , * image .EncryptionKey .CRN )
382+ if err = d .Set ("encryption_key" , * image .EncryptionKey .CRN ); err != nil {
383+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting encryption_key: %s" , err ), "(Data) ibm_is_image" , "read" , "set-encryption_key" ).GetDiag ()
384+ }
352385 }
353386 if image .File != nil && image .File .Checksums != nil {
354- d .Set (isImageCheckSum , * image .File .Checksums .Sha256 )
387+ if err = d .Set ("checksum" , * image .File .Checksums .Sha256 ); err != nil {
388+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting checksum: %s" , err ), "(Data) ibm_is_image" , "read" , "set-checksum" ).GetDiag ()
389+ }
355390 }
356391 if image .SourceVolume != nil {
357- d .Set ("source_volume" , * image .SourceVolume .ID )
392+ if err = d .Set ("source_volume" , * image .SourceVolume .ID ); err != nil {
393+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting source_volume: %s" , err ), "(Data) ibm_is_image" , "read" , "set-source_volume" ).GetDiag ()
394+ }
358395 }
359- if image .CreatedAt != nil {
360- d . Set ( isImageCreatedAt , image . CreatedAt . String () )
396+ if err = d . Set ( "created_at" , flex . DateTimeToString ( image .CreatedAt )); err != nil {
397+ return flex . DiscriminatedTerraformErrorf ( err , fmt . Sprintf ( "Error setting created_at: %s" , err ), "(Data) ibm_is_image" , "read" , "set-created_at" ). GetDiag ( )
361398 }
362- if image .DeprecationAt != nil {
363- d .Set (isImageDeprecationAt , image .DeprecationAt .String ())
399+ if ! core .IsNil (image .DeprecationAt ) {
400+ if err = d .Set ("deprecation_at" , flex .DateTimeToString (image .DeprecationAt )); err != nil {
401+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting deprecation_at: %s" , err ), "(Data) ibm_is_image" , "read" , "set-deprecation_at" ).GetDiag ()
402+ }
364403 }
365- if image .ObsolescenceAt != nil {
366- d .Set (isImageObsolescenceAt , image .ObsolescenceAt .String ())
404+ if ! core .IsNil (image .ObsolescenceAt ) {
405+ if err = d .Set ("obsolescence_at" , flex .DateTimeToString (image .ObsolescenceAt )); err != nil {
406+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting obsolescence_at: %s" , err ), "(Data) ibm_is_image" , "read" , "set-obsolescence_at" ).GetDiag ()
407+ }
367408 }
368409 if image .CatalogOffering != nil {
369410 catalogOfferingList := []map [string ]interface {}{}
370411 catalogOfferingMap := dataSourceImageCollectionCatalogOfferingToMap (* image .CatalogOffering )
371412 catalogOfferingList = append (catalogOfferingList , catalogOfferingMap )
372- d .Set (isImageCatalogOffering , catalogOfferingList )
413+ if err = d .Set ("catalog_offering" , catalogOfferingList ); err != nil {
414+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting catalog_offering: %s" , err ), "(Data) ibm_is_image" , "read" , "set-catalog_offering" ).GetDiag ()
415+ }
373416 }
374417 return nil
375418
376419}
377- func imageGetById (d * schema.ResourceData , meta interface {}, identifier string ) error {
420+ func imageGetById (context context. Context , d * schema.ResourceData , meta interface {}, identifier string ) diag. Diagnostics {
378421 sess , err := vpcClient (meta )
379422 if err != nil {
380- return err
423+ tfErr := flex .DiscriminatedTerraformErrorf (err , err .Error (), "(Data) ibm_is_image" , "read" , "initialize-client" )
424+ log .Printf ("[DEBUG]\n %s" , tfErr .GetDebugMessage ())
425+ return tfErr .GetDiag ()
381426 }
382427
383428 getImageOptions := & vpcv1.GetImageOptions {
384429 ID : & identifier ,
385430 }
386431
387- image , response , err := sess .GetImage ( getImageOptions )
432+ image , _ , err := sess .GetImageWithContext ( context , getImageOptions )
388433 if err != nil {
389- return fmt .Errorf ("[ERROR] Error fetching image with id(%s) %s\n %s" , identifier , err , response )
434+ tfErr := flex .TerraformErrorf (err , fmt .Sprintf ("GetImageWithContext failed: %s" , err .Error ()), "(Data) ibm_is_image" , "read" )
435+ log .Printf ("[DEBUG]\n %s" , tfErr .GetDebugMessage ())
436+ return tfErr .GetDiag ()
390437 }
391438
392439 d .SetId (* image .ID )
393- d .Set ("status" , * image .Status )
440+ if err = d .Set ("status" , image .Status ); err != nil {
441+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting status: %s" , err ), "(Data) ibm_is_image" , "read" , "set-status" ).GetDiag ()
442+ }
394443 if * image .Status == "deprecated" {
395444 fmt .Printf ("[WARN] Given image %s is deprecated and soon will be obsolete." , name )
396445 }
397446 if len (image .StatusReasons ) > 0 {
398- d .Set ("status_reasons" , dataSourceIBMIsImageFlattenStatusReasons (image .StatusReasons ))
447+ if err = d .Set ("status_reasons" , dataSourceIBMIsImageFlattenStatusReasons (image .StatusReasons )); err != nil {
448+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting status_reasons: %s" , err ), "(Data) ibm_is_image" , "read" , "set-status_reasons" ).GetDiag ()
449+ }
450+ }
451+ if err = d .Set ("name" , image .Name ); err != nil {
452+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting name: %s" , err ), "(Data) ibm_is_image" , "read" , "set-name" ).GetDiag ()
453+ }
454+ if err = d .Set ("user_data_format" , image .UserDataFormat ); err != nil {
455+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting user_data_format: %s" , err ), "(Data) ibm_is_image" , "read" , "set-user_data_format" ).GetDiag ()
456+ }
457+ if err = d .Set ("visibility" , image .Visibility ); err != nil {
458+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting visibility: %s" , err ), "(Data) ibm_is_image" , "read" , "set-visibility" ).GetDiag ()
399459 }
400- d .Set ("name" , * image .Name )
401- d .Set (isImageUserDataFormat , * image .UserDataFormat )
402- d .Set ("visibility" , * image .Visibility )
403460 if image .OperatingSystem != nil {
404461 operatingSystemList := []map [string ]interface {}{}
405462 operatingSystemMap := dataSourceIBMISImageOperatingSystemToMap (* image .OperatingSystem )
406463 operatingSystemList = append (operatingSystemList , operatingSystemMap )
407- d .Set ("operating_system" , operatingSystemList )
464+ if err = d .Set ("operating_system" , operatingSystemList ); err != nil {
465+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting operating_system: %s" , err ), "(Data) ibm_is_image" , "read" , "set-operating_system" ).GetDiag ()
466+ }
408467 }
409468 if image .ResourceGroup != nil {
410469 resourceGroupList := []map [string ]interface {}{}
411470 resourceGroupMap := dataSourceImageResourceGroupToMap (* image .ResourceGroup )
412471 resourceGroupList = append (resourceGroupList , resourceGroupMap )
413- d .Set ("resource_group" , resourceGroupList )
472+ if err = d .Set ("resource_group" , resourceGroupList ); err != nil {
473+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting resource_group: %s" , err ), "(Data) ibm_is_image" , "read" , "set-resource_group" ).GetDiag ()
474+ }
414475 }
415- d .Set ("os" , * image .OperatingSystem .Name )
416- d .Set ("architecture" , * image .OperatingSystem .Architecture )
417- d .Set ("crn" , * image .CRN )
418- if image .Encryption != nil {
419- d .Set ("encryption" , * image .Encryption )
476+ if err = d .Set ("os" , image .OperatingSystem .Name ); err != nil {
477+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting os: %s" , err ), "(Data) ibm_is_image" , "read" , "set-os" ).GetDiag ()
478+ }
479+ if err = d .Set ("architecture" , image .OperatingSystem .Architecture ); err != nil {
480+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting architecture: %s" , err ), "(Data) ibm_is_image" , "read" , "set-architecture" ).GetDiag ()
481+ }
482+ if err = d .Set ("crn" , image .CRN ); err != nil {
483+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting crn: %s" , err ), "(Data) ibm_is_image" , "read" , "set-crn" ).GetDiag ()
484+ }
485+
486+ if err = d .Set ("encryption" , image .Encryption ); err != nil {
487+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting encryption: %s" , err ), "(Data) ibm_is_image" , "read" , "set-encryption" ).GetDiag ()
420488 }
421489 if image .EncryptionKey != nil {
422- d .Set ("encryption_key" , * image .EncryptionKey .CRN )
490+ if err = d .Set ("encryption_key" , * image .EncryptionKey .CRN ); err != nil {
491+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting encryption_key: %s" , err ), "(Data) ibm_is_image" , "read" , "set-encryption_key" ).GetDiag ()
492+ }
423493 }
424494 if image .File != nil && image .File .Checksums != nil {
425- d .Set (isImageCheckSum , * image .File .Checksums .Sha256 )
495+ if err = d .Set ("checksum" , * image .File .Checksums .Sha256 ); err != nil {
496+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting checksum: %s" , err ), "(Data) ibm_is_image" , "read" , "set-checksum" ).GetDiag ()
497+ }
426498 }
427499 if image .SourceVolume != nil {
428- d .Set ("source_volume" , * image .SourceVolume .ID )
500+ if err = d .Set ("source_volume" , * image .SourceVolume .ID ); err != nil {
501+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting source_volume: %s" , err ), "(Data) ibm_is_image" , "read" , "set-source_volume" ).GetDiag ()
502+ }
429503 }
430504 if image .CatalogOffering != nil {
431505 catalogOfferingList := []map [string ]interface {}{}
432506 catalogOfferingMap := dataSourceImageCollectionCatalogOfferingToMap (* image .CatalogOffering )
433507 catalogOfferingList = append (catalogOfferingList , catalogOfferingMap )
434- d .Set (isImageCatalogOffering , catalogOfferingList )
508+ if err = d .Set ("catalog_offering" , catalogOfferingList ); err != nil {
509+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting catalog_offering: %s" , err ), "(Data) ibm_is_image" , "read" , "set-catalog_offering" ).GetDiag ()
510+ }
435511 }
436512 return nil
437513}
0 commit comments