Skip to content

Commit 6219082

Browse files
committed
feat: add helpers for extract engine's version
1 parent 9669d4c commit 6219082

File tree

3 files changed

+78
-1
lines changed

3 files changed

+78
-1
lines changed

internal/services/rdb/helpers.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ package rdb
33
import (
44
"context"
55
"errors"
6+
"fmt"
7+
"regexp"
8+
"strconv"
69
"strings"
710
"time"
811

@@ -100,3 +103,19 @@ func getIPConfigUpdate(d *schema.ResourceData, ipFieldName string) (ipamConfig *
100103
}
101104
return ipamConfig, staticConfig
102105
}
106+
107+
func ExtractEngineVersion(engine string) (int, error) {
108+
re := regexp.MustCompile(`[-](\d+)`)
109+
matches := re.FindStringSubmatch(engine)
110+
111+
if len(matches) < 2 {
112+
return 0, fmt.Errorf("no version found in: %s", engine)
113+
}
114+
115+
version, err := strconv.Atoi(matches[1])
116+
if err != nil {
117+
return 0, fmt.Errorf("failed to convert version to integer: %w", err)
118+
}
119+
120+
return version, nil
121+
}

internal/services/rdb/helpers_test.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,39 @@ func TestPrivilegeV1SchemaUpgradeFunc(t *testing.T) {
3131
t.Fatalf("\n\nexpected:\n\n%#v\n\ngot:\n\n%#v\n\n", v1Schema, actual)
3232
}
3333
}
34+
35+
func TestExtractEngineVersion(t *testing.T) {
36+
tests := []struct {
37+
engine string
38+
expected int
39+
expectingError bool
40+
}{
41+
{"postgresql-15", 15, false},
42+
{"mysql-8.0", 8, false},
43+
{"redis-6", 6, false},
44+
{"mariadb-10.5", 10, false}, // Only extracts the major version
45+
{"invalid-engine", 0, true}, // No version to extract
46+
{"", 0, true}, // Empty string case
47+
{"mongodb-3.6", 3, false}, // Extracts only the major version
48+
}
49+
50+
for _, tt := range tests {
51+
t.Run(tt.engine, func(t *testing.T) {
52+
result, err := rdb.ExtractEngineVersion(tt.engine)
53+
54+
if tt.expectingError {
55+
if err == nil {
56+
t.Errorf("expected an error for engine %q, but got none", tt.engine)
57+
}
58+
} else {
59+
if err != nil {
60+
t.Errorf("did not expect an error for engine %q, but got: %s", tt.engine, err)
61+
}
62+
63+
if result != tt.expected {
64+
t.Errorf("expected version %d for engine %q, but got %d", tt.expected, tt.engine, result)
65+
}
66+
}
67+
})
68+
}
69+
}

internal/services/rdb/instance.go

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import (
1818
"github.com/scaleway/terraform-provider-scaleway/v2/internal/locality/regional"
1919
"github.com/scaleway/terraform-provider-scaleway/v2/internal/locality/zonal"
2020
"github.com/scaleway/terraform-provider-scaleway/v2/internal/services/account"
21+
rdbtestfuncs "github.com/scaleway/terraform-provider-scaleway/v2/internal/services/rdb/testfuncs"
2122
"github.com/scaleway/terraform-provider-scaleway/v2/internal/types"
2223
"github.com/scaleway/terraform-provider-scaleway/v2/internal/verify"
2324
)
@@ -554,8 +555,13 @@ func ResourceRdbInstanceUpdate(ctx context.Context, d *schema.ResourceData, m in
554555
}
555556

556557
////////////////////
557-
// Upgrade instance
558+
// migrate instance
558559
////////////////////
560+
561+
//if d.HasChange("engine") {
562+
//
563+
//}
564+
559565
upgradeInstanceRequests := []rdb.UpgradeInstanceRequest(nil)
560566

561567
rdbInstance, err := rdbAPI.GetInstance(&rdb.GetInstanceRequest{
@@ -568,6 +574,22 @@ func ResourceRdbInstanceUpdate(ctx context.Context, d *schema.ResourceData, m in
568574
diskIsFull := rdbInstance.Status == rdb.InstanceStatusDiskFull
569575
volType := rdb.VolumeType(d.Get("volume_type").(string))
570576

577+
if d.HasChange("engine") {
578+
579+
lastEngine, err := ExtractEngineVersion(rdbInstance.Engine)
580+
if err != nil {
581+
return diag.FromErr(err)
582+
}
583+
newEngine, err := ExtractEngineVersion(d.Get("engine").(string))
584+
if newEngine <= lastEngine {
585+
return diag.FromErr(errors.New("volume_size_in_gb must be a multiple of 5"))
586+
}
587+
engine := rdbAPI.FetchLatestEngineVersion()
588+
589+
}
590+
////////////////////
591+
// Upgrade instance
592+
////////////////////
571593
// Volume type and size
572594
if d.HasChanges("volume_type", "volume_size_in_gb") {
573595
switch volType {

0 commit comments

Comments
 (0)