Skip to content

Commit 145d05f

Browse files
feat(completion): dynamic completion for suitable flags (#702)
1 parent a969d86 commit 145d05f

3 files changed

Lines changed: 33 additions & 1 deletion

File tree

pkg/cmd/kafka/consumergroup/list/list.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"github.com/redhat-developer/app-services-cli/internal/config"
1212
"github.com/redhat-developer/app-services-cli/pkg/cmd/factory"
1313
"github.com/redhat-developer/app-services-cli/pkg/cmd/flag"
14+
"github.com/redhat-developer/app-services-cli/pkg/cmdutil"
1415
flagutil "github.com/redhat-developer/app-services-cli/pkg/cmdutil/flags"
1516
"github.com/redhat-developer/app-services-cli/pkg/connection"
1617
"github.com/redhat-developer/app-services-cli/pkg/dump"
@@ -81,6 +82,10 @@ func NewListConsumerGroupCommand(f *factory.Factory) *cobra.Command {
8182
cmd.Flags().StringVarP(&opts.output, "output", "o", "", opts.localizer.MustLocalize("kafka.consumerGroup.list.flag.output.description"))
8283
cmd.Flags().StringVar(&opts.topic, "topic", "", opts.localizer.MustLocalize("kafka.consumerGroup.list.flag.topic.description"))
8384

85+
_ = cmd.RegisterFlagCompletionFunc("topic", func(cmd *cobra.Command, _ []string, toComplete string) ([]string, cobra.ShellCompDirective) {
86+
return cmdutil.FilterValidTopicNameArgs(f, toComplete)
87+
})
88+
8489
flagutil.EnableOutputFlagCompletion(cmd)
8590

8691
return cmd

pkg/cmd/kafka/create/create.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,10 @@ func NewCreateCommand(f *factory.Factory) *cobra.Command {
112112
cmd.Flags().StringVarP(&opts.outputFormat, "output", "o", "json", opts.localizer.MustLocalize("kafka.common.flag.output.description"))
113113
cmd.Flags().BoolVar(&opts.autoUse, "use", true, opts.localizer.MustLocalize("kafka.create.flag.autoUse.description"))
114114

115+
_ = cmd.RegisterFlagCompletionFunc(flags.FlagProvider, func(cmd *cobra.Command, _ []string, _ string) ([]string, cobra.ShellCompDirective) {
116+
return cmdutil.FetchCloudProviders(f)
117+
})
118+
115119
flagutil.EnableOutputFlagCompletion(cmd)
116120

117121
return cmd

pkg/cmdutil/cmdutil.go

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"os"
77

88
"github.com/AlecAivazis/survey/v2/terminal"
9+
"github.com/redhat-developer/app-services-cli/pkg/cloudprovider/cloudproviderutil"
910
"github.com/redhat-developer/app-services-cli/pkg/cmd/factory"
1011
"github.com/redhat-developer/app-services-cli/pkg/connection"
1112
"github.com/spf13/cobra"
@@ -106,7 +107,7 @@ func FilterValidConsumerGroupIDs(f *factory.Factory, toComplete string) (validID
106107
}
107108

108109
// FilterValidKafkaNames filters Kafkas by name from the API and returns the names
109-
// This is used in the cobra.ValidArgsFunction for dynamic completion of topic names
110+
// This is used in the cobra.ValidArgsFunction for dynamic completion of Kafka instance names
110111
func FilterValidKafkas(f *factory.Factory, toComplete string) (validNames []string, directive cobra.ShellCompDirective) {
111112
validNames = []string{}
112113
directive = cobra.ShellCompDirectiveNoSpace
@@ -134,3 +135,25 @@ func FilterValidKafkas(f *factory.Factory, toComplete string) (validNames []stri
134135

135136
return validNames, directive
136137
}
138+
139+
// FetchCloudProviders returns the list of supported cloud providers for creating a Kafka instance
140+
// This is used in the cmd.RegisterFlagCompletionFunc for dynamic completion of --provider
141+
func FetchCloudProviders(f *factory.Factory) (validProviders []string, directive cobra.ShellCompDirective) {
142+
validProviders = []string{}
143+
directive = cobra.ShellCompDirectiveNoSpace
144+
145+
conn, err := f.Connection(connection.DefaultConfigSkipMasAuth)
146+
if err != nil {
147+
return validProviders, directive
148+
}
149+
150+
cloudProviderResponse, _, err := conn.API().Kafka().GetCloudProviders(context.Background()).Execute()
151+
if err != nil {
152+
return validProviders, directive
153+
}
154+
155+
cloudProviders := cloudProviderResponse.GetItems()
156+
validProviders = cloudproviderutil.GetEnabledNames(cloudProviders)
157+
158+
return validProviders, directive
159+
}

0 commit comments

Comments
 (0)