Skip to content

Commit a43d0fc

Browse files
authored
feat(rdb): add support for context workflow (#623)
1 parent b2713c1 commit a43d0fc

File tree

4 files changed

+68
-62
lines changed

4 files changed

+68
-62
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ require (
77
github.com/hashicorp/go-retryablehttp v0.6.7
88
github.com/hashicorp/terraform-plugin-sdk/v2 v2.0.3
99
github.com/mitchellh/go-homedir v1.1.0
10-
github.com/scaleway/scaleway-sdk-go v1.0.0-beta.6.0.20200923142616-ae5d7880b199
10+
github.com/scaleway/scaleway-sdk-go v1.0.0-beta.7.0.20201012095732-98ec365545de
1111
github.com/stretchr/testify v1.6.1
1212
golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a // indirect
1313
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,8 @@ github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:
297297
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
298298
github.com/scaleway/scaleway-sdk-go v1.0.0-beta.6.0.20200923142616-ae5d7880b199 h1:SVgNpFhrq0iOwzD4y881l0Bp7FwNTTjHhMmK/05vERw=
299299
github.com/scaleway/scaleway-sdk-go v1.0.0-beta.6.0.20200923142616-ae5d7880b199/go.mod h1:CJJ5VAbozOl0yEw7nHB9+7BXTJbIn6h7W+f6Gau5IP8=
300+
github.com/scaleway/scaleway-sdk-go v1.0.0-beta.7.0.20201012095732-98ec365545de h1:yhT7zTv3WAMD3S3GqkpAFIL8O76emUsBKsiBcVBb4Bg=
301+
github.com/scaleway/scaleway-sdk-go v1.0.0-beta.7.0.20201012095732-98ec365545de/go.mod h1:CJJ5VAbozOl0yEw7nHB9+7BXTJbIn6h7W+f6Gau5IP8=
300302
github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ=
301303
github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
302304
github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0=

scaleway/resource_rdb_instance_beta.go

Lines changed: 37 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,24 @@
11
package scaleway
22

33
import (
4+
"context"
45
"io/ioutil"
56
"time"
67

8+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
79
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
810
"github.com/scaleway/scaleway-sdk-go/api/rdb/v1"
911
"github.com/scaleway/scaleway-sdk-go/scw"
1012
)
1113

1214
func resourceScalewayRdbInstanceBeta() *schema.Resource {
1315
return &schema.Resource{
14-
Create: resourceScalewayRdbInstanceBetaCreate,
15-
Read: resourceScalewayRdbInstanceBetaRead,
16-
Update: resourceScalewayRdbInstanceBetaUpdate,
17-
Delete: resourceScalewayRdbInstanceBetaDelete,
16+
CreateContext: resourceScalewayRdbInstanceBetaCreate,
17+
ReadContext: resourceScalewayRdbInstanceBetaRead,
18+
UpdateContext: resourceScalewayRdbInstanceBetaUpdate,
19+
DeleteContext: resourceScalewayRdbInstanceBetaDelete,
1820
Importer: &schema.ResourceImporter{
19-
State: schema.ImportStatePassthrough,
21+
StateContext: schema.ImportStatePassthroughContext,
2022
},
2123
SchemaVersion: 0,
2224
Schema: map[string]*schema.Schema{
@@ -119,10 +121,10 @@ func resourceScalewayRdbInstanceBeta() *schema.Resource {
119121
}
120122
}
121123

122-
func resourceScalewayRdbInstanceBetaCreate(d *schema.ResourceData, m interface{}) error {
124+
func resourceScalewayRdbInstanceBetaCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
123125
rdbAPI, region, err := rdbAPIWithRegion(d, m)
124126
if err != nil {
125-
return err
127+
return diag.FromErr(err)
126128
}
127129

128130
createReq := &rdb.CreateInstanceRequest{
@@ -139,9 +141,9 @@ func resourceScalewayRdbInstanceBetaCreate(d *schema.ResourceData, m interface{}
139141
Tags: expandStrings(d.Get("tags")),
140142
}
141143

142-
res, err := rdbAPI.CreateInstance(createReq)
144+
res, err := rdbAPI.CreateInstance(createReq, scw.WithContext(ctx))
143145
if err != nil {
144-
return err
146+
return diag.FromErr(err)
145147
}
146148

147149
d.SetId(newRegionalIDString(region, res.ID))
@@ -150,30 +152,30 @@ func resourceScalewayRdbInstanceBetaCreate(d *schema.ResourceData, m interface{}
150152
Region: region,
151153
InstanceID: res.ID,
152154
Timeout: scw.TimeDurationPtr(InstanceServerWaitForTimeout),
153-
})
155+
}, scw.WithContext(ctx))
154156
if err != nil {
155-
return err
157+
return diag.FromErr(err)
156158
}
157159

158-
return resourceScalewayRdbInstanceBetaRead(d, m)
160+
return resourceScalewayRdbInstanceBetaRead(ctx, d, m)
159161
}
160162

161-
func resourceScalewayRdbInstanceBetaRead(d *schema.ResourceData, m interface{}) error {
163+
func resourceScalewayRdbInstanceBetaRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
162164
rdbAPI, region, ID, err := rdbAPIWithRegionAndID(m, d.Id())
163165
if err != nil {
164-
return err
166+
return diag.FromErr(err)
165167
}
166168

167169
res, err := rdbAPI.GetInstance(&rdb.GetInstanceRequest{
168170
Region: region,
169171
InstanceID: ID,
170-
})
172+
}, scw.WithContext(ctx))
171173
if err != nil {
172174
if is404Error(err) {
173175
d.SetId("")
174176
return nil
175177
}
176-
return err
178+
return diag.FromErr(err)
177179
}
178180

179181
_ = d.Set("name", res.Name)
@@ -202,21 +204,21 @@ func resourceScalewayRdbInstanceBetaRead(d *schema.ResourceData, m interface{})
202204
InstanceID: ID,
203205
})
204206
if err != nil {
205-
return err
207+
return diag.FromErr(err)
206208
}
207209
certContent, err := ioutil.ReadAll(cert.Content)
208210
if err != nil {
209-
return err
211+
return diag.FromErr(err)
210212
}
211213
_ = d.Set("certificate", string(certContent))
212214

