Skip to content

feat(rdb): add support for context workflow #623

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Oct 12, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ require (
github.com/hashicorp/go-retryablehttp v0.6.7
github.com/hashicorp/terraform-plugin-sdk/v2 v2.0.3
github.com/mitchellh/go-homedir v1.1.0
github.com/scaleway/scaleway-sdk-go v1.0.0-beta.6.0.20200923142616-ae5d7880b199
github.com/scaleway/scaleway-sdk-go v1.0.0-beta.7.0.20201012095732-98ec365545de
github.com/stretchr/testify v1.6.1
golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a // indirect
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1
Expand Down
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -297,6 +297,8 @@ github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/scaleway/scaleway-sdk-go v1.0.0-beta.6.0.20200923142616-ae5d7880b199 h1:SVgNpFhrq0iOwzD4y881l0Bp7FwNTTjHhMmK/05vERw=
github.com/scaleway/scaleway-sdk-go v1.0.0-beta.6.0.20200923142616-ae5d7880b199/go.mod h1:CJJ5VAbozOl0yEw7nHB9+7BXTJbIn6h7W+f6Gau5IP8=
github.com/scaleway/scaleway-sdk-go v1.0.0-beta.7.0.20201012095732-98ec365545de h1:yhT7zTv3WAMD3S3GqkpAFIL8O76emUsBKsiBcVBb4Bg=
github.com/scaleway/scaleway-sdk-go v1.0.0-beta.7.0.20201012095732-98ec365545de/go.mod h1:CJJ5VAbozOl0yEw7nHB9+7BXTJbIn6h7W+f6Gau5IP8=
github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ=
github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0=
Expand Down
72 changes: 37 additions & 35 deletions scaleway/resource_rdb_instance_beta.go
Original file line number Diff line number Diff line change
@@ -1,22 +1,24 @@
package scaleway

import (
"context"
"io/ioutil"
"time"

"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/scaleway/scaleway-sdk-go/api/rdb/v1"
"github.com/scaleway/scaleway-sdk-go/scw"
)

func resourceScalewayRdbInstanceBeta() *schema.Resource {
return &schema.Resource{
Create: resourceScalewayRdbInstanceBetaCreate,
Read: resourceScalewayRdbInstanceBetaRead,
Update: resourceScalewayRdbInstanceBetaUpdate,
Delete: resourceScalewayRdbInstanceBetaDelete,
CreateContext: resourceScalewayRdbInstanceBetaCreate,
ReadContext: resourceScalewayRdbInstanceBetaRead,
UpdateContext: resourceScalewayRdbInstanceBetaUpdate,
DeleteContext: resourceScalewayRdbInstanceBetaDelete,
Importer: &schema.ResourceImporter{
State: schema.ImportStatePassthrough,
StateContext: schema.ImportStatePassthroughContext,
},
SchemaVersion: 0,
Schema: map[string]*schema.Schema{
Expand Down Expand Up @@ -119,10 +121,10 @@ func resourceScalewayRdbInstanceBeta() *schema.Resource {
}
}

func resourceScalewayRdbInstanceBetaCreate(d *schema.ResourceData, m interface{}) error {
func resourceScalewayRdbInstanceBetaCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
rdbAPI, region, err := rdbAPIWithRegion(d, m)
if err != nil {
return err
return diag.FromErr(err)
}

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

res, err := rdbAPI.CreateInstance(createReq)
res, err := rdbAPI.CreateInstance(createReq, scw.WithContext(ctx))
if err != nil {
return err
return diag.FromErr(err)
}

d.SetId(newRegionalIDString(region, res.ID))
Expand All @@ -150,30 +152,30 @@ func resourceScalewayRdbInstanceBetaCreate(d *schema.ResourceData, m interface{}
Region: region,
InstanceID: res.ID,
Timeout: scw.TimeDurationPtr(InstanceServerWaitForTimeout),
})
}, scw.WithContext(ctx))
if err != nil {
return err
return diag.FromErr(err)
}

return resourceScalewayRdbInstanceBetaRead(d, m)
return resourceScalewayRdbInstanceBetaRead(ctx, d, m)
}

