Skip to content

Commit f7fa405

Browse files
authored
feat(rdb) : add autocompletion for node-type in migrate cluster (#3702)
1 parent 924cbb6 commit f7fa405

File tree

2 files changed

+33
-0
lines changed

2 files changed

+33
-0
lines changed

internal/namespaces/redis/v1/custom.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ func GetCommands() *core.Commands {
1616
cmds.MustFind("redis", "cluster", "create").Override(clusterCreateBuilder)
1717
cmds.MustFind("redis", "cluster", "delete").Override(clusterDeleteBuilder)
1818
cmds.MustFind("redis", "acl", "add").Override(ACLAddListBuilder)
19+
cmds.MustFind("redis", "cluster", "migrate").Override(redisClusterMigrateBuilder)
1920

2021
return cmds
2122
}

internal/namespaces/redis/v1/custom_cluster.go

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"log"
77
"net/http"
88
"reflect"
9+
"strings"
910
"time"
1011

1112
"github.com/scaleway/scaleway-cli/v2/internal/core"
@@ -16,6 +17,11 @@ import (
1617

1718
const redisActionTimeout = 15 * time.Minute
1819

20+
func redisClusterMigrateBuilder(c *core.Command) *core.Command {
21+
c.ArgSpecs.GetByName("node-type").AutoCompleteFunc = autoCompleteNodeType
22+
return c
23+
}
24+
1925
func clusterCreateBuilder(c *core.Command) *core.Command {
2026
type redisEndpointSpecPrivateNetworkSpecCustom struct {
2127
*redis.EndpointSpecPrivateNetworkSpec
@@ -204,3 +210,29 @@ func redisClusterGetMarshalerFunc(i interface{}, opt *human.MarshalOpt) (string,
204210

205211
return str, nil
206212
}
213+
214+
var completeRedisNoteTypeCache *redis.ListNodeTypesResponse
215+
216+
func autoCompleteNodeType(ctx context.Context, prefix string, request any) core.AutocompleteSuggestions {
217+
suggestions := core.AutocompleteSuggestions(nil)
218+
req := request.(*redis.MigrateClusterRequest)
219+
client := core.ExtractClient(ctx)
220+
api := redis.NewAPI(client)
221+
if req.Zone != "" {
222+
if completeRedisNoteTypeCache == nil {
223+
res, err := api.ListNodeTypes(&redis.ListNodeTypesRequest{
224+
Zone: req.Zone,
225+
})
226+
if err != nil {
227+
return nil
228+
}
229+
completeRedisNoteTypeCache = res
230+
}
231+
for _, nodeType := range completeRedisNoteTypeCache.NodeTypes {
232+
if strings.HasPrefix(nodeType.Name, prefix) {
233+
suggestions = append(suggestions, nodeType.Name)
234+
}
235+
}
236+
}
237+
return suggestions
238+
}

0 commit comments

Comments
 (0)