213215
return nil
214216
}
215217

216-
func resourceScalewayRdbInstanceBetaUpdate(d *schema.ResourceData, m interface{}) error {
218+
func resourceScalewayRdbInstanceBetaUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
217219
rdbAPI, region, ID, err := rdbAPIWithRegionAndID(m, d.Id())
218220
if err != nil {
219-
return err
221+
return diag.FromErr(err)
220222
}
221223

222224
req := &rdb.UpdateInstanceRequest{
@@ -235,9 +237,9 @@ func resourceScalewayRdbInstanceBetaUpdate(d *schema.ResourceData, m interface{}
235237
req.Tags = scw.StringsPtr(expandStrings(d.Get("tags")))
236238
}
237239

238-
_, err = rdbAPI.UpdateInstance(req)
240+
_, err = rdbAPI.UpdateInstance(req, scw.WithContext(ctx))
239241
if err != nil {
240-
return err
242+
return diag.FromErr(err)
241243
}
242244
upgradeInstanceRequests := []rdb.UpgradeInstanceRequest(nil)
243245
if d.HasChange("node_type") {
@@ -258,18 +260,18 @@ func resourceScalewayRdbInstanceBetaUpdate(d *schema.ResourceData, m interface{}
258260
})
259261
}
260262
for _, request := range upgradeInstanceRequests {
261-
_, err = rdbAPI.UpgradeInstance(&request)
263+
_, err = rdbAPI.UpgradeInstance(&request, scw.WithContext(ctx))
262264
if err != nil {
263-
return err
265+
return diag.FromErr(err)
264266
}
265267

266268
_, err = rdbAPI.WaitForInstance(&rdb.WaitForInstanceRequest{
267269
Region: region,
268270
InstanceID: ID,
269271
Timeout: scw.TimeDurationPtr(InstanceServerWaitForTimeout * 3), // upgrade takes some time
270-
})
272+
}, scw.WithContext(ctx))
271273
if err != nil {
272-
return err
274+
return diag.FromErr(err)
273275
}
274276