func resourceScalewayRdbInstanceBetaRead(d *schema.ResourceData, m interface{}) error {
func resourceScalewayRdbInstanceBetaRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
rdbAPI, region, ID, err := rdbAPIWithRegionAndID(m, d.Id())
if err != nil {
return err
return diag.FromErr(err)
}

res, err := rdbAPI.GetInstance(&rdb.GetInstanceRequest{
Region: region,
InstanceID: ID,
})
}, scw.WithContext(ctx))
if err != nil {
if is404Error(err) {
d.SetId("")
return nil
}
return err
return diag.FromErr(err)
}

_ = d.Set("name", res.Name)
Expand Down Expand Up @@ -202,21 +204,21 @@ func resourceScalewayRdbInstanceBetaRead(d *schema.ResourceData, m interface{})
InstanceID: ID,
})
if err != nil {
return err
return diag.FromErr(err)
}
certContent, err := ioutil.ReadAll(cert.Content)
if err != nil {
return err
return diag.FromErr(err)
}
_ = d.Set("certificate", string(certContent))

return nil
}

func resourceScalewayRdbInstanceBetaUpdate(d *schema.ResourceData, m interface{}) error {
func resourceScalewayRdbInstanceBetaUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
rdbAPI, region, ID, err := rdbAPIWithRegionAndID(m, d.Id())
if err != nil {
return err
return diag.FromErr(err)
}

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

_, err = rdbAPI.UpdateInstance(req)
_, err = rdbAPI.UpdateInstance(req, scw.WithContext(ctx))
if err != nil {
return err
return diag.FromErr(err)
}
upgradeInstanceRequests := []rdb.UpgradeInstanceRequest(nil)
if d.HasChange("node_type") {
Expand All @@ -258,18 +260,18 @@ func resourceScalewayRdbInstanceBetaUpdate(d *schema.ResourceData, m interface{}
})
}
for _, request := range upgradeInstanceRequests {
_, err = rdbAPI.UpgradeInstance(&request)
_, err = rdbAPI.UpgradeInstance(&request, scw.WithContext(ctx))
if err != nil {
return err
return diag.FromErr(err)
}

_, err = rdbAPI.WaitForInstance(&rdb.WaitForInstanceRequest{
Region: region,
InstanceID: ID,
Timeout: scw.TimeDurationPtr(InstanceServerWaitForTimeout * 3), // upgrade takes some time
})
}, scw.WithContext(ctx))
if err != nil {
return err
return diag.FromErr(err)
}

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

_, err = rdbAPI.UpdateUser(req)
_, err = rdbAPI.UpdateUser(req, scw.WithContext(ctx))
if err != nil {
return err
return diag.FromErr(err)
}
}

return resourceScalewayRdbInstanceBetaRead(d, m)
return resourceScalewayRdbInstanceBetaRead(ctx, d, m)
}

func resourceScalewayRdbInstanceBetaDelete(d *schema.ResourceData, m interface{}) error {
func resourceScalewayRdbInstanceBetaDelete(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
rdbAPI, region, ID, err := rdbAPIWithRegionAndID(m, d.Id())
if err != nil {
return err
return diag.FromErr(err)
}

_, err = rdbAPI.DeleteInstance(&rdb.DeleteInstanceRequest{
Region: region,
InstanceID: ID,
})
}, scw.WithContext(ctx))

if err != nil && !is404Error(err) {
return err
return diag.FromErr(err)
}

_, err = rdbAPI.WaitForInstance(&rdb.WaitForInstanceRequest{
InstanceID: ID,
Region: region,
Timeout: scw.TimeDurationPtr(LbWaitForTimeout),
})
}, scw.WithContext(ctx))

if err != nil && !is404Error(err) {
return err
return diag.FromErr(err)
}

return nil
Expand Down
54 changes: 28 additions & 26 deletions scaleway/resource_rdb_user_beta.go
Original file line number Diff line number Diff line change
@@ -1,22 +1,24 @@
package scaleway

