From 59f1153fbd0fcfd02381456402bee0141aea26b7 Mon Sep 17 00:00:00 2001 From: Jonathan Remy Date: Wed, 26 Nov 2025 10:33:16 +0100 Subject: [PATCH 01/11] feat(redis): add version settings listing --- docs/commands/redis.md | 20 ++++++ internal/namespaces/redis/v1/custom.go | 1 + .../redis/v1/custom_version_settings.go | 67 ++++++++++++++++++ .../redis/v1/custom_version_settings_test.go | 69 +++++++++++++++++++ 4 files changed, 157 insertions(+) create mode 100644 internal/namespaces/redis/v1/custom_version_settings.go create mode 100644 internal/namespaces/redis/v1/custom_version_settings_test.go diff --git a/docs/commands/redis.md b/docs/commands/redis.md index cfea4838e8..04089b60bc 100644 --- a/docs/commands/redis.md +++ b/docs/commands/redis.md @@ -629,3 +629,23 @@ scw redis version list [arg=value ...] +### List settings for a Redis™ version + +List the available advanced settings for a specific Redis™ engine version. + +**Usage:** + +``` +scw redis version settings [arg=value ...] +``` + + +**Args:** + +| Name | | Description | +|------|---|-------------| +| version | Required | Redis™ engine version | +| zone | Default: `fr-par-1`
One of: `fr-par-1`, `fr-par-2`, `nl-ams-1`, `nl-ams-2`, `pl-waw-1`, `pl-waw-2` | Zone to target. If none is passed will use default zone from the config | + + + diff --git a/internal/namespaces/redis/v1/custom.go b/internal/namespaces/redis/v1/custom.go index 50c46b3ec7..9d4e79271e 100644 --- a/internal/namespaces/redis/v1/custom.go +++ b/internal/namespaces/redis/v1/custom.go @@ -21,6 +21,7 @@ func GetCommands() *core.Commands { cmds.MustFind("redis", "cluster", "migrate").Override(redisClusterMigrateBuilder) cmds.Merge(core.NewCommands(redisACLUpdateCommand())) + cmds.Merge(core.NewCommands(redisVersionSettingsCommand())) return cmds } diff --git a/internal/namespaces/redis/v1/custom_version_settings.go b/internal/namespaces/redis/v1/custom_version_settings.go new file mode 100644 index 0000000000..e00023c19e --- /dev/null +++ b/internal/namespaces/redis/v1/custom_version_settings.go @@ -0,0 +1,67 @@ +package redis + +import ( + "context" + "reflect" + + "github.com/scaleway/scaleway-cli/v2/core" + "github.com/scaleway/scaleway-sdk-go/api/redis/v1" + "github.com/scaleway/scaleway-sdk-go/scw" +) + +func redisVersionSettingsCommand() *core.Command { + type versionSettingsArgs struct { + Version string + Zone scw.Zone + } + + return &core.Command{ + Short: "List available settings from a Redis™ version", + Long: "List available settings from a Redis™ version.", + Namespace: "redis", + Resource: "version", + Verb: "settings", + ArgsType: reflect.TypeOf(versionSettingsArgs{}), + ArgSpecs: core.ArgSpecs{ + { + Name: "version", + Short: "Redis™ engine version", + Required: true, + }, + core.ZoneArgSpec( + scw.ZoneFrPar1, + scw.ZoneFrPar2, + scw.ZoneNlAms1, + scw.ZoneNlAms2, + scw.ZonePlWaw1, + scw.ZonePlWaw2, + ), + }, + Examples: []*core.Example{ + { + Short: "List settings for Redis™ 7.2.11", + ArgsJSON: `{"version": "7.2.11"}`, + }, + }, + Run: func(ctx context.Context, argsI any) (any, error) { + args := argsI.(*versionSettingsArgs) + api := redis.NewAPI(core.ExtractClient(ctx)) + + resp, err := api.ListClusterVersions(&redis.ListClusterVersionsRequest{ + Zone: args.Zone, + Version: &args.Version, + }) + if err != nil { + return nil, err + } + + for _, version := range resp.Versions { + if version.Version == args.Version { + return version.AvailableSettings, nil + } + } + + return []*redis.AvailableClusterSetting{}, nil + }, + } +} diff --git a/internal/namespaces/redis/v1/custom_version_settings_test.go b/internal/namespaces/redis/v1/custom_version_settings_test.go new file mode 100644 index 0000000000..fef3be8197 --- /dev/null +++ b/internal/namespaces/redis/v1/custom_version_settings_test.go @@ -0,0 +1,69 @@ +package redis + +import ( + "context" + "encoding/json" + "net/http" + "net/http/httptest" + "reflect" + "testing" + + "github.com/scaleway/scaleway-cli/v2/core" + redisSDK "github.com/scaleway/scaleway-sdk-go/api/redis/v1" + "github.com/scaleway/scaleway-sdk-go/scw" + "github.com/stretchr/testify/require" +) + +func TestRedisVersionSettingsCommand(t *testing.T) { + t.Parallel() + + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + require.Equal(t, "/redis/v1/zones/fr-par-1/cluster-versions", r.URL.Path) + q := r.URL.Query() + require.Equal(t, "7.2.11", q.Get("version")) + + w.Header().Set("Content-Type", "application/json") + err := json.NewEncoder(w).Encode(&redisSDK.ListClusterVersionsResponse{ + Versions: []*redisSDK.ClusterVersion{ + { + Version: "7.2.11", + AvailableSettings: []*redisSDK.AvailableClusterSetting{ + { + Name: "maxclients", + DefaultValue: scw.StringPtr("10000"), + Description: "Maximum number of connected clients", + }, + }, + Zone: scw.ZoneFrPar1, + }, + }, + }) + require.NoError(t, err) + })) + t.Cleanup(server.Close) + + client, err := scw.NewClient( + scw.WithAPIURL(server.URL), + scw.WithDefaultZone(scw.ZoneFrPar1), + ) + require.NoError(t, err) + + ctx := core.InjectMeta(context.Background(), &core.Meta{ + Client: client, + }) + + cmd := redisVersionSettingsCommand() + args := reflect.New(cmd.ArgsType).Interface() + argsValue := reflect.ValueOf(args).Elem() + argsValue.FieldByName("Version").SetString("7.2.11") + argsValue.FieldByName("Zone").Set(reflect.ValueOf(scw.ZoneFrPar1)) + + result, err := cmd.Run(ctx, args) + require.NoError(t, err) + + settings, ok := result.([]*redisSDK.AvailableClusterSetting) + require.True(t, ok) + require.Len(t, settings, 1) + require.Equal(t, "maxclients", settings[0].Name) + require.Equal(t, "10000", *settings[0].DefaultValue) +} From 5242c12c6947f14750ddd61a6907ac778924a724 Mon Sep 17 00:00:00 2001 From: Jonathan Remy Date: Wed, 26 Nov 2025 11:59:04 +0100 Subject: [PATCH 02/11] fix(redis): add usage goldens --- ...-usage-redis-version-settings-usage.golden | 23 +++++++++++++++++++ .../test-all-usage-redis-version-usage.golden | 1 + 2 files changed, 24 insertions(+) create mode 100644 cmd/scw/testdata/test-all-usage-redis-version-settings-usage.golden diff --git a/cmd/scw/testdata/test-all-usage-redis-version-settings-usage.golden b/cmd/scw/testdata/test-all-usage-redis-version-settings-usage.golden new file mode 100644 index 0000000000..b35dd9b0af --- /dev/null +++ b/cmd/scw/testdata/test-all-usage-redis-version-settings-usage.golden @@ -0,0 +1,23 @@ +🎲🎲🎲 EXIT CODE: 0 🎲🎲🎲 +🟥🟥🟥 STDERR️️ 🟥🟥🟥️ +List available settings from a Redis™ version. + +USAGE: + scw redis version settings [arg=value ...] + +EXAMPLES: + List settings for Redis™ 7.2.11 + scw redis version settings version=7.2.11 + +ARGS: + version Redis™ engine version + [zone=fr-par-1] Zone to target. If none is passed will use default zone from the config (fr-par-1 | fr-par-2 | nl-ams-1 | nl-ams-2 | pl-waw-1 | pl-waw-2) + +FLAGS: + -h, --help help for settings + +GLOBAL FLAGS: + -c, --config string The path to the config file + -D, --debug Enable debug mode + -o, --output string Output format: json or human, see 'scw help output' for more info (default "human") + -p, --profile string The config profile to use diff --git a/cmd/scw/testdata/test-all-usage-redis-version-usage.golden b/cmd/scw/testdata/test-all-usage-redis-version-usage.golden index 8bf12a68d7..97c67359bf 100644 --- a/cmd/scw/testdata/test-all-usage-redis-version-usage.golden +++ b/cmd/scw/testdata/test-all-usage-redis-version-usage.golden @@ -7,6 +7,7 @@ USAGE: AVAILABLE COMMANDS: list List available Redis™ versions + settings List available settings from a Redis™ version FLAGS: -h, --help help for version From 100784bd2fd1aecbe212809a8e69873381531760 Mon Sep 17 00:00:00 2001 From: Jonathan Remy Date: Wed, 26 Nov 2025 15:35:04 +0100 Subject: [PATCH 03/11] test(redis): cover version settings command --- .../redis/v1/custom_version_settings_test.go | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/internal/namespaces/redis/v1/custom_version_settings_test.go b/internal/namespaces/redis/v1/custom_version_settings_test.go index fef3be8197..0a925c7656 100644 --- a/internal/namespaces/redis/v1/custom_version_settings_test.go +++ b/internal/namespaces/redis/v1/custom_version_settings_test.go @@ -1,4 +1,4 @@ -package redis +package redis_test import ( "context" @@ -9,8 +9,10 @@ import ( "testing" "github.com/scaleway/scaleway-cli/v2/core" + redis "github.com/scaleway/scaleway-cli/v2/internal/namespaces/redis/v1" redisSDK "github.com/scaleway/scaleway-sdk-go/api/redis/v1" "github.com/scaleway/scaleway-sdk-go/scw" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -18,9 +20,9 @@ func TestRedisVersionSettingsCommand(t *testing.T) { t.Parallel() server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - require.Equal(t, "/redis/v1/zones/fr-par-1/cluster-versions", r.URL.Path) + assert.Equal(t, "/redis/v1/zones/fr-par-1/cluster-versions", r.URL.Path) q := r.URL.Query() - require.Equal(t, "7.2.11", q.Get("version")) + assert.Equal(t, "7.2.11", q.Get("version")) w.Header().Set("Content-Type", "application/json") err := json.NewEncoder(w).Encode(&redisSDK.ListClusterVersionsResponse{ @@ -38,7 +40,9 @@ func TestRedisVersionSettingsCommand(t *testing.T) { }, }, }) - require.NoError(t, err) + if err != nil { + t.Fatalf("failed to encode response: %v", err) + } })) t.Cleanup(server.Close) @@ -52,7 +56,9 @@ func TestRedisVersionSettingsCommand(t *testing.T) { Client: client, }) - cmd := redisVersionSettingsCommand() + cmds := redis.GetCommands() + cmd := cmds.MustFind("redis", "version", "settings") + args := reflect.New(cmd.ArgsType).Interface() argsValue := reflect.ValueOf(args).Elem() argsValue.FieldByName("Version").SetString("7.2.11") From 0e215e6185908bd9d1daf77fa7caf63b8e5d3cd3 Mon Sep 17 00:00:00 2001 From: Jonathan Remy Date: Wed, 26 Nov 2025 15:47:30 +0100 Subject: [PATCH 04/11] docs(redis): document version settings command --- docs/commands/redis.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/docs/commands/redis.md b/docs/commands/redis.md index 04089b60bc..3d856c580c 100644 --- a/docs/commands/redis.md +++ b/docs/commands/redis.md @@ -33,6 +33,7 @@ This API allows you to manage your Managed Databases for Redis™. - [Set advanced settings](#set-advanced-settings) - [Redis™ version management commands](#redis™-version-management-commands) - [List available Redis™ versions](#list-available-redis™-versions) + - [List available settings from a Redis™ version](#list-available-settings-from-a-redis™-version) ## Access Control List (ACL) management commands @@ -629,9 +630,9 @@ scw redis version list [arg=value ...] -### List settings for a Redis™ version +### List available settings from a Redis™ version -List the available advanced settings for a specific Redis™ engine version. +List available settings from a Redis™ version. **Usage:** @@ -648,4 +649,9 @@ scw redis version settings [arg=value ...] | zone | Default: `fr-par-1`
One of: `fr-par-1`, `fr-par-2`, `nl-ams-1`, `nl-ams-2`, `pl-waw-1`, `pl-waw-2` | Zone to target. If none is passed will use default zone from the config | +**Examples:** +List settings for Redis™ 7.2.11 +``` +scw redis version settings version=7.2.11 +``` From aca4b82c8ed348146f514a8698ef59a6687bda3a Mon Sep 17 00:00:00 2001 From: Jonathan Remy Date: Wed, 26 Nov 2025 15:58:18 +0100 Subject: [PATCH 05/11] docs(redis): normalize version settings examples --- docs/commands/redis.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/commands/redis.md b/docs/commands/redis.md index 3d856c580c..26374c2a92 100644 --- a/docs/commands/redis.md +++ b/docs/commands/redis.md @@ -650,7 +650,6 @@ scw redis version settings [arg=value ...] **Examples:** - List settings for Redis™ 7.2.11 ``` scw redis version settings version=7.2.11 From cd3b8749933284b930d8e4ec9c14381b63d96e40 Mon Sep 17 00:00:00 2001 From: Jonathan Remy Date: Thu, 27 Nov 2025 06:04:40 +0100 Subject: [PATCH 06/11] docs(redis): fix examples whitespace format --- docs/commands/redis.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/commands/redis.md b/docs/commands/redis.md index 26374c2a92..f5f987b1f0 100644 --- a/docs/commands/redis.md +++ b/docs/commands/redis.md @@ -650,7 +650,12 @@ scw redis version settings [arg=value ...] **Examples:** + + List settings for Redis™ 7.2.11 ``` scw redis version settings version=7.2.11 ``` + + + From b7ec55b0f04081112e2d8ef0d24a22b380cea035 Mon Sep 17 00:00:00 2001 From: Jonathan Remy Date: Thu, 27 Nov 2025 06:39:19 +0100 Subject: [PATCH 07/11] docs(redis): fix trailing whitespace --- docs/commands/redis.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/commands/redis.md b/docs/commands/redis.md index f5f987b1f0..43c780d98b 100644 --- a/docs/commands/redis.md +++ b/docs/commands/redis.md @@ -658,4 +658,3 @@ scw redis version settings version=7.2.11 ``` - From 3ac7f39e45b937e6f921877ad40b1b6b5acc2649 Mon Sep 17 00:00:00 2001 From: Jonathan Remy Date: Thu, 27 Nov 2025 15:17:23 +0100 Subject: [PATCH 08/11] docs(redis): fix trailing newlines --- docs/commands/redis.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/commands/redis.md b/docs/commands/redis.md index 43c780d98b..6dd85e8c45 100644 --- a/docs/commands/redis.md +++ b/docs/commands/redis.md @@ -658,3 +658,5 @@ scw redis version settings version=7.2.11 ``` + + From 00c3ce65684702cb45ab8d7c50e3ea25184e6790 Mon Sep 17 00:00:00 2001 From: Jonathan Remy Date: Thu, 27 Nov 2025 16:57:48 +0100 Subject: [PATCH 09/11] fix(redis): change verb to list-settings and remove mock from test --- ...-redis-version-list-settings-usage.golden} | 6 +- .../test-all-usage-redis-version-usage.golden | 4 +- docs/commands/redis.md | 4 +- .../redis/v1/custom_version_settings.go | 3 +- .../redis/v1/custom_version_settings_test.go | 79 ++++------------ ...t-settings-for-redis-version.cassette.yaml | 81 ++++++++++++++++ ...and-list-settings-for-redis-version.golden | 94 +++++++++++++++++++ 7 files changed, 202 insertions(+), 69 deletions(-) rename cmd/scw/testdata/{test-all-usage-redis-version-settings-usage.golden => test-all-usage-redis-version-list-settings-usage.golden} (82%) create mode 100644 internal/namespaces/redis/v1/testdata/test-redis-version-settings-command-list-settings-for-redis-version.cassette.yaml create mode 100644 internal/namespaces/redis/v1/testdata/test-redis-version-settings-command-list-settings-for-redis-version.golden diff --git a/cmd/scw/testdata/test-all-usage-redis-version-settings-usage.golden b/cmd/scw/testdata/test-all-usage-redis-version-list-settings-usage.golden similarity index 82% rename from cmd/scw/testdata/test-all-usage-redis-version-settings-usage.golden rename to cmd/scw/testdata/test-all-usage-redis-version-list-settings-usage.golden index b35dd9b0af..52752e6146 100644 --- a/cmd/scw/testdata/test-all-usage-redis-version-settings-usage.golden +++ b/cmd/scw/testdata/test-all-usage-redis-version-list-settings-usage.golden @@ -3,18 +3,18 @@ List available settings from a Redis™ version. USAGE: - scw redis version settings [arg=value ...] + scw redis version list-settings [arg=value ...] EXAMPLES: List settings for Redis™ 7.2.11 - scw redis version settings version=7.2.11 + scw redis version list-settings version=7.2.11 ARGS: version Redis™ engine version [zone=fr-par-1] Zone to target. If none is passed will use default zone from the config (fr-par-1 | fr-par-2 | nl-ams-1 | nl-ams-2 | pl-waw-1 | pl-waw-2) FLAGS: - -h, --help help for settings + -h, --help help for list-settings GLOBAL FLAGS: -c, --config string The path to the config file diff --git a/cmd/scw/testdata/test-all-usage-redis-version-usage.golden b/cmd/scw/testdata/test-all-usage-redis-version-usage.golden index 97c67359bf..6c8d3c6e37 100644 --- a/cmd/scw/testdata/test-all-usage-redis-version-usage.golden +++ b/cmd/scw/testdata/test-all-usage-redis-version-usage.golden @@ -6,8 +6,8 @@ USAGE: scw redis version AVAILABLE COMMANDS: - list List available Redis™ versions - settings List available settings from a Redis™ version + list List available Redis™ versions + list-settings List available settings from a Redis™ version FLAGS: -h, --help help for version diff --git a/docs/commands/redis.md b/docs/commands/redis.md index 6dd85e8c45..24f03c771c 100644 --- a/docs/commands/redis.md +++ b/docs/commands/redis.md @@ -637,7 +637,7 @@ List available settings from a Redis™ version. **Usage:** ``` -scw redis version settings [arg=value ...] +scw redis version list-settings [arg=value ...] ``` @@ -654,7 +654,7 @@ scw redis version settings [arg=value ...] List settings for Redis™ 7.2.11 ``` -scw redis version settings version=7.2.11 +scw redis version list-settings version=7.2.11 ``` diff --git a/internal/namespaces/redis/v1/custom_version_settings.go b/internal/namespaces/redis/v1/custom_version_settings.go index e00023c19e..61294975ff 100644 --- a/internal/namespaces/redis/v1/custom_version_settings.go +++ b/internal/namespaces/redis/v1/custom_version_settings.go @@ -20,7 +20,7 @@ func redisVersionSettingsCommand() *core.Command { Long: "List available settings from a Redis™ version.", Namespace: "redis", Resource: "version", - Verb: "settings", + Verb: "list-settings", ArgsType: reflect.TypeOf(versionSettingsArgs{}), ArgSpecs: core.ArgSpecs{ { @@ -65,3 +65,4 @@ func redisVersionSettingsCommand() *core.Command { }, } } + diff --git a/internal/namespaces/redis/v1/custom_version_settings_test.go b/internal/namespaces/redis/v1/custom_version_settings_test.go index 0a925c7656..31e3e75882 100644 --- a/internal/namespaces/redis/v1/custom_version_settings_test.go +++ b/internal/namespaces/redis/v1/custom_version_settings_test.go @@ -1,75 +1,32 @@ package redis_test import ( - "context" - "encoding/json" - "net/http" - "net/http/httptest" - "reflect" "testing" "github.com/scaleway/scaleway-cli/v2/core" - redis "github.com/scaleway/scaleway-cli/v2/internal/namespaces/redis/v1" + "github.com/scaleway/scaleway-cli/v2/internal/namespaces/redis/v1" redisSDK "github.com/scaleway/scaleway-sdk-go/api/redis/v1" - "github.com/scaleway/scaleway-sdk-go/scw" "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" ) func TestRedisVersionSettingsCommand(t *testing.T) { - t.Parallel() - - server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - assert.Equal(t, "/redis/v1/zones/fr-par-1/cluster-versions", r.URL.Path) - q := r.URL.Query() - assert.Equal(t, "7.2.11", q.Get("version")) - - w.Header().Set("Content-Type", "application/json") - err := json.NewEncoder(w).Encode(&redisSDK.ListClusterVersionsResponse{ - Versions: []*redisSDK.ClusterVersion{ - { - Version: "7.2.11", - AvailableSettings: []*redisSDK.AvailableClusterSetting{ - { - Name: "maxclients", - DefaultValue: scw.StringPtr("10000"), - Description: "Maximum number of connected clients", - }, - }, - Zone: scw.ZoneFrPar1, - }, + t.Run("List settings for Redis version", core.Test(&core.TestConfig{ + Commands: redis.GetCommands(), + Cmd: "scw redis version list-settings version=7.2.11", + Check: core.TestCheckCombine( + core.TestCheckExitCode(0), + core.TestCheckGolden(), + func(t *testing.T, ctx *core.CheckFuncCtx) { + t.Helper() + if ctx.Result != nil { + settings := ctx.Result.([]*redisSDK.AvailableClusterSetting) + assert.NotEmpty(t, settings, "should return at least one setting") + // Verify that settings have the expected structure + for _, setting := range settings { + assert.NotEmpty(t, setting.Name, "setting should have a name") + } + } }, - }) - if err != nil { - t.Fatalf("failed to encode response: %v", err) - } + ), })) - t.Cleanup(server.Close) - - client, err := scw.NewClient( - scw.WithAPIURL(server.URL), - scw.WithDefaultZone(scw.ZoneFrPar1), - ) - require.NoError(t, err) - - ctx := core.InjectMeta(context.Background(), &core.Meta{ - Client: client, - }) - - cmds := redis.GetCommands() - cmd := cmds.MustFind("redis", "version", "settings") - - args := reflect.New(cmd.ArgsType).Interface() - argsValue := reflect.ValueOf(args).Elem() - argsValue.FieldByName("Version").SetString("7.2.11") - argsValue.FieldByName("Zone").Set(reflect.ValueOf(scw.ZoneFrPar1)) - - result, err := cmd.Run(ctx, args) - require.NoError(t, err) - - settings, ok := result.([]*redisSDK.AvailableClusterSetting) - require.True(t, ok) - require.Len(t, settings, 1) - require.Equal(t, "maxclients", settings[0].Name) - require.Equal(t, "10000", *settings[0].DefaultValue) } diff --git a/internal/namespaces/redis/v1/testdata/test-redis-version-settings-command-list-settings-for-redis-version.cassette.yaml b/internal/namespaces/redis/v1/testdata/test-redis-version-settings-command-list-settings-for-redis-version.cassette.yaml new file mode 100644 index 0000000000..cd6cc25e5c --- /dev/null +++ b/internal/namespaces/redis/v1/testdata/test-redis-version-settings-command-list-settings-for-redis-version.cassette.yaml @@ -0,0 +1,81 @@ +--- +version: 1 +interactions: +- request: + body: '{"total_count":1, "versions":[{"version":"7.2.11", "end_of_life_at":"2026-02-28T00:00:00Z", + "available_settings":[{"name":"tcp-keepalive", "default_value":"300", "type":"INT", + "description":"The specified value (in seconds) is the period used to send ACKs.", + "max_value":65536, "min_value":null, "regex":null, "deprecated":false}, {"name":"maxclients", + "default_value":"10000", "type":"INT", "description":"Set the max number of + connected clients at the same time.", "max_value":65536, "min_value":100, "regex":null, + "deprecated":false}, {"name":"maxmemory-policy", "default_value":"noeviction", + "type":"STRING", "description":"How Redis will select what to remove when maxmemory + is reached: https://redis.io/topics/lru-cache.", "max_value":null, "min_value":null, + "regex":"volatile-lru|allkeys-lru|volatile-lfu|allkeys-lfu|volatile-random|allkeys-random|volatile-ttl|noeviction", + "deprecated":false}, {"name":"databases", "default_value":"16", "type":"INT", + "description":"Set number of Redis databases", "max_value":128, "min_value":1, + "regex":null, "deprecated":false}, {"name":"notify-keyspace-events", "default_value":"\"\"", + "type":"STRING", "description":"Configure the keyspace event notification feature", + "max_value":null, "min_value":null, "regex":"^(?:([KEg$lshzxetdnm])(?!.*\\1))+$", + "deprecated":false}, {"name":"disable-save", "default_value":"false", "type":"BOOLEAN", + "description":"Disable Redis rdb persistence file on disk", "max_value":null, + "min_value":null, "regex":null, "deprecated":false}, {"name":"slowlog-log-slower-than", + "default_value":"10000", "type":"INT", "description":"Log queries that exceed + this duration in microseconds (set to -1 to disable)", "max_value":100000000, + "min_value":-1, "regex":null, "deprecated":false}, {"name":"slowlog-max-len", + "default_value":"128", "type":"INT", "description":"Maximum length of the slow + log", "max_value":10000, "min_value":1, "regex":null, "deprecated":false}], + "logo_url":"https://s3.fr-par.scw.cloud/scw-rkv-logos/logo.svg", "zone":"fr-par-1"}]}' + form: {} + headers: + User-Agent: + - scaleway-sdk-go/v1.0.0-beta.7+dev (go1.25.3; darwin; amd64) cli-e2e-test + url: https://api.scaleway.com/redis/v1/zones/fr-par-1/cluster-versions?include_beta=false&include_deprecated=false&include_disabled=false&version=7.2.11 + method: GET + response: + body: '{"total_count":1, "versions":[{"version":"7.2.11", "end_of_life_at":"2026-02-28T00:00:00Z", + "available_settings":[{"name":"tcp-keepalive", "default_value":"300", "type":"INT", + "description":"The specified value (in seconds) is the period used to send ACKs.", + "max_value":65536, "min_value":null, "regex":null, "deprecated":false}, {"name":"maxclients", + "default_value":"10000", "type":"INT", "description":"Set the max number of + connected clients at the same time.", "max_value":65536, "min_value":100, "regex":null, + "deprecated":false}, {"name":"maxmemory-policy", "default_value":"noeviction", + "type":"STRING", "description":"How Redis will select what to remove when maxmemory + is reached: https://redis.io/topics/lru-cache.", "max_value":null, "min_value":null, + "regex":"volatile-lru|allkeys-lru|volatile-lfu|allkeys-lfu|volatile-random|allkeys-random|volatile-ttl|noeviction", + "deprecated":false}, {"name":"databases", "default_value":"16", "type":"INT", + "description":"Set number of Redis databases", "max_value":128, "min_value":1, + "regex":null, "deprecated":false}, {"name":"notify-keyspace-events", "default_value":"\"\"", + "type":"STRING", "description":"Configure the keyspace event notification feature", + "max_value":null, "min_value":null, "regex":"^(?:([KEg$lshzxetdnm])(?!.*\\1))+$", + "deprecated":false}, {"name":"disable-save", "default_value":"false", "type":"BOOLEAN", + "description":"Disable Redis rdb persistence file on disk", "max_value":null, + "min_value":null, "regex":null, "deprecated":false}, {"name":"slowlog-log-slower-than", + "default_value":"10000", "type":"INT", "description":"Log queries that exceed + this duration in microseconds (set to -1 to disable)", "max_value":100000000, + "min_value":-1, "regex":null, "deprecated":false}, {"name":"slowlog-max-len", + "default_value":"128", "type":"INT", "description":"Maximum length of the slow + log", "max_value":10000, "min_value":1, "regex":null, "deprecated":false}], + "logo_url":"https://s3.fr-par.scw.cloud/scw-rkv-logos/logo.svg", "zone":"fr-par-1"}]}' + headers: + Content-Length: + - "2025" + Content-Security-Policy: + - default-src 'none'; frame-ancestors 'none' + Content-Type: + - application/json + Date: + - Thu, 27 Nov 2025 15:34:55 GMT + Server: + - Scaleway API Gateway (fr-par-2;edge02) + Strict-Transport-Security: + - max-age=63072000 + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - DENY + X-Request-Id: + - e2b94d11-4e80-4a3a-910f-1d4abd26d3f5 + status: 200 OK + code: 200 + duration: "" diff --git a/internal/namespaces/redis/v1/testdata/test-redis-version-settings-command-list-settings-for-redis-version.golden b/internal/namespaces/redis/v1/testdata/test-redis-version-settings-command-list-settings-for-redis-version.golden new file mode 100644 index 0000000000..e76f00ce9a --- /dev/null +++ b/internal/namespaces/redis/v1/testdata/test-redis-version-settings-command-list-settings-for-redis-version.golden @@ -0,0 +1,94 @@ +🎲🎲🎲 EXIT CODE: 0 🎲🎲🎲 +🟩🟩🟩 STDOUT️ 🟩🟩🟩️ +NAME DEFAULT VALUE TYPE DESCRIPTION MAX VALUE MIN VALUE REGEX DEPRECATED +tcp-keepalive 300 INT The specified value (in seconds) is the period used to send ACKs. 65536 - - false +maxclients 10000 INT Set the max number of connected clients at the same time. 65536 100 - false +maxmemory-policy noeviction STRING How Redis will select what to remove when maxmemory is reached: https://redis.io/topics/lru-cache. - - volatile-lru|allkeys-lru|volatile-lfu|allkeys-lfu|volatile-random|allkeys-random|volatile-ttl|noeviction false +databases 16 INT Set number of Redis databases 128 1 - false +notify-keyspace-events "" STRING Configure the keyspace event notification feature - - ^(?:([KEg$lshzxetdnm])(?!.*\1))+$ false +disable-save false BOOLEAN Disable Redis rdb persistence file on disk - - - false +slowlog-log-slower-than 10000 INT Log queries that exceed this duration in microseconds (set to -1 to disable) 100000000 -1 - false +slowlog-max-len 128 INT Maximum length of the slow log 10000 1 - false +🟩🟩🟩 JSON STDOUT 🟩🟩🟩 +[ + { + "name": "tcp-keepalive", + "default_value": "300", + "type": "INT", + "description": "The specified value (in seconds) is the period used to send ACKs.", + "max_value": 65536, + "min_value": null, + "regex": null, + "deprecated": false + }, + { + "name": "maxclients", + "default_value": "10000", + "type": "INT", + "description": "Set the max number of connected clients at the same time.", + "max_value": 65536, + "min_value": 100, + "regex": null, + "deprecated": false + }, + { + "name": "maxmemory-policy", + "default_value": "noeviction", + "type": "STRING", + "description": "How Redis will select what to remove when maxmemory is reached: https://redis.io/topics/lru-cache.", + "max_value": null, + "min_value": null, + "regex": "volatile-lru|allkeys-lru|volatile-lfu|allkeys-lfu|volatile-random|allkeys-random|volatile-ttl|noeviction", + "deprecated": false + }, + { + "name": "databases", + "default_value": "16", + "type": "INT", + "description": "Set number of Redis databases", + "max_value": 128, + "min_value": 1, + "regex": null, + "deprecated": false + }, + { + "name": "notify-keyspace-events", + "default_value": "\"\"", + "type": "STRING", + "description": "Configure the keyspace event notification feature", + "max_value": null, + "min_value": null, + "regex": "^(?:([KEg$lshzxetdnm])(?!.*\\1))+$", + "deprecated": false + }, + { + "name": "disable-save", + "default_value": "false", + "type": "BOOLEAN", + "description": "Disable Redis rdb persistence file on disk", + "max_value": null, + "min_value": null, + "regex": null, + "deprecated": false + }, + { + "name": "slowlog-log-slower-than", + "default_value": "10000", + "type": "INT", + "description": "Log queries that exceed this duration in microseconds (set to -1 to disable)", + "max_value": 100000000, + "min_value": -1, + "regex": null, + "deprecated": false + }, + { + "name": "slowlog-max-len", + "default_value": "128", + "type": "INT", + "description": "Maximum length of the slow log", + "max_value": 10000, + "min_value": 1, + "regex": null, + "deprecated": false + } +] From 7deaab9f9cb5bf8078c0471efaf65e72251f81f6 Mon Sep 17 00:00:00 2001 From: Jonathan Remy Date: Fri, 28 Nov 2025 06:48:01 +0100 Subject: [PATCH 10/11] fix(redis): fix gci formatting --- internal/namespaces/redis/v1/custom_version_settings.go | 1 - 1 file changed, 1 deletion(-) diff --git a/internal/namespaces/redis/v1/custom_version_settings.go b/internal/namespaces/redis/v1/custom_version_settings.go index 61294975ff..730b480f3f 100644 --- a/internal/namespaces/redis/v1/custom_version_settings.go +++ b/internal/namespaces/redis/v1/custom_version_settings.go @@ -65,4 +65,3 @@ func redisVersionSettingsCommand() *core.Command { }, } } - From 86f2d8c30c713f4a964b8431a161156c9aac4e3f Mon Sep 17 00:00:00 2001 From: Jonathan Remy Date: Fri, 28 Nov 2025 07:20:39 +0100 Subject: [PATCH 11/11] fix(redis): update golden file alignment --- cmd/scw/testdata/test-all-usage-redis-version-usage.golden | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/scw/testdata/test-all-usage-redis-version-usage.golden b/cmd/scw/testdata/test-all-usage-redis-version-usage.golden index 6c8d3c6e37..c17299d013 100644 --- a/cmd/scw/testdata/test-all-usage-redis-version-usage.golden +++ b/cmd/scw/testdata/test-all-usage-redis-version-usage.golden @@ -6,8 +6,8 @@ USAGE: scw redis version AVAILABLE COMMANDS: - list List available Redis™ versions - list-settings List available settings from a Redis™ version + list List available Redis™ versions + list-settings List available settings from a Redis™ version FLAGS: -h, --help help for version