Skip to content

Commit f5365a4

Browse files
authored
enhancement: improved error handling for vpc operating system (IBM-Cloud#6149)
1 parent 40abaca commit f5365a4

File tree

2 files changed

+63
-28
lines changed

2 files changed

+63
-28
lines changed

ibm/service/vpc/data_source_ibm_is_operating_system.go

Lines changed: 46 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,13 @@
44
package vpc
55

66
import (
7+
"context"
78
"fmt"
9+
"log"
810

11+
"github.com/IBM-Cloud/terraform-provider-ibm/ibm/flex"
912
"github.com/IBM/vpc-go-sdk/vpcv1"
13+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
1014
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1115
)
1216

@@ -25,7 +29,7 @@ const (
2529

2630
func DataSourceIBMISOperatingSystem() *schema.Resource {
2731
return &schema.Resource{
28-
Read: dataSourceIBMISOperatingSystemRead,
32+
ReadContext: dataSourceIBMISOperatingSystemRead,
2933

3034
Schema: map[string]*schema.Schema{
3135
isOperatingSystemAllowUserImageCreation: {
@@ -85,39 +89,61 @@ func DataSourceIBMISOperatingSystem() *schema.Resource {
8589
}
8690
}
8791

88-
func dataSourceIBMISOperatingSystemRead(d *schema.ResourceData, meta interface{}) error {
92+
func dataSourceIBMISOperatingSystemRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
8993
name := d.Get(isOperatingSystemName).(string)
90-
err := osGet(d, meta, name)
94+
err := osGet(context, d, meta, name)
9195
if err != nil {
9296
return err
9397
}
9498
return nil
9599
}
96100

97-
func osGet(d *schema.ResourceData, meta interface{}, name string) error {
101+
func osGet(context context.Context, d *schema.ResourceData, meta interface{}, name string) diag.Diagnostics {
98102
sess, err := vpcClient(meta)
99103
if err != nil {
100-
return err
104+
tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_is_operating_system", "read", "initialize-client")
105+
log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage())
106+
return tfErr.GetDiag()
101107
}
102108
getOperatingSystemOptions := &vpcv1.GetOperatingSystemOptions{
103109
Name: &name,
104110
}
105-
os, response, err := sess.GetOperatingSystem(getOperatingSystemOptions)
106-
if err != nil || os == nil {
107-
return fmt.Errorf("[ERROR] Error Getting Operating System Details %s , %s", err, response)
111+
operatingSystem, _, err := sess.GetOperatingSystemWithContext(context, getOperatingSystemOptions)
112+
if err != nil || operatingSystem == nil {
113+
tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetOperatingSystemWithContext failed: %s", err.Error()), "(Data) ibm_is_operating_system", "read")
114+
log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage())
115+
return tfErr.GetDiag()
116+
}
117+
if err = d.Set("name", operatingSystem.Name); err != nil {
118+
return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting name: %s", err), "(Data) ibm_is_operating_system", "read", "set-name").GetDiag()
119+
}
120+
d.SetId(*operatingSystem.Name)
121+
if err = d.Set("dedicated_host_only", operatingSystem.DedicatedHostOnly); err != nil {
122+
return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting dedicated_host_only: %s", err), "(Data) ibm_is_operating_system", "read", "set-dedicated_host_only").GetDiag()
123+
}
124+
if err = d.Set("architecture", operatingSystem.Architecture); err != nil {
125+
return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting architecture: %s", err), "(Data) ibm_is_operating_system", "read", "set-architecture").GetDiag()
126+
}
127+
if err = d.Set("display_name", operatingSystem.DisplayName); err != nil {
128+
return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting display_name: %s", err), "(Data) ibm_is_operating_system", "read", "set-display_name").GetDiag()
129+
}
130+
if err = d.Set("family", operatingSystem.Family); err != nil {
131+
return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting family: %s", err), "(Data) ibm_is_operating_system", "read", "set-family").GetDiag()
132+
}
133+
if err = d.Set("href", operatingSystem.Href); err != nil {
134+
return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting href: %s", err), "(Data) ibm_is_operating_system", "read", "set-href").GetDiag()
135+
}
136+
if err = d.Set("vendor", operatingSystem.Vendor); err != nil {
137+
return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting vendor: %s", err), "(Data) ibm_is_operating_system", "read", "set-vendor").GetDiag()
138+
}
139+
if err = d.Set("version", operatingSystem.Version); err != nil {
140+
return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting version: %s", err), "(Data) ibm_is_operating_system", "read", "set-version").GetDiag()
141+
}
142+
if err = d.Set("allow_user_image_creation", operatingSystem.AllowUserImageCreation); err != nil {
143+
return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting allow_user_image_creation: %s", err), "(Data) ibm_is_operating_system", "read", "set-allow_user_image_creation").GetDiag()
108144
}
109-
d.Set(isOperatingSystemName, *os.Name)
110-
d.SetId(*os.Name)
111-
d.Set(isOperatingSystemDHOnly, *os.DedicatedHostOnly)
112-
d.Set(isOperatingSystemArchitecture, *os.Architecture)
113-
d.Set(isOperatingSystemDisplayName, *os.DisplayName)
114-
d.Set(isOperatingSystemFamily, *os.Family)
115-
d.Set(isOperatingSystemHref, *os.Href)
116-
d.Set(isOperatingSystemVendor, *os.Vendor)
117-
d.Set(isOperatingSystemVersion, *os.Version)
118-
if os.AllowUserImageCreation != nil {
119-
d.Set(isOperatingSystemAllowUserImageCreation, *os.AllowUserImageCreation)
145+
if err = d.Set("user_data_format", operatingSystem.UserDataFormat); err != nil {
146+
return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting user_data_format: %s", err), "(Data) ibm_is_operating_system", "read", "set-user_data_format").GetDiag()
120147
}
121-
d.Set(isOperatingSystemUserDataFormat, *os.UserDataFormat)
122148
return nil
123149
}

ibm/service/vpc/data_source_ibm_is_operating_systems.go

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,14 @@
44
package vpc
55

66
import (
7+
"context"
78
"fmt"
9+
"log"
810
"time"
911

1012
"github.com/IBM-Cloud/terraform-provider-ibm/ibm/flex"
1113
"github.com/IBM/vpc-go-sdk/vpcv1"
14+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
1215
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1316
)
1417

@@ -18,7 +21,7 @@ const (
1821

1922
func DataSourceIBMISOperatingSystems() *schema.Resource {
2023
return &schema.Resource{
21-
Read: dataSourceIBMISOperatingSystemsRead,
24+
ReadContext: dataSourceIBMISOperatingSystemsRead,
2225

2326
Schema: map[string]*schema.Schema{
2427
isOperatingSystems: {
@@ -87,18 +90,20 @@ func DataSourceIBMISOperatingSystems() *schema.Resource {
8790
}
8891
}
8992

90-
func dataSourceIBMISOperatingSystemsRead(d *schema.ResourceData, meta interface{}) error {
91-
err := osList(d, meta)
93+
func dataSourceIBMISOperatingSystemsRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
94+
err := osList(context, d, meta)
9295
if err != nil {
9396
return err
9497
}
9598
return nil
9699
}
97100

98-
func osList(d *schema.ResourceData, meta interface{}) error {
101+
func osList(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
99102
sess, err := vpcClient(meta)
100103
if err != nil {
101-
return err
104+
tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_is_operating_systems", "read", "initialize-client")
105+
log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage())
106+
return tfErr.GetDiag()
102107
}
103108
start := ""
104109
allrecs := []vpcv1.OperatingSystem{}
@@ -108,9 +113,11 @@ func osList(d *schema.ResourceData, meta interface{}) error {
108113
listOperatingSystemsOptions.Start = &start
109114
}
110115

111-
osList, response, err := sess.ListOperatingSystems(listOperatingSystemsOptions)
116+
osList, _, err := sess.ListOperatingSystemsWithContext(context, listOperatingSystemsOptions)
112117
if err != nil {
113-
return fmt.Errorf("[ERROR] Error Fetching operating systems %s\n%s", err, response)
118+
tfErr := flex.TerraformErrorf(err, fmt.Sprintf("ListOperatingSystemsWithContext failed %s", err), "(Data) ibm_is_operating_systems", "read")
119+
log.Printf("[DEBUG] %s", tfErr.GetDebugMessage())
120+
return tfErr.GetDiag()
114121
}
115122
start = flex.GetNext(osList.Next)
116123
allrecs = append(allrecs, osList.OperatingSystems...)
@@ -139,7 +146,9 @@ func osList(d *schema.ResourceData, meta interface{}) error {
139146
osInfo = append(osInfo, l)
140147
}
141148
d.SetId(dataSourceIBMISOperatingSystemsId(d))
142-
d.Set(isOperatingSystems, osInfo)
149+
if err = d.Set("operating_systems", osInfo); err != nil {
150+
return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting operating_systems %s", err), "(Data) ibm_is_operating_systems", "read", "operating_systems-set").GetDiag()
151+
}
143152
return nil
144153
}
145154

0 commit comments

Comments
 (0)