Skip to content

Commit 6ab2ea6

Browse files
authored
enhancement: improved error handling for vpc instance group (IBM-Cloud#6153)
1 parent 31bccb2 commit 6ab2ea6

15 files changed

+907
-380
lines changed

ibm/service/vpc/data_source_ibm_is_instance_group.go

Lines changed: 59 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,20 @@
44
package vpc
55

66
import (
7+
"context"
78
"fmt"
89
"log"
910

1011
"github.com/IBM-Cloud/terraform-provider-ibm/ibm/flex"
12+
"github.com/IBM/go-sdk-core/v5/core"
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

1518
func DataSourceIBMISInstanceGroup() *schema.Resource {
1619
return &schema.Resource{
17-
Read: dataSourceIBMISInstanceGroupRead,
20+
ReadContext: dataSourceIBMISInstanceGroupRead,
1821

1922
Schema: map[string]*schema.Schema{
2023

@@ -97,10 +100,12 @@ func DataSourceIBMISInstanceGroup() *schema.Resource {
97100
}
98101
}
99102

100-
func dataSourceIBMISInstanceGroupRead(d *schema.ResourceData, meta interface{}) error {
103+
func dataSourceIBMISInstanceGroupRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
101104
sess, err := vpcClient(meta)
102105
if err != nil {
103-
return err
106+
tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_is_instance_group", "read", "initialize-client")
107+
log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage())
108+
return tfErr.GetDiag()
104109
}
105110

106111
name := d.Get("name")
@@ -113,9 +118,11 @@ func dataSourceIBMISInstanceGroupRead(d *schema.ResourceData, meta interface{})
113118
if start != "" {
114119
listInstanceGroupOptions.Start = &start
115120
}
116-
instanceGroupsCollection, response, err := sess.ListInstanceGroups(&listInstanceGroupOptions)
121+
instanceGroupsCollection, _, err := sess.ListInstanceGroupsWithContext(context, &listInstanceGroupOptions)
117122
if err != nil {
118-
return fmt.Errorf("[ERROR] Error Fetching InstanceGroups %s\n%s", err, response)
123+
tfErr := flex.TerraformErrorf(err, fmt.Sprintf("ListInstanceGroupsWithContext failed: %s", err.Error()), "(Data) ibm_is_instance_group", "read")
124+
log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage())
125+
return tfErr.GetDiag()
119126
}
120127
start = flex.GetNext(instanceGroupsCollection.Next)
121128
allrecs = append(allrecs, instanceGroupsCollection.InstanceGroups...)
@@ -128,38 +135,71 @@ func dataSourceIBMISInstanceGroupRead(d *schema.ResourceData, meta interface{})
128135

129136
for _, instanceGroup := range allrecs {
130137
if *instanceGroup.Name == name {
131-
d.Set("name", *instanceGroup.Name)
132-
d.Set("instance_template", *instanceGroup.InstanceTemplate.ID)
133-
d.Set("membership_count", *instanceGroup.MembershipCount)
134-
d.Set("resource_group", *instanceGroup.ResourceGroup.ID)
135-
d.Set("crn", *instanceGroup.CRN)
138+
if err = d.Set("name", *instanceGroup.Name); err != nil {
139+
return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting name: %s", err), "(Data) ibm_is_instance_group", "read", "set-name").GetDiag()
140+
}
141+
if !core.IsNil(instanceGroup.InstanceTemplate) {
142+
if err = d.Set("instance_template", *instanceGroup.InstanceTemplate.ID); err != nil {
143+
return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting instance_template: %s", err), "(Data) ibm_is_instance_group", "read", "set-instance_template").GetDiag()
144+
}
145+
}
146+
if err = d.Set("membership_count", flex.IntValue(instanceGroup.MembershipCount)); err != nil {
147+
return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting membership_count: %s", err), "(Data) ibm_is_instance_group", "read", "set-membership_count").GetDiag()
148+
}
149+
if !core.IsNil(instanceGroup.ResourceGroup) {
150+
if err = d.Set("resource_group", *instanceGroup.ResourceGroup.ID); err != nil {
151+
return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting resource_group: %s", err), "(Data) ibm_is_instance_group", "read", "set-resource_group").GetDiag()
152+
}
153+
}
154+
if err = d.Set("crn", instanceGroup.CRN); err != nil {
155+
return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting crn: %s", err), "(Data) ibm_is_instance_group", "read", "set-crn").GetDiag()
156+
}
136157
d.SetId(*instanceGroup.ID)
137-
if instanceGroup.ApplicationPort != nil {
138-
d.Set("application_port", *instanceGroup.ApplicationPort)
158+
if !core.IsNil(instanceGroup.ApplicationPort) {
159+
if err = d.Set("application_port", flex.IntValue(instanceGroup.ApplicationPort)); err != nil {
160+
return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting application_port: %s", err), "(Data) ibm_is_instance_group", "read", "set-application_port").GetDiag()
161+
}
139162
}
140163
subnets := make([]string, 0)
141164
for i := 0; i < len(instanceGroup.Subnets); i++ {
142165
subnets = append(subnets, string(*(instanceGroup.Subnets[i].ID)))
143166
}
144167
if instanceGroup.LoadBalancerPool != nil {
145-
d.Set("load_balancer_pool", *instanceGroup.LoadBalancerPool.ID)
168+
if err = d.Set("load_balancer_pool", *instanceGroup.LoadBalancerPool.ID); err != nil {
169+
return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting load_balancer_pool: %s", err), "(Data) ibm_is_instance_group", "read", "set-load_balancer_pool").GetDiag()
170+
}
171+
}
172+
if err = d.Set("subnets", subnets); err != nil {
173+
return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting subnets: %s", err), "(Data) ibm_is_instance_group", "read", "set-subnets").GetDiag()
146174
}
147-
d.Set("subnets", subnets)
175+
148176
managers := make([]string, 0)
149177
for i := 0; i < len(instanceGroup.Managers); i++ {
150178
managers = append(managers, string(*(instanceGroup.Managers[i].ID)))
151179
}
152-
d.Set("managers", managers)
153-
d.Set("vpc", *instanceGroup.VPC.ID)
154-
d.Set("status", *instanceGroup.Status)
180+
if err = d.Set("managers", managers); err != nil {
181+
return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting managers: %s", err), "(Data) ibm_is_instance_group", "read", "set-managers").GetDiag()
182+
}
183+
if !core.IsNil(instanceGroup.VPC) {
184+
if err = d.Set("vpc", *instanceGroup.VPC.ID); err != nil {
185+
return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting vpc: %s", err), "(Data) ibm_is_instance_group", "read", "set-vpc").GetDiag()
186+
}
187+
}
188+
if err = d.Set("status", instanceGroup.Status); err != nil {
189+
return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting status: %s", err), "(Data) ibm_is_instance_group", "read", "set-status").GetDiag()
190+
}
155191
accesstags, err := flex.GetGlobalTagsUsingCRN(meta, *instanceGroup.CRN, "", isInstanceGroupAccessTagType)
156192
if err != nil {
157193
log.Printf(
158194
"[ERROR] Error occured during reading of instance group (%s) access tags: %s", d.Id(), err)
159195
}
160-
d.Set(isInstanceGroupAccessTags, accesstags)
196+
if err = d.Set(isInstanceGroupAccessTags, accesstags); err != nil {
197+
return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting access_tags: %s", err), "(Data) ibm_is_instance_group", "read", "set-access_tags").GetDiag()
198+
}
161199
return nil
162200
}
163201
}
164-
return fmt.Errorf("Instance group %s not found", name)
202+
tfErr := flex.TerraformErrorf(err, fmt.Sprintf("Instance group %s not found", name), "(Data) ibm_is_instance_group", "read")
203+
log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage())
204+
return tfErr.GetDiag()
165205
}

ibm/service/vpc/data_source_ibm_is_instance_group_manager.go

Lines changed: 53 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,20 @@
44
package vpc
55

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

911
"github.com/IBM-Cloud/terraform-provider-ibm/ibm/flex"
12+
"github.com/IBM/go-sdk-core/v5/core"
1013
"github.com/IBM/vpc-go-sdk/vpcv1"
14+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
1115
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1216
)
1317

1418
func DataSourceIBMISInstanceGroupManager() *schema.Resource {
1519
return &schema.Resource{
16-
Read: dataSourceIBMISInstanceGroupManagerRead,
20+
ReadContext: dataSourceIBMISInstanceGroupManagerRead,
1721

1822
Schema: map[string]*schema.Schema{
1923

@@ -96,10 +100,12 @@ func DataSourceIBMISInstanceGroupManager() *schema.Resource {
96100
}
97101
}
98102

99-
func dataSourceIBMISInstanceGroupManagerRead(d *schema.ResourceData, meta interface{}) error {
103+
func dataSourceIBMISInstanceGroupManagerRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
100104
sess, err := vpcClient(meta)
101105
if err != nil {
102-
return err
106+
tfErr := flex.DiscriminatedTerraformErrorf(err, err.Error(), "(Data) ibm_is_instance_group_manager", "read", "initialize-client")
107+
log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage())
108+
return tfErr.GetDiag()
103109
}
104110

105111
instanceGroupID := d.Get("instance_group").(string)
@@ -115,9 +121,11 @@ func dataSourceIBMISInstanceGroupManagerRead(d *schema.ResourceData, meta interf
115121
if start != "" {
116122
listInstanceGroupManagerOptions.Start = &start
117123
}
118-
instanceGroupManagerCollections, response, err := sess.ListInstanceGroupManagers(&listInstanceGroupManagerOptions)
124+
instanceGroupManagerCollections, _, err := sess.ListInstanceGroupManagersWithContext(context, &listInstanceGroupManagerOptions)
119125
if err != nil {
120-
return fmt.Errorf("[ERROR] Error Getting InstanceGroup Managers %s\n%s", err, response)
126+
tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetInstanceGroupManagerWithContext failed: %s", err.Error()), "(Data) ibm_is_instance_group_manager", "read")
127+
log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage())
128+
return tfErr.GetDiag()
121129
}
122130
start = flex.GetNext(instanceGroupManagerCollections.Next)
123131
allrecs = append(allrecs, instanceGroupManagerCollections.Managers...)
@@ -132,8 +140,16 @@ func dataSourceIBMISInstanceGroupManagerRead(d *schema.ResourceData, meta interf
132140
instanceGroupManager := instanceGroupManagerIntf.(*vpcv1.InstanceGroupManager)
133141
if instanceGroupManagerName == *instanceGroupManager.Name {
134142
d.SetId(fmt.Sprintf("%s/%s", instanceGroupID, *instanceGroupManager.ID))
135-
d.Set("manager_type", *instanceGroupManager.ManagerType)
136-
d.Set("manager_id", *instanceGroupManager.ID)
143+
if !core.IsNil(instanceGroupManager.ManagerType) {
144+
if err = d.Set("manager_type", instanceGroupManager.ManagerType); err != nil {
145+
return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting manager_type: %s", err), "(Data) ibm_is_instance_group_manager", "read", "set-manager_type").GetDiag()
146+
}
147+
}
148+
if !core.IsNil(instanceGroupManager.ID) {
149+
if err = d.Set("manager_id", *instanceGroupManager.ID); err != nil {
150+
return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting manager_id: %s", err), "(Data) ibm_is_instance_group_manager", "read", "set-manager_id").GetDiag()
151+
}
152+
}
137153

138154
if *instanceGroupManager.ManagerType == "scheduled" {
139155

@@ -147,26 +163,48 @@ func dataSourceIBMISInstanceGroupManagerRead(d *schema.ResourceData, meta interf
147163
}
148164
actions = append(actions, actn)
149165
}
150-
d.Set("actions", actions)
166+
167+
if err = d.Set("actions", actions); err != nil {
168+
return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting actions: %s", err), "(Data) ibm_is_instance_group_manager", "read", "set-actions").GetDiag()
169+
}
151170
}
152171

153172
} else {
154-
d.Set("aggregation_window", *instanceGroupManager.AggregationWindow)
155-
d.Set("cooldown", *instanceGroupManager.Cooldown)
156-
d.Set("max_membership_count", *instanceGroupManager.MaxMembershipCount)
157-
d.Set("min_membership_count", *instanceGroupManager.MinMembershipCount)
173+
if !core.IsNil(instanceGroupManager.AggregationWindow) {
174+
if err = d.Set("aggregation_window", flex.IntValue(instanceGroupManager.AggregationWindow)); err != nil {
175+
return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting aggregation_window: %s", err), "(Data) ibm_is_instance_group_manager", "read", "set-aggregation_window").GetDiag()
176+
}
177+
}
178+
if !core.IsNil(instanceGroupManager.Cooldown) {
179+
if err = d.Set("cooldown", flex.IntValue(instanceGroupManager.Cooldown)); err != nil {
180+
return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting cooldown: %s", err), "(Data) ibm_is_instance_group_manager", "read", "set-cooldown").GetDiag()
181+
}
182+
}
183+
if !core.IsNil(instanceGroupManager.MaxMembershipCount) {
184+
if err = d.Set("max_membership_count", flex.IntValue(instanceGroupManager.MaxMembershipCount)); err != nil {
185+
return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting max_membership_count: %s", err), "(Data) ibm_is_instance_group_manager", "read", "set-max_membership_count").GetDiag()
186+
}
187+
}
188+
if !core.IsNil(instanceGroupManager.MinMembershipCount) {
189+
if err = d.Set("min_membership_count", flex.IntValue(instanceGroupManager.MinMembershipCount)); err != nil {
190+
return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting min_membership_count: %s", err), "(Data) ibm_is_instance_group_manager", "read", "set-min_membership_count").GetDiag()
191+
}
192+
}
158193
policies := make([]string, 0)
159194
if instanceGroupManager.Policies != nil {
160195
for i := 0; i < len(instanceGroupManager.Policies); i++ {
161196
policies = append(policies, string(*(instanceGroupManager.Policies[i].ID)))
162197
}
163198
}
164-
165-
d.Set("policies", policies)
199+
if err = d.Set("policies", policies); err != nil {
200+
return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting policies: %s", err), "(Data) ibm_is_instance_group_manager", "read", "set-policies").GetDiag()
201+
}
166202
}
167203

168204
return nil
169205
}
170206
}
171-
return fmt.Errorf("Instance group manager %s not found", instanceGroupManagerName)
207+
tfErr := flex.TerraformErrorf(err, fmt.Sprintf("Instance group manager %s not found", instanceGroupManagerName), "(Data) ibm_is_instance_group_manager", "read")
208+
log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage())
209+
return tfErr.GetDiag()
172210
}

0 commit comments

Comments
 (0)