diff --git a/cmd/create/createNode.go b/cmd/create/createNode.go index cb5d81b6..2dd641a4 100644 --- a/cmd/create/createNode.go +++ b/cmd/create/createNode.go @@ -58,6 +58,9 @@ func NewCmdCreateNode() *cobra.Command { // add flags cmd.Flags().Int("replicas", 1, "Number of replicas of this node specification.") cmd.Flags().String("role", string(k3d.WorkerRole), "Specify node role [master, worker]") + if err := cmd.RegisterFlagCompletionFunc("role", util.ValidArgsNodeRoles); err != nil { + log.Fatalln("Failed to register flag completion for '--role'", err) + } cmd.Flags().StringP("cluster", "c", k3d.DefaultClusterName, "Select the cluster that the node shall connect to.") if err := cmd.MarkFlagRequired("cluster"); err != nil { log.Fatalln("Failed to mark required flag '--cluster'") diff --git a/cmd/util/completion.go b/cmd/util/completion.go index dcf3ecab..ae13f447 100644 --- a/cmd/util/completion.go +++ b/cmd/util/completion.go @@ -81,3 +81,17 @@ nodeLoop: } return completions, cobra.ShellCompDirectiveDefault } + +// ValidArgsNodeRoles is used for shell completion: proposes the list of possible node roles +func ValidArgsNodeRoles(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { + + var completions []string + roles := []string{string(k3d.MasterRole), string(k3d.WorkerRole)} + + for _, role := range roles { + if strings.HasPrefix(role, toComplete) { + completions = append(completions, role) + } + } + return completions, cobra.ShellCompDirectiveDefault +}