Skip to content

Commit e009569

Browse files
authored
Add retry on GET for resource group and trusted profile (IBM-Cloud#6277)
* Add retry for get resource group * Add retry for get trusted profile
1 parent ad62ef3 commit e009569

File tree

2 files changed

+63
-30
lines changed

2 files changed

+63
-30
lines changed

ibm/service/iamidentity/resource_ibm_iam_trusted_profile.go

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,15 @@ import (
1111
"context"
1212
"fmt"
1313
"log"
14-
15-
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
16-
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
14+
"time"
1715

1816
"github.com/IBM-Cloud/terraform-provider-ibm/ibm/conns"
1917
"github.com/IBM-Cloud/terraform-provider-ibm/ibm/flex"
2018
"github.com/IBM/go-sdk-core/v5/core"
2119
"github.com/IBM/platform-services-go-sdk/iamidentityv1"
20+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
21+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry"
22+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
2223
)
2324

2425
func ResourceIBMIAMTrustedProfile() *schema.Resource {
@@ -185,8 +186,23 @@ func resourceIBMIamTrustedProfileRead(context context.Context, d *schema.Resourc
185186
getProfileOptions := &iamidentityv1.GetProfileOptions{}
186187

187188
getProfileOptions.SetProfileID(d.Id())
189+
var trustedProfile *iamidentityv1.TrustedProfile
190+
var response *core.DetailedResponse
191+
192+
err = retry.RetryContext(context, 5*time.Minute, func() *retry.RetryError {
193+
trustedProfile, response, err = iamIdentityClient.GetProfileWithContext(context, getProfileOptions)
194+
if err != nil || trustedProfile == nil {
195+
if response != nil && response.StatusCode == 404 {
196+
return retry.RetryableError(err)
197+
}
198+
return retry.NonRetryableError(err)
199+
}
200+
return nil
201+
})
188202

189-
trustedProfile, response, err := iamIdentityClient.GetProfileWithContext(context, getProfileOptions)
203+
if conns.IsResourceTimeoutError(err) {
204+
trustedProfile, response, err = iamIdentityClient.GetProfileWithContext(context, getProfileOptions)
205+
}
190206
if err != nil {
191207
if response != nil && response.StatusCode == 404 {
192208
d.SetId("")

ibm/service/resourcemanager/resource_ibm_resource_group.go

Lines changed: 43 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,28 @@
44
package resourcemanager
55

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

1112
"github.com/IBM-Cloud/terraform-provider-ibm/ibm/conns"
13+
"github.com/IBM/go-sdk-core/v5/core"
1214
rg "github.com/IBM/platform-services-go-sdk/resourcemanagerv2"
15+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
1316
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
1417
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry"
1518
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1619
)
1720

1821
func ResourceIBMResourceGroup() *schema.Resource {
1922
return &schema.Resource{
20-
Create: resourceIBMResourceGroupCreate,
21-
Read: resourceIBMResourceGroupRead,
22-
Update: resourceIBMResourceGroupUpdate,
23-
Delete: resourceIBMResourceGroupDelete,
24-
Exists: resourceIBMResourceGroupExists,
25-
Importer: &schema.ResourceImporter{},
23+
CreateContext: resourceIBMResourceGroupCreate,
24+
ReadContext: resourceIBMResourceGroupRead,
25+
UpdateContext: resourceIBMResourceGroupUpdate,
26+
DeleteContext: resourceIBMResourceGroupDelete,
27+
Exists: resourceIBMResourceGroupExists,
28+
Importer: &schema.ResourceImporter{},
2629

2730
Timeouts: &schema.ResourceTimeout{
2831
Delete: schema.DefaultTimeout(20 * time.Minute),
@@ -97,16 +100,16 @@ func ResourceIBMResourceGroup() *schema.Resource {
97100
}
98101
}
99102

100-
func resourceIBMResourceGroupCreate(d *schema.ResourceData, meta interface{}) error {
103+
func resourceIBMResourceGroupCreate(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
101104
rMgtClient, err := meta.(conns.ClientSession).ResourceManagerV2API()
102105
if err != nil {
103-
return err
106+
return diag.FromErr(err)
104107
}
105108
name := d.Get("name").(string)
106109

107110
userDetails, err := meta.(conns.ClientSession).BluemixUserDetails()
108111
if err != nil {
109-
return err
112+
return diag.FromErr(err)
110113
}
111114
accountID := userDetails.UserAccount
112115

@@ -117,34 +120,48 @@ func resourceIBMResourceGroupCreate(d *schema.ResourceData, meta interface{}) er
117120

118121
resourceGroup, resp, err := rMgtClient.CreateResourceGroup(&resourceGroupCreate)
119122
if err != nil {
120-
return fmt.Errorf("[ERROR] Error creating resource group: %s with response code %s", err, resp)
123+
return diag.FromErr(fmt.Errorf("[ERROR] Error creating resource group: %s with response code %s", err, resp))
121124
}
122125

123126
d.SetId(*resourceGroup.ID)
124127

125-
return resourceIBMResourceGroupRead(d, meta)
128+
return resourceIBMResourceGroupRead(context, d, meta)
126129
}
127130

128-
func resourceIBMResourceGroupRead(d *schema.ResourceData, meta interface{}) error {
131+
func resourceIBMResourceGroupRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
129132
rMgtClient, err := meta.(conns.ClientSession).ResourceManagerV2API()
130133
if err != nil {
131-
return err
134+
return diag.FromErr(err)
132135
}
133136
resourceGroupID := d.Id()
134137
resourceGroupGet := rg.GetResourceGroupOptions{
135138
ID: &resourceGroupID,
136139
}
137140

138-
resourceGroup, resp, err := rMgtClient.GetResourceGroup(&resourceGroupGet)
139-
if err != nil {
141+
var resp *core.DetailedResponse
142+
var resourceGroup *rg.ResourceGroup
143+
144+
err = retry.RetryContext(context, 5*time.Minute, func() *retry.RetryError {
145+
resourceGroup, resp, err = rMgtClient.GetResourceGroup(&resourceGroupGet)
146+
if err != nil || resourceGroup == nil {
147+
if resp != nil && resp.StatusCode == 404 {
148+
return retry.RetryableError(err)
149+
}
150+
return retry.NonRetryableError(err)
151+
}
152+
return nil
153+
})
154+
155+
if conns.IsResourceTimeoutError(err) {
156+
resourceGroup, resp, err = rMgtClient.GetResourceGroup(&resourceGroupGet)
157+
}
158+
if err != nil || resourceGroup == nil {
140159
if resp != nil && resp.StatusCode == 404 {
141-
log.Printf("[WARN] Resource Group is not found")
142160
d.SetId("")
143161
return nil
144162
}
145-
return fmt.Errorf("[ERROR] Error retrieving resource group: %s with response code %s", err, resp)
163+
return diag.FromErr(fmt.Errorf("[ERROR] Error retrieving resource group: %s. API Response: %s", err, resp))
146164
}
147-
148165
d.Set("name", *resourceGroup.Name)
149166
if resourceGroup.State != nil {
150167
d.Set("state", *resourceGroup.State)
@@ -185,10 +202,10 @@ func resourceIBMResourceGroupRead(d *schema.ResourceData, meta interface{}) erro
185202
return nil
186203
}
187204

188-
func resourceIBMResourceGroupUpdate(d *schema.ResourceData, meta interface{}) error {
205+
func resourceIBMResourceGroupUpdate(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
189206
rMgtClient, err := meta.(conns.ClientSession).ResourceManagerV2API()
190207
if err != nil {
191-
return err
208+
return diag.FromErr(err)
192209
}
193210

194211
resourceGroupID := d.Id()
@@ -205,17 +222,17 @@ func resourceIBMResourceGroupUpdate(d *schema.ResourceData, meta interface{}) er
205222
if hasChange {
206223
_, resp, err := rMgtClient.UpdateResourceGroup(&resourceGroupUpdate)
207224
if err != nil {
208-
return fmt.Errorf("[ERROR] Error updating resource group: %s with response code %s", err, resp)
225+
return diag.FromErr(fmt.Errorf("[ERROR] Error updating resource group: %s with response code %s", err, resp))
209226
}
210227

211228
}
212-
return resourceIBMResourceGroupRead(d, meta)
229+
return resourceIBMResourceGroupRead(context, d, meta)
213230
}
214231

215-
func resourceIBMResourceGroupDelete(d *schema.ResourceData, meta interface{}) error {
232+
func resourceIBMResourceGroupDelete(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
216233
rMgtClient, err := meta.(conns.ClientSession).ResourceManagerV2API()
217234
if err != nil {
218-
return err
235+
return diag.FromErr(err)
219236
}
220237

221238
resourceGroupID := d.Id()
@@ -252,11 +269,11 @@ func resourceIBMResourceGroupDelete(d *schema.ResourceData, meta interface{}) er
252269
log.Printf("[WARN] Resource Group is not found")
253270
return nil
254271
}
255-
return fmt.Errorf("[ERROR] Error Deleting resource group: %s with response code %s", err, resp)
272+
return diag.FromErr(fmt.Errorf("[ERROR] Error Deleting resource group: %s with response code %s", err, resp))
256273
}
257274
} else {
258275

259-
return fmt.Errorf("[ERROR] Error Deleting resource group: %s with response code %s", err, resp)
276+
return diag.FromErr(fmt.Errorf("[ERROR] Error Deleting resource group: %s with response code %s", err, resp))
260277
}
261278
}
262279

0 commit comments

Comments
 (0)