From d863461168c8e5452cc4101e5744660e31660882 Mon Sep 17 00:00:00 2001 From: pauhull Date: Tue, 12 Dec 2023 12:15:51 +0100 Subject: [PATCH] Add auto completion suggestions --- internal/cmd/server/list.go | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/internal/cmd/server/list.go b/internal/cmd/server/list.go index 29644212..f040978f 100644 --- a/internal/cmd/server/list.go +++ b/internal/cmd/server/list.go @@ -3,6 +3,7 @@ package server import ( "context" "fmt" + "slices" "strconv" "strings" "time" @@ -12,6 +13,7 @@ import ( "github.com/spf13/pflag" "github.com/hetznercloud/cli/internal/cmd/base" + "github.com/hetznercloud/cli/internal/cmd/cmpl" "github.com/hetznercloud/cli/internal/cmd/output" "github.com/hetznercloud/cli/internal/cmd/util" "github.com/hetznercloud/cli/internal/hcapi2" @@ -19,6 +21,18 @@ import ( "github.com/hetznercloud/hcloud-go/v2/hcloud/schema" ) +var serverStatusStrings = []string{ + string(hcloud.ServerStatusInitializing), + string(hcloud.ServerStatusOff), + string(hcloud.ServerStatusRunning), + string(hcloud.ServerStatusStarting), + string(hcloud.ServerStatusStopping), + string(hcloud.ServerStatusMigrating), + string(hcloud.ServerStatusRebuilding), + string(hcloud.ServerStatusDeleting), + string(hcloud.ServerStatusUnknown), +} + var ListCmd = base.ListCmd{ ResourceNamePlural: "Servers", JSONKeyGetByName: "servers", @@ -27,6 +41,7 @@ var ListCmd = base.ListCmd{ AdditionalFlags: func(cmd *cobra.Command) { cmd.Flags().StringSlice("status", nil, "Only servers with one of these statuses are displayed") + _ = cmd.RegisterFlagCompletionFunc("status", cmpl.SuggestCandidates(serverStatusStrings...)) }, Fetch: func(ctx context.Context, client hcapi2.Client, flags *pflag.FlagSet, listOpts hcloud.ListOpts, sorts []string) ([]interface{}, error) { @@ -38,18 +53,9 @@ var ListCmd = base.ListCmd{ } if len(statuses) > 0 { for _, status := range statuses { - switch status { - case string(hcloud.ServerStatusInitializing), - string(hcloud.ServerStatusOff), - string(hcloud.ServerStatusRunning), - string(hcloud.ServerStatusStarting), - string(hcloud.ServerStatusStopping), - string(hcloud.ServerStatusMigrating), - string(hcloud.ServerStatusRebuilding), - string(hcloud.ServerStatusDeleting), - string(hcloud.ServerStatusUnknown): + if slices.Contains(serverStatusStrings, status) { opts.Status = append(opts.Status, hcloud.ServerStatus(status)) - default: + } else { return nil, fmt.Errorf("invalid status: %s", status) } }