275277
// Wait for the instance to settle after upgrading
@@ -284,38 +286,38 @@ func resourceScalewayRdbInstanceBetaUpdate(d *schema.ResourceData, m interface{}
284286
Password: expandStringPtr(d.Get("password")),
285287
}
286288

287-
_, err = rdbAPI.UpdateUser(req)
289+
_, err = rdbAPI.UpdateUser(req, scw.WithContext(ctx))
288290
if err != nil {
289-
return err
291+
return diag.FromErr(err)
290292
}
291293
}
292294

293-
return resourceScalewayRdbInstanceBetaRead(d, m)
295+
return resourceScalewayRdbInstanceBetaRead(ctx, d, m)
294296
}
295297

296-
func resourceScalewayRdbInstanceBetaDelete(d *schema.ResourceData, m interface{}) error {
298+
func resourceScalewayRdbInstanceBetaDelete(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
297299
rdbAPI, region, ID, err := rdbAPIWithRegionAndID(m, d.Id())
298300
if err != nil {
299-
return err
301+
return diag.FromErr(err)
300302
}
301303

302304
_, err = rdbAPI.DeleteInstance(&rdb.DeleteInstanceRequest{
303305
Region: region,
304306
InstanceID: ID,
305-
})
307+
}, scw.WithContext(ctx))
306308

307309
if err != nil && !is404Error(err) {
308-
return err
310+
return diag.FromErr(err)
309311
}
310312

311313
_, err = rdbAPI.WaitForInstance(&rdb.WaitForInstanceRequest{
312314
InstanceID: ID,
313315
Region: region,
314316
Timeout: scw.TimeDurationPtr(LbWaitForTimeout),
315-
})
317+
}, scw.WithContext(ctx))
316318

317319
if err != nil && !is404Error(err) {
318-
return err
320+
return diag.FromErr(err)
319321
}
320322

321323
return nil

scaleway/resource_rdb_user_beta.go

Lines changed: 28 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,24 @@
11
package scaleway
22

33
import (
4+
"context"
45
"fmt"
56
"strings"
67

8+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
79
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
810
"github.com/scaleway/scaleway-sdk-go/api/rdb/v1"
911
"github.com/scaleway/scaleway-sdk-go/scw"
1012
)
1113

