Skip to content

Commit f9f09c9

Browse files
authored
feat(rdb): allow RDB instance upgrade to HA without replacing the resource (#518)
* Allow RDB instance upgrade to HA without replacing the resource. * Add RDB conversion to HA into acceptance tests. * RDB: allow updating initial user password.
1 parent ebdb77b commit f9f09c9

File tree

2 files changed

+45
-11
lines changed

2 files changed

+45
-11
lines changed

scaleway/resource_rdb_instance_beta.go

Lines changed: 41 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package scaleway
22

33
import (
44
"io/ioutil"
5+
"time"
56

67
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
78
"github.com/scaleway/scaleway-sdk-go/api/rdb/v1"
@@ -39,7 +40,6 @@ func resourceScalewayRdbInstanceBeta() *schema.Resource {
3940
"is_ha_cluster": {
4041
Type: schema.TypeBool,
4142
Optional: true,
42-
ForceNew: true,
4343
Default: false,
4444
Description: "Enable or disable high availability for the database instance",
4545
},
@@ -52,11 +52,13 @@ func resourceScalewayRdbInstanceBeta() *schema.Resource {
5252
"user_name": {
5353
Type: schema.TypeString,
5454
Required: true,
55+
ForceNew: true,
5556
Description: "Identifier for the first user of the database instance",
5657
},
5758
"password": {
5859
Type: schema.TypeString,
5960
Required: true,
61+
Sensitive: true,
6062
Description: "Password for the first user of the database instance",
6163
},
6264
"tags": {
@@ -234,13 +236,26 @@ func resourceScalewayRdbInstanceBetaUpdate(d *schema.ResourceData, m interface{}
234236
if err != nil {
235237
return err
236238
}
237-
239+
upgradeInstanceRequests := []rdb.UpgradeInstanceRequest(nil)
238240
if d.HasChange("node_type") {
239-
_, err = rdbAPI.UpgradeInstance(&rdb.UpgradeInstanceRequest{
240-
Region: region,
241-
InstanceID: ID,
242-
NodeType: scw.StringPtr(d.Get("node_type").(string)),
243-
})
241+
upgradeInstanceRequests = append(upgradeInstanceRequests,
242+
rdb.UpgradeInstanceRequest{
243+
Region: region,
244+
InstanceID: ID,
245+
NodeType: scw.StringPtr(d.Get("node_type").(string)),
246+
})
247+
}
248+
249+
if d.HasChange("is_ha_cluster") {
250+
upgradeInstanceRequests = append(upgradeInstanceRequests,
251+
rdb.UpgradeInstanceRequest{
252+
Region: region,
253+
InstanceID: ID,
254+
EnableHa: scw.BoolPtr(d.Get("is_ha_cluster").(bool)),
255+
})
256+
}
257+
for _, request := range upgradeInstanceRequests {
258+
_, err = rdbAPI.UpgradeInstance(&request)
244259
if err != nil {
245260
return err
246261
}
@@ -253,7 +268,26 @@ func resourceScalewayRdbInstanceBetaUpdate(d *schema.ResourceData, m interface{}
253268
if err != nil {
254269
return err
255270
}
271+
272+
// Wait for the instance to settle after upgrading
273+
time.Sleep(30 * time.Second)
274+
256275
}
276+
277+
if d.HasChange("password") {
278+
req := &rdb.UpdateUserRequest{
279+
Region: region,
280+
InstanceID: ID,
281+
Name: d.Get("user_name").(string),
282+
Password: scw.StringPtr(d.Get("password").(string)),
283+
}
284+
285+
_, err = rdbAPI.UpdateUser(req)
286+
if err != nil {
287+
return err
288+
}
289+
}
290+
257291
return resourceScalewayRdbInstanceBetaRead(d, m)
258292
}
259293

scaleway/resource_rdb_instance_beta_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ func TestAccScalewayRdbInstanceBeta(t *testing.T) {
5353
name = "test-rdb"
5454
node_type = "db-dev-s"
5555
engine = "PostgreSQL-11"
56-
is_ha_cluster = true
56+
is_ha_cluster = false
5757
disable_backup = true
5858
user_name = "my_initial_user"
5959
password = "thiZ_is_v&ry_s3cret"
@@ -65,7 +65,7 @@ func TestAccScalewayRdbInstanceBeta(t *testing.T) {
6565
resource.TestCheckResourceAttr("scaleway_rdb_instance_beta.main", "name", "test-rdb"),
6666
resource.TestCheckResourceAttr("scaleway_rdb_instance_beta.main", "node_type", "db-dev-s"),
6767
resource.TestCheckResourceAttr("scaleway_rdb_instance_beta.main", "engine", "PostgreSQL-11"),
68-
resource.TestCheckResourceAttr("scaleway_rdb_instance_beta.main", "is_ha_cluster", "true"),
68+
resource.TestCheckResourceAttr("scaleway_rdb_instance_beta.main", "is_ha_cluster", "false"),
6969
resource.TestCheckResourceAttr("scaleway_rdb_instance_beta.main", "disable_backup", "true"),
7070
resource.TestCheckResourceAttr("scaleway_rdb_instance_beta.main", "user_name", "my_initial_user"),
7171
resource.TestCheckResourceAttr("scaleway_rdb_instance_beta.main", "password", "thiZ_is_v&ry_s3cret"),
@@ -86,7 +86,7 @@ func TestAccScalewayRdbInstanceBeta(t *testing.T) {
8686
is_ha_cluster = true
8787
disable_backup = false
8888
user_name = "my_initial_user"
89-
password = "thiZ_is_v&ry_s3cret"
89+
password = "thiZ_is_v&ry_s8cret"
9090
tags = [ "terraform-test", "scaleway_rdb_instance_beta", "minimal" ]
9191
}
9292
`,
@@ -98,7 +98,7 @@ func TestAccScalewayRdbInstanceBeta(t *testing.T) {
9898
resource.TestCheckResourceAttr("scaleway_rdb_instance_beta.main", "is_ha_cluster", "true"),
9999
resource.TestCheckResourceAttr("scaleway_rdb_instance_beta.main", "disable_backup", "false"),
100100
resource.TestCheckResourceAttr("scaleway_rdb_instance_beta.main", "user_name", "my_initial_user"),
101-
resource.TestCheckResourceAttr("scaleway_rdb_instance_beta.main", "password", "thiZ_is_v&ry_s3cret"),
101+
resource.TestCheckResourceAttr("scaleway_rdb_instance_beta.main", "password", "thiZ_is_v&ry_s8cret"),
102102
resource.TestCheckResourceAttr("scaleway_rdb_instance_beta.main", "tags.0", "terraform-test"),
103103
resource.TestCheckResourceAttr("scaleway_rdb_instance_beta.main", "tags.1", "scaleway_rdb_instance_beta"),
104104
resource.TestCheckResourceAttr("scaleway_rdb_instance_beta.main", "tags.2", "minimal"),

0 commit comments

Comments
 (0)