@@ -344,20 +344,22 @@ func DataSourceIBMISVolumeValidator() *validate.ResourceValidator {
344344
345345func dataSourceIBMISVolumeRead (context context.Context , d * schema.ResourceData , meta interface {}) diag.Diagnostics {
346346
347- err := volumeGet (d , meta )
347+ err := volumeGet (context , d , meta )
348348 if err != nil {
349- return diag . FromErr ( err )
349+ return err
350350 }
351351 return nil
352352}
353353
354- func volumeGet (d * schema.ResourceData , meta interface {}) error {
354+ func volumeGet (context context. Context , d * schema.ResourceData , meta interface {}) diag. Diagnostics {
355355 sess , err := vpcClient (meta )
356356 if err != nil {
357- return err
357+ tfErr := flex .DiscriminatedTerraformErrorf (err , err .Error (), "(Data) ibm_is_volume" , "read" , "initialize-client" )
358+ log .Printf ("[DEBUG]\n %s" , tfErr .GetDebugMessage ())
359+ return tfErr .GetDiag ()
358360 }
359361
360- var vol vpcv1.Volume
362+ var volume vpcv1.Volume
361363 if volName , ok := d .GetOk (isVolumeName ); ok {
362364 name := volName .(string )
363365 zone := ""
@@ -372,71 +374,99 @@ func volumeGet(d *schema.ResourceData, meta interface{}) error {
372374 listVolumesOptions .ZoneName = & zone
373375 }
374376 listVolumesOptions .Name = & name
375- vols , response , err := sess .ListVolumes ( listVolumesOptions )
377+ vols , _ , err := sess .ListVolumesWithContext ( context , listVolumesOptions )
376378 if err != nil {
377- return fmt .Errorf ("[ERROR] Error Fetching volumes %s\n %s" , err , response )
379+ tfErr := flex .TerraformErrorf (err , fmt .Sprintf ("ListVolumesWithContext failed: %s" , err .Error ()), "(Data) ibm_is_volume" , "read" )
380+ log .Printf ("[DEBUG]\n %s" , tfErr .GetDebugMessage ())
381+ return tfErr .GetDiag ()
378382 }
379383 allrecs := vols .Volumes
380384
381385 if len (allrecs ) == 0 {
382- return fmt .Errorf ("[ERROR] No Volume found with name %s" , name )
386+ tfErr := flex .TerraformErrorf (err , fmt .Sprintf ("No Volume found with name: %s" , name ), "(Data) ibm_is_volume" , "read" )
387+ log .Printf ("[DEBUG]\n %s" , tfErr .GetDebugMessage ())
388+ return tfErr .GetDiag ()
383389 }
384- vol = allrecs [0 ]
390+ volume = allrecs [0 ]
385391 } else {
386392 identifier := d .Get ("identifier" ).(string )
387393 getVolumeOptions := & vpcv1.GetVolumeOptions {
388394 ID : & identifier ,
389395 }
390396
391- volPtr , response , err := sess .GetVolume ( getVolumeOptions )
397+ volPtr , _ , err := sess .GetVolumeWithContext ( context , getVolumeOptions )
392398 if err != nil {
393- return fmt .Errorf ("[ERROR] Error on get volume %s\n %s" , err , response )
399+ tfErr := flex .TerraformErrorf (err , fmt .Sprintf ("GetVolumeWithContext failed: %s" , err .Error ()), "(Data) ibm_is_volume" , "read" )
400+ log .Printf ("[DEBUG]\n %s" , tfErr .GetDebugMessage ())
401+ return tfErr .GetDiag ()
394402 }
395- vol = * volPtr
403+ volume = * volPtr
404+ }
405+ d .SetId (* volume .ID )
406+ if err = d .Set ("active" , volume .Active ); err != nil {
407+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting active: %s" , err ), "(Data) ibm_is_volume" , "read" , "set-active" ).GetDiag ()
408+ }
409+ if err = d .Set ("attachment_state" , volume .AttachmentState ); err != nil {
410+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting attachment_state: %s" , err ), "(Data) ibm_is_volume" , "read" , "set-attachment_state" ).GetDiag ()
396411 }
397- d .SetId (* vol .ID )
398- if vol .Active != nil {
399- d .Set (isVolumesActive , vol .Active )
412+ if err = d .Set ("bandwidth" , flex .IntValue (volume .Bandwidth )); err != nil {
413+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting bandwidth: %s" , err ), "(Data) ibm_is_volume" , "read" , "set-bandwidth" ).GetDiag ()
400414 }
401- if vol . AttachmentState != nil {
402- d . Set ( isVolumeAttachmentState , vol . AttachmentState )
415+ if err = d . Set ( "busy" , volume . Busy ); err != nil {
416+ return flex . DiscriminatedTerraformErrorf ( err , fmt . Sprintf ( "Error setting busy: %s" , err ), "(Data) ibm_is_volume" , "read" , "set-busy" ). GetDiag ( )
403417 }
404- d .Set (isVolumeBandwidth , int (* vol .Bandwidth ))
405- if vol .Busy != nil {
406- d .Set (isVolumesBusy , vol .Busy )
418+ if err = d .Set ("capacity" , flex .IntValue (volume .Capacity )); err != nil {
419+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting capacity: %s" , err ), "(Data) ibm_is_volume" , "read" , "set-capacity" ).GetDiag ()
407420 }
408- if vol . Capacity != nil {
409- d . Set ( isVolumesCapacity , vol . Capacity )
421+ if err = d . Set ( "created_at" , flex . DateTimeToString ( volume . CreatedAt )); err != nil {
422+ return flex . DiscriminatedTerraformErrorf ( err , fmt . Sprintf ( "Error setting created_at: %s" , err ), "(Data) ibm_is_volume" , "read" , "set-created_at" ). GetDiag ( )
410423 }
411- if vol . CreatedAt != nil {
412- d . Set ( isVolumesCreatedAt , flex . DateTimeToString ( vol . CreatedAt ) )
424+ if err = d . Set ( "name" , volume . Name ); err != nil {
425+ return flex . DiscriminatedTerraformErrorf ( err , fmt . Sprintf ( "Error setting name: %s" , err ), "(Data) ibm_is_volume" , "read" , "set-name" ). GetDiag ( )
413426 }
414- d .Set (isVolumeName , * vol .Name )
415- d .Set ("identifier" , * vol .ID )
416- if vol .OperatingSystem != nil {
427+ d .Set ("identifier" , * volume .ID )
428+ if volume .OperatingSystem != nil {
417429 operatingSystemList := []map [string ]interface {}{}
418- operatingSystemMap := dataSourceVolumeCollectionVolumesOperatingSystemToMap (* vol .OperatingSystem )
430+ operatingSystemMap := dataSourceVolumeCollectionVolumesOperatingSystemToMap (* volume .OperatingSystem )
419431 operatingSystemList = append (operatingSystemList , operatingSystemMap )
420- d .Set (isVolumesOperatingSystem , operatingSystemList )
432+ if err = d .Set (isVolumesOperatingSystem , operatingSystemList ); err != nil {
433+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting operating_system: %s" , err ), "(Data) ibm_is_volume" , "read" , "set-operating_system" ).GetDiag ()
434+ }
435+ }
436+ if err = d .Set (isVolumeProfileName , * volume .Profile .Name ); err != nil {
437+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting profile: %s" , err ), "(Data) ibm_is_volume" , "read" , "set-profile" ).GetDiag ()
421438 }
422- d .Set (isVolumeProfileName , * vol .Profile .Name )
423- d .Set (isVolumeZone , * vol .Zone .Name )
424- if vol .EncryptionKey != nil {
425- d .Set (isVolumeEncryptionKey , vol .EncryptionKey .CRN )
439+ if err = d .Set (isVolumeZone , * volume .Zone .Name ); err != nil {
440+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting zone: %s" , err ), "(Data) ibm_is_volume" , "read" , "set-zone" ).GetDiag ()
426441 }
427- if vol .Encryption != nil {
428- d .Set (isVolumeEncryptionType , vol .Encryption )
442+ if volume .EncryptionKey != nil {
443+ if err = d .Set (isVolumeEncryptionKey , volume .EncryptionKey .CRN ); err != nil {
444+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting encryption_key: %s" , err ), "(Data) ibm_is_volume" , "read" , "set-encryption_key" ).GetDiag ()
445+ }
429446 }
430- if vol . SourceSnapshot != nil {
431- d . Set ( isVolumeSourceSnapshot , * vol . SourceSnapshot . ID )
447+ if err = d . Set ( "encryption_type" , volume . Encryption ); err != nil {
448+ return flex . DiscriminatedTerraformErrorf ( err , fmt . Sprintf ( "Error setting encryption_type: %s" , err ), "(Data) ibm_is_volume" , "read" , "set-encryption_type" ). GetDiag ( )
432449 }
433- d .Set (isVolumeIops , * vol .Iops )
434- d .Set (isVolumeCapacity , * vol .Capacity )
435- d .Set (isVolumeCrn , * vol .CRN )
436- d .Set (isVolumeStatus , * vol .Status )
437- if vol .StatusReasons != nil {
450+ if volume .SourceSnapshot != nil {
451+ if err = d .Set (isVolumeSourceSnapshot , * volume .SourceSnapshot .ID ); err != nil {
452+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting source_snapshot: %s" , err ), "(Data) ibm_is_volume" , "read" , "set-source_snapshot" ).GetDiag ()
453+ }
454+ }
455+ if err = d .Set ("iops" , flex .IntValue (volume .Iops )); err != nil {
456+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting iops: %s" , err ), "(Data) ibm_is_volume" , "read" , "set-iops" ).GetDiag ()
457+ }
458+ if err = d .Set ("capacity" , flex .IntValue (volume .Capacity )); err != nil {
459+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting capacity: %s" , err ), "(Data) ibm_is_volume" , "read" , "set-capacity" ).GetDiag ()
460+ }
461+ if err = d .Set ("crn" , volume .CRN ); err != nil {
462+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting crn: %s" , err ), "(Data) ibm_is_volume" , "read" , "set-crn" ).GetDiag ()
463+ }
464+ if err = d .Set ("status" , volume .Status ); err != nil {
465+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting status: %s" , err ), "(Data) ibm_is_volume" , "read" , "set-status" ).GetDiag ()
466+ }
467+ if volume .StatusReasons != nil {
438468 statusReasonsList := make ([]map [string ]interface {}, 0 )
439- for _ , sr := range vol .StatusReasons {
469+ for _ , sr := range volume .StatusReasons {
440470 currentSR := map [string ]interface {}{}
441471 if sr .Code != nil && sr .Message != nil {
442472 currentSR [isVolumeStatusReasonsCode ] = * sr .Code
@@ -446,32 +476,54 @@ func volumeGet(d *schema.ResourceData, meta interface{}) error {
446476 }
447477 statusReasonsList = append (statusReasonsList , currentSR )
448478 }
449- d .Set (isVolumeStatusReasons , statusReasonsList )
479+ if err = d .Set (isVolumeStatusReasons , statusReasonsList ); err != nil {
480+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting status_reasons: %s" , err ), "(Data) ibm_is_volume" , "read" , "set-status_reasons" ).GetDiag ()
481+ }
450482 }
451483 }
452- d .Set (isVolumeTags , vol .UserTags )
453- accesstags , err := flex .GetGlobalTagsUsingCRN (meta , * vol .CRN , "" , isVolumeAccessTagType )
484+ if err = d .Set (isVolumeTags , volume .UserTags ); err != nil {
485+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting tags: %s" , err ), "(Data) ibm_is_volume" , "read" , "set-tags" ).GetDiag ()
486+ }
487+ accesstags , err := flex .GetGlobalTagsUsingCRN (meta , * volume .CRN , "" , isVolumeAccessTagType )
454488 if err != nil {
455489 log .Printf (
456490 "Error on get of resource vpc volume (%s) access tags: %s" , d .Id (), err )
457491 }
458- d .Set (isVolumeAccessTags , accesstags )
492+ if err = d .Set (isVolumeAccessTags , accesstags ); err != nil {
493+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting access_tags: %s" , err ), "(Data) ibm_is_volume" , "read" , "set-access_tags" ).GetDiag ()
494+ }
459495 controller , err := flex .GetBaseController (meta )
460496 if err != nil {
461- return err
497+ tfErr := flex .TerraformErrorf (err , fmt .Sprintf ("GetBaseController failed: %s" , err .Error ()), "(Data) ibm_is_volume" , "read" )
498+ log .Printf ("[DEBUG]\n %s" , tfErr .GetDebugMessage ())
499+ return tfErr .GetDiag ()
500+ }
501+ if err = d .Set (flex .ResourceControllerURL , controller + "/vpc-ext/storage/storageVolumes" ); err != nil {
502+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting resource_controller_url: %s" , err ), "(Data) ibm_is_volume" , "read" , "set-resource_controller_url" ).GetDiag ()
503+ }
504+
505+ if err = d .Set (flex .ResourceName , * volume .Name ); err != nil {
506+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting resource_name: %s" , err ), "(Data) ibm_is_volume" , "read" , "set-resource_name" ).GetDiag ()
507+ }
508+
509+ if err = d .Set (flex .ResourceCRN , * volume .CRN ); err != nil {
510+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting resource_crn: %s" , err ), "(Data) ibm_is_volume" , "read" , "set-resource_crn" ).GetDiag ()
462511 }
463- d .Set (flex .ResourceControllerURL , controller + "/vpc-ext/storage/storageVolumes" )
464- d .Set (flex .ResourceName , * vol .Name )
465- d .Set (flex .ResourceCRN , * vol .CRN )
466- d .Set (flex .ResourceStatus , * vol .Status )
467- if vol .ResourceGroup != nil {
468- d .Set (flex .ResourceGroupName , vol .ResourceGroup .Name )
469- d .Set (isVolumeResourceGroup , * vol .ResourceGroup .ID )
512+ if err = d .Set ("resource_status" , volume .Status ); err != nil {
513+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting resource_status: %s" , err ), "(Data) ibm_is_volume" , "read" , "set-resource_status" ).GetDiag ()
514+ }
515+ if volume .ResourceGroup != nil {
516+ if err = d .Set (flex .ResourceGroupName , volume .ResourceGroup .Name ); err != nil {
517+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting resource_group_name: %s" , err ), "(Data) ibm_is_volume" , "read" , "set-resource_group_name" ).GetDiag ()
518+ }
519+ if err = d .Set (isVolumeResourceGroup , * volume .ResourceGroup .ID ); err != nil {
520+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting resource_group: %s" , err ), "(Data) ibm_is_volume" , "read" , "set-resource_group" ).GetDiag ()
521+ }
470522 }
471523
472- if vol .HealthReasons != nil {
524+ if volume .HealthReasons != nil {
473525 healthReasonsList := make ([]map [string ]interface {}, 0 )
474- for _ , sr := range vol .HealthReasons {
526+ for _ , sr := range volume .HealthReasons {
475527 currentSR := map [string ]interface {}{}
476528 if sr .Code != nil && sr .Message != nil {
477529 currentSR [isVolumeHealthReasonsCode ] = * sr .Code
@@ -482,45 +534,49 @@ func volumeGet(d *schema.ResourceData, meta interface{}) error {
482534 healthReasonsList = append (healthReasonsList , currentSR )
483535 }
484536 }
485- d .Set (isVolumeHealthReasons , healthReasonsList )
537+ if err = d .Set (isVolumeHealthReasons , healthReasonsList ); err != nil {
538+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting health_reasons: %s" , err ), "(Data) ibm_is_volume" , "read" , "set-health_reasons" ).GetDiag ()
539+ }
486540 }
487541 // catalog
488- if vol .CatalogOffering != nil {
542+ if volume .CatalogOffering != nil {
489543 versionCrn := ""
490- if vol .CatalogOffering .Version != nil && vol .CatalogOffering .Version .CRN != nil {
491- versionCrn = * vol .CatalogOffering .Version .CRN
544+ if volume .CatalogOffering .Version != nil && volume .CatalogOffering .Version .CRN != nil {
545+ versionCrn = * volume .CatalogOffering .Version .CRN
492546 }
493547 catalogList := make ([]map [string ]interface {}, 0 )
494548 catalogMap := map [string ]interface {}{}
495549 if versionCrn != "" {
496550 catalogMap [isVolumeCatalogOfferingVersionCrn ] = versionCrn
497551 }
498- if vol .CatalogOffering .Plan != nil {
552+ if volume .CatalogOffering .Plan != nil {
499553 planCrn := ""
500- if vol .CatalogOffering .Plan .CRN != nil {
501- planCrn = * vol .CatalogOffering .Plan .CRN
554+ if volume .CatalogOffering .Plan .CRN != nil {
555+ planCrn = * volume .CatalogOffering .Plan .CRN
502556 }
503557 if planCrn != "" {
504- catalogMap [isVolumeCatalogOfferingPlanCrn ] = * vol .CatalogOffering .Plan .CRN
558+ catalogMap [isVolumeCatalogOfferingPlanCrn ] = * volume .CatalogOffering .Plan .CRN
505559 }
506- if vol .CatalogOffering .Plan .Deleted != nil {
507- deletedMap := resourceIbmIsVolumeCatalogOfferingVersionPlanReferenceDeletedToMap (* vol .CatalogOffering .Plan .Deleted )
560+ if volume .CatalogOffering .Plan .Deleted != nil {
561+ deletedMap := resourceIbmIsVolumeCatalogOfferingVersionPlanReferenceDeletedToMap (* volume .CatalogOffering .Plan .Deleted )
508562 catalogMap ["deleted" ] = []map [string ]interface {}{deletedMap }
509563 }
510564 }
511565 catalogList = append (catalogList , catalogMap )
512- d .Set (isVolumeCatalogOffering , catalogList )
566+
567+ if err = d .Set (isVolumeCatalogOffering , catalogList ); err != nil {
568+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting catalog_offering: %s" , err ), "(Data) ibm_is_volume" , "read" , "set-catalog_offering" ).GetDiag ()
569+ }
513570 }
514- if vol . HealthState != nil {
515- d . Set ( isVolumeHealthState , * vol . HealthState )
571+ if err = d . Set ( "health_state" , volume . HealthState ); err != nil {
572+ return flex . DiscriminatedTerraformErrorf ( err , fmt . Sprintf ( "Error setting health_state: %s" , err ), "(Data) ibm_is_volume" , "read" , "set-health_state" ). GetDiag ( )
516573 }
517574
518- if err = d .Set ("adjustable_capacity_states" , vol .AdjustableCapacityStates ); err != nil {
519- return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting adjustable_capacity_states: %s" , err ), "(Data) ibm_is_volume" , "read" , "set-adjustable_capacity_states" )
575+ if err = d .Set ("adjustable_capacity_states" , volume .AdjustableCapacityStates ); err != nil {
576+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting adjustable_capacity_states: %s" , err ), "(Data) ibm_is_volume" , "read" , "set-adjustable_capacity_states" ). GetDiag ()
520577 }
521-
522- if err = d .Set ("adjustable_iops_states" , vol .AdjustableIopsStates ); err != nil {
523- return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting adjustable_iops_states: %s" , err ), "(Data) ibm_is_volume" , "read" , "set-adjustable_iops_states" )
578+ if err = d .Set ("adjustable_iops_states" , volume .AdjustableIopsStates ); err != nil {
579+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting adjustable_iops_states: %s" , err ), "(Data) ibm_is_volume" , "read" , "set-adjustable_iops_states" ).GetDiag ()
524580 }
525581
526582 return nil
0 commit comments