Skip to content

Commit

Permalink
feat(rdb) : add autocompletion for node-type in migrate cluster (#3702)
Browse files Browse the repository at this point in the history
  • Loading branch information
jremy42 authored Mar 7, 2024
1 parent 924cbb6 commit f7fa405
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 0 deletions.
1 change: 1 addition & 0 deletions internal/namespaces/redis/v1/custom.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ func GetCommands() *core.Commands {
cmds.MustFind("redis", "cluster", "create").Override(clusterCreateBuilder)
cmds.MustFind("redis", "cluster", "delete").Override(clusterDeleteBuilder)
cmds.MustFind("redis", "acl", "add").Override(ACLAddListBuilder)
cmds.MustFind("redis", "cluster", "migrate").Override(redisClusterMigrateBuilder)

return cmds
}
32 changes: 32 additions & 0 deletions internal/namespaces/redis/v1/custom_cluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"log"
"net/http"
"reflect"
"strings"
"time"

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

const redisActionTimeout = 15 * time.Minute

func redisClusterMigrateBuilder(c *core.Command) *core.Command {
c.ArgSpecs.GetByName("node-type").AutoCompleteFunc = autoCompleteNodeType
return c
}

func clusterCreateBuilder(c *core.Command) *core.Command {
type redisEndpointSpecPrivateNetworkSpecCustom struct {
*redis.EndpointSpecPrivateNetworkSpec
Expand Down Expand Up @@ -204,3 +210,29 @@ func redisClusterGetMarshalerFunc(i interface{}, opt *human.MarshalOpt) (string,

return str, nil
}

var completeRedisNoteTypeCache *redis.ListNodeTypesResponse

func autoCompleteNodeType(ctx context.Context, prefix string, request any) core.AutocompleteSuggestions {
suggestions := core.AutocompleteSuggestions(nil)
req := request.(*redis.MigrateClusterRequest)
client := core.ExtractClient(ctx)
api := redis.NewAPI(client)
if req.Zone != "" {
if completeRedisNoteTypeCache == nil {
res, err := api.ListNodeTypes(&redis.ListNodeTypesRequest{
Zone: req.Zone,
})
if err != nil {
return nil
}
completeRedisNoteTypeCache = res
}
for _, nodeType := range completeRedisNoteTypeCache.NodeTypes {
if strings.HasPrefix(nodeType.Name, prefix) {
suggestions = append(suggestions, nodeType.Name)
}
}
}
return suggestions
}

0 comments on commit f7fa405

Please sign in to comment.