1214
func resourceScalewayRdbUserBeta() *schema.Resource {
1315
return &schema.Resource{
14-
Create: resourceScalewayRdbUserBetaCreate,
15-
Read: resourceScalewayRdbUserBetaRead,
16-
Update: resourceScalewayRdbUserBetaUpdate,
17-
Delete: resourceScalewayRdbUserBetaDelete,
16+
CreateContext: resourceScalewayRdbUserBetaCreate,
17+
ReadContext: resourceScalewayRdbUserBetaRead,
18+
UpdateContext: resourceScalewayRdbUserBetaUpdate,
19+
DeleteContext: resourceScalewayRdbUserBetaDelete,
1820
Importer: &schema.ResourceImporter{
19-
State: schema.ImportStatePassthrough,
21+
StateContext: schema.ImportStatePassthroughContext,
2022
},
2123
SchemaVersion: 0,
2224
Schema: map[string]*schema.Schema{
@@ -50,10 +52,10 @@ func resourceScalewayRdbUserBeta() *schema.Resource {
5052
}
5153
}
5254

53-
func resourceScalewayRdbUserBetaCreate(d *schema.ResourceData, m interface{}) error {
55+
func resourceScalewayRdbUserBetaCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
5456
rdbAPI, region, err := rdbAPIWithRegion(d, m)
5557
if err != nil {
56-
return err
58+
return diag.FromErr(err)
5759
}
5860
instanceID := d.Get("instance_id").(string)
5961
createReq := &rdb.CreateUserRequest{
@@ -64,40 +66,40 @@ func resourceScalewayRdbUserBetaCreate(d *schema.ResourceData, m interface{}) er
6466
IsAdmin: d.Get("is_admin").(bool),
6567
}
6668

67-
res, err := rdbAPI.CreateUser(createReq)
69+
res, err := rdbAPI.CreateUser(createReq, scw.WithContext(ctx))
6870
if err != nil {
69-
return err
71+
return diag.FromErr(err)
7072
}
7173

7274
d.SetId(resourceScalewayRdbUserBetaID(region, expandID(instanceID), res.Name))
7375

74-
return resourceScalewayRdbUserBetaRead(d, m)
76+
return resourceScalewayRdbUserBetaRead(ctx, d, m)
7577
}
7678

77-
func resourceScalewayRdbUserBetaRead(d *schema.ResourceData, m interface{}) error {
79+
func resourceScalewayRdbUserBetaRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
7880
rdbAPI, region, err := rdbAPIWithRegion(d, m)
7981
if err != nil {
80-
return err
82+
return diag.FromErr(err)
8183
}
8284

8385
instanceID, userName, err := resourceScalewayRdbUserBetaParseID(d.Id())
8486

8587
if err != nil {
86-
return err
88+
return diag.FromErr(err)
8789
}
8890

8991
res, err := rdbAPI.ListUsers(&rdb.ListUsersRequest{
9092
Region: region,
9193
InstanceID: instanceID,
9294
Name: &userName,
93-
})
95+
}, scw.WithContext(ctx))
9496

9597
if err != nil {
9698
if is404Error(err) {
9799
d.SetId("")
98100
return nil
99101
}
100-
return err
102+
return diag.FromErr(err)
101103
}
102104

103105
var user = res.Users[0]
@@ -110,16 +112,16 @@ func resourceScalewayRdbUserBetaRead(d *schema.ResourceData, m interface{}) erro
110112
return nil
111113
}
112114

113-
func resourceScalewayRdbUserBetaUpdate(d *schema.ResourceData, m interface{}) error {
115+
func resourceScalewayRdbUserBetaUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
114116
rdbAPI, region, err := rdbAPIWithRegion(d, m)
115117
if err != nil {
116-
return err
118+
return diag.FromErr(err)
117119
}
118120

119121
instanceID, userName, err := resourceScalewayRdbUserBetaParseID(d.Id())
120122

121123
if err != nil {
122-
return err
124+
return diag.FromErr(err)
123125
}
124126

125127
req := &rdb.UpdateUserRequest{
@@ -135,34 +137,34 @@ func resourceScalewayRdbUserBetaUpdate(d *schema.ResourceData, m interface{}) er
135137
req.IsAdmin = scw.BoolPtr(d.Get("is_admin").(bool))
136138
}
137139

138-
_, err = rdbAPI.UpdateUser(req)
140+
_, err = rdbAPI.UpdateUser(req, scw.WithContext(ctx))
139141
if err != nil {
140-
return err
142+
return diag.FromErr(err)
141143
}
142144

143-
return resourceScalewayRdbUserBetaRead(d, m)
145+
return resourceScalewayRdbUserBetaRead(ctx, d, m)
144146
}
145147

146-
func resourceScalewayRdbUserBetaDelete(d *schema.ResourceData, m interface{}) error {
148+
func resourceScalewayRdbUserBetaDelete(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
147149
rdbAPI, region, err := rdbAPIWithRegion(d, m)
148150
if err != nil {
149-
return err
151+
return diag.FromErr(err)
150152
}
151153

152154
instanceID, userName, err := resourceScalewayRdbUserBetaParseID(d.Id())
153155

154156
if err != nil {
155-
return err
157+
return diag.FromErr(err)
156158
}
157159

158160
err = rdbAPI.DeleteUser(&rdb.DeleteUserRequest{
159161
Region: region,
160162
InstanceID: instanceID,
161163
Name: userName,
162-
})
164+
}, scw.WithContext(ctx))
163165

164166
if err != nil && !is404Error(err) {
165-
return err
167+
return diag.FromErr(err)
166168
}
167169

168170
return nil

0 commit comments

Comments
 (0)