import (
"context"
"fmt"
"strings"

"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/scaleway/scaleway-sdk-go/api/rdb/v1"
"github.com/scaleway/scaleway-sdk-go/scw"
)

func resourceScalewayRdbUserBeta() *schema.Resource {
return &schema.Resource{
Create: resourceScalewayRdbUserBetaCreate,
Read: resourceScalewayRdbUserBetaRead,
Update: resourceScalewayRdbUserBetaUpdate,
Delete: resourceScalewayRdbUserBetaDelete,
CreateContext: resourceScalewayRdbUserBetaCreate,
ReadContext: resourceScalewayRdbUserBetaRead,
UpdateContext: resourceScalewayRdbUserBetaUpdate,
DeleteContext: resourceScalewayRdbUserBetaDelete,
Importer: &schema.ResourceImporter{
State: schema.ImportStatePassthrough,
StateContext: schema.ImportStatePassthroughContext,
},
SchemaVersion: 0,
Schema: map[string]*schema.Schema{
Expand Down Expand Up @@ -50,10 +52,10 @@ func resourceScalewayRdbUserBeta() *schema.Resource {
}
}

func resourceScalewayRdbUserBetaCreate(d *schema.ResourceData, m interface{}) error {
func resourceScalewayRdbUserBetaCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
rdbAPI, region, err := rdbAPIWithRegion(d, m)
if err != nil {
return err
return diag.FromErr(err)
}
instanceID := d.Get("instance_id").(string)
createReq := &rdb.CreateUserRequest{
Expand All @@ -64,40 +66,40 @@ func resourceScalewayRdbUserBetaCreate(d *schema.ResourceData, m interface{}) er
IsAdmin: d.Get("is_admin").(bool),
}

res, err := rdbAPI.CreateUser(createReq)
res, err := rdbAPI.CreateUser(createReq, scw.WithContext(ctx))
if err != nil {
return err
return diag.FromErr(err)
}

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

return resourceScalewayRdbUserBetaRead(d, m)
return resourceScalewayRdbUserBetaRead(ctx, d, m)
}

func resourceScalewayRdbUserBetaRead(d *schema.ResourceData, m interface{}) error {
func resourceScalewayRdbUserBetaRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
rdbAPI, region, err := rdbAPIWithRegion(d, m)
if err != nil {
return err
return diag.FromErr(err)
}

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

if err != nil {
return err
return diag.FromErr(err)
}

res, err := rdbAPI.ListUsers(&rdb.ListUsersRequest{
Region: region,
InstanceID: instanceID,
Name: &userName,
})
}, scw.WithContext(ctx))

if err != nil {
if is404Error(err) {
d.SetId("")
return nil
}
return err
return diag.FromErr(err)
}

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

func resourceScalewayRdbUserBetaUpdate(d *schema.ResourceData, m interface{}) error {
func resourceScalewayRdbUserBetaUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
rdbAPI, region, err := rdbAPIWithRegion(d, m)
if err != nil {
return err
return diag.FromErr(err)
}

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

if err != nil {
return err
return diag.FromErr(err)
}

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

_, err = rdbAPI.UpdateUser(req)
_, err = rdbAPI.UpdateUser(req, scw.WithContext(ctx))
if err != nil {
return err
return diag.FromErr(err)
}

return resourceScalewayRdbUserBetaRead(d, m)
return resourceScalewayRdbUserBetaRead(ctx, d, m)
}

func resourceScalewayRdbUserBetaDelete(d *schema.ResourceData, m interface{}) error {
func resourceScalewayRdbUserBetaDelete(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
rdbAPI, region, err := rdbAPIWithRegion(d, m)
if err != nil {
return err
return diag.FromErr(err)
}

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

if err != nil {
return err
return diag.FromErr(err)
}

err = rdbAPI.DeleteUser(&rdb.DeleteUserRequest{
Region: region,
InstanceID: instanceID,
Name: userName,
})
}, scw.WithContext(ctx))

if err != nil && !is404Error(err) {
return err
return diag.FromErr(err)
}

return nil
Expand Down