44package resourcemanager
55
66import (
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
1821func 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