Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions docs/commands/rhoas_kafka_delete.adoc

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion docs/commands/rhoas_kafka_describe.adoc

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions docs/commands/rhoas_kafka_topic_describe.adoc

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

26 changes: 0 additions & 26 deletions pkg/cloudprovider/cloudproviderutil/util.go

This file was deleted.

16 changes: 0 additions & 16 deletions pkg/cloudregion/cloudregionutil/util.go

This file was deleted.

12 changes: 5 additions & 7 deletions pkg/cmd/kafka/create/create.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import (

"github.com/redhat-developer/app-services-cli/pkg/color"
"github.com/redhat-developer/app-services-cli/pkg/dump"
kafkacmdutil "github.com/redhat-developer/app-services-cli/pkg/kafka/cmdutil"
"github.com/redhat-developer/app-services-cli/pkg/localize"

"github.com/redhat-developer/app-services-cli/pkg/ams"
Expand All @@ -23,9 +24,6 @@ import (
"github.com/redhat-developer/app-services-cli/pkg/connection"
svcstatus "github.com/redhat-developer/app-services-cli/pkg/service/status"

"github.com/redhat-developer/app-services-cli/pkg/cloudprovider/cloudproviderutil"
"github.com/redhat-developer/app-services-cli/pkg/cloudregion/cloudregionutil"

"github.com/AlecAivazis/survey/v2"
"github.com/redhat-developer/app-services-cli/pkg/iostreams"
pkgKafka "github.com/redhat-developer/app-services-cli/pkg/kafka"
Expand Down Expand Up @@ -121,7 +119,7 @@ func NewCreateCommand(f *factory.Factory) *cobra.Command {
cmd.Flags().BoolVarP(&opts.wait, "wait", "w", false, opts.localizer.MustLocalize("kafka.create.flag.wait.description"))

_ = cmd.RegisterFlagCompletionFunc(flags.FlagProvider, func(cmd *cobra.Command, _ []string, _ string) ([]string, cobra.ShellCompDirective) {
return cmdutil.FetchCloudProviders(f)
return kafkacmdutil.GetCloudProviderCompletionValues(f)
})

flagutil.EnableOutputFlagCompletion(cmd)
Expand Down Expand Up @@ -309,7 +307,7 @@ func promptKafkaPayload(opts *Options) (payload *kafkamgmtclient.KafkaRequestPay
}

cloudProviders := cloudProviderResponse.GetItems()
cloudProviderNames := cloudproviderutil.GetEnabledNames(cloudProviders)
cloudProviderNames := kafkacmdutil.GetEnabledCloudProviderNames(cloudProviders)

cloudProviderPrompt := &survey.Select{
Message: opts.localizer.MustLocalize("kafka.create.input.cloudProvider.message"),
Expand All @@ -322,7 +320,7 @@ func promptKafkaPayload(opts *Options) (payload *kafkamgmtclient.KafkaRequestPay
}

// get the selected provider type from the name selected
selectedCloudProvider := cloudproviderutil.FindByName(cloudProviders, answers.CloudProvider)
selectedCloudProvider := kafkacmdutil.FindCloudProviderByName(cloudProviders, answers.CloudProvider)

// nolint
cloudRegionResponse, _, err := api.Kafka().GetCloudProviderRegions(context.Background(), selectedCloudProvider.GetId()).Execute()
Expand All @@ -331,7 +329,7 @@ func promptKafkaPayload(opts *Options) (payload *kafkamgmtclient.KafkaRequestPay
}

regions := cloudRegionResponse.GetItems()
regionIDs := cloudregionutil.GetEnabledIDs(regions)
regionIDs := kafkacmdutil.GetEnabledCloudRegionIDs(regions)

regionPrompt := &survey.Select{
Message: opts.localizer.MustLocalize("kafka.create.input.cloudRegion.message"),
Expand Down
10 changes: 5 additions & 5 deletions pkg/cmd/kafka/delete/delete.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"fmt"

"github.com/redhat-developer/app-services-cli/pkg/connection"
kafkacmdutil "github.com/redhat-developer/app-services-cli/pkg/kafka/cmdutil"
"github.com/redhat-developer/app-services-cli/pkg/localize"

"github.com/redhat-developer/app-services-cli/pkg/iostreams"
Expand Down Expand Up @@ -48,16 +49,12 @@ func NewDeleteCommand(f *factory.Factory) *cobra.Command {
Short: opts.localizer.MustLocalize("kafka.delete.cmd.shortDescription"),
Long: opts.localizer.MustLocalize("kafka.delete.cmd.longDescription"),
Example: opts.localizer.MustLocalize("kafka.delete.cmd.example"),
Args: cobra.RangeArgs(0, 1),
Args: cobra.NoArgs,
RunE: func(cmd *cobra.Command, args []string) error {
if !opts.IO.CanPrompt() && !opts.force {
return flag.RequiredWhenNonInteractiveError("yes")
}

if len(args) > 0 {
opts.name = args[0]
}

if opts.name != "" && opts.id != "" {
return errors.New(opts.localizer.MustLocalize("service.error.idAndNameCannotBeUsed"))
}
Expand All @@ -84,6 +81,9 @@ func NewDeleteCommand(f *factory.Factory) *cobra.Command {

cmd.Flags().StringVar(&opts.id, "id", "", opts.localizer.MustLocalize("kafka.delete.flag.id"))
cmd.Flags().BoolVarP(&opts.force, "yes", "y", false, opts.localizer.MustLocalize("kafka.delete.flag.yes"))
cmd.Flags().StringVar(&opts.name, "name", "", opts.localizer.MustLocalize("kafka.delete.flag.name"))

_ = kafkacmdutil.RegisterNameFlagCompletionFunc(cmd, f)

return cmd
}
Expand Down
14 changes: 4 additions & 10 deletions pkg/cmd/kafka/describe/describe.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,13 @@ import (
flagutil "github.com/redhat-developer/app-services-cli/pkg/cmdutil/flags"
"github.com/redhat-developer/app-services-cli/pkg/connection"
"github.com/redhat-developer/app-services-cli/pkg/iostreams"
kafkacmdutil "github.com/redhat-developer/app-services-cli/pkg/kafka/cmdutil"
"github.com/redhat-developer/app-services-cli/pkg/localize"

"github.com/redhat-developer/app-services-cli/pkg/cmd/flag"

"github.com/redhat-developer/app-services-cli/internal/config"
"github.com/redhat-developer/app-services-cli/pkg/cmd/factory"
"github.com/redhat-developer/app-services-cli/pkg/cmdutil"
"github.com/redhat-developer/app-services-cli/pkg/dump"
"github.com/redhat-developer/app-services-cli/pkg/kafka"
kafkamgmtclient "github.com/redhat-developer/app-services-sdk-go/kafkamgmt/apiv1/client"
Expand Down Expand Up @@ -48,21 +48,13 @@ func NewDescribeCommand(f *factory.Factory) *cobra.Command {
Short: opts.localizer.MustLocalize("kafka.describe.cmd.shortDescription"),
Long: opts.localizer.MustLocalize("kafka.describe.cmd.longDescription"),
Example: opts.localizer.MustLocalize("kafka.describe.cmd.example"),
Args: cobra.RangeArgs(0, 1),
// Dynamic completion of the Kafka name
ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
return cmdutil.FilterValidKafkas(f, toComplete)
},
Args: cobra.NoArgs,
RunE: func(cmd *cobra.Command, args []string) error {
validOutputFormats := flagutil.ValidOutputFormats
if opts.outputFormat != "" && !flagutil.IsValidInput(opts.outputFormat, validOutputFormats...) {
return flag.InvalidValueError("output", opts.outputFormat, validOutputFormats...)
}

if len(args) > 0 {
opts.name = args[0]
}

if opts.name != "" && opts.id != "" {
return errors.New(opts.localizer.MustLocalize("service.error.idAndNameCannotBeUsed"))
}
Expand All @@ -89,7 +81,9 @@ func NewDescribeCommand(f *factory.Factory) *cobra.Command {

cmd.Flags().StringVarP(&opts.outputFormat, "output", "o", "json", opts.localizer.MustLocalize("kafka.common.flag.output.description"))
cmd.Flags().StringVar(&opts.id, "id", "", opts.localizer.MustLocalize("kafka.describe.flag.id"))
cmd.Flags().StringVar(&opts.name, "name", "", opts.localizer.MustLocalize("kafka.describe.flag.name"))

_ = kafkacmdutil.RegisterNameFlagCompletionFunc(cmd, f)
flagutil.EnableOutputFlagCompletion(cmd)

return cmd
Expand Down
22 changes: 10 additions & 12 deletions pkg/cmd/kafka/topic/describe/describe.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ import (
)

type Options struct {
topicName string
name string
kafkaID string
outputFormat string

Expand All @@ -51,16 +51,8 @@ func NewDescribeTopicCommand(f *factory.Factory) *cobra.Command {
Short: opts.localizer.MustLocalize("kafka.topic.describe.cmd.shortDescription"),
Long: opts.localizer.MustLocalize("kafka.topic.describe.cmd.longDescription"),
Example: opts.localizer.MustLocalize("kafka.topic.describe.cmd.example"),
Args: cobra.ExactValidArgs(1),
// dynamic completion of topic names
ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
return cmdutil.FilterValidTopicNameArgs(f, toComplete)
},
Args: cobra.NoArgs,
RunE: func(cmd *cobra.Command, args []string) (err error) {
if len(args) > 0 {
opts.topicName = args[0]
}

if opts.outputFormat != "" {
if err = flag.ValidateOutput(opts.outputFormat); err != nil {
return err
Expand Down Expand Up @@ -88,6 +80,12 @@ func NewDescribeTopicCommand(f *factory.Factory) *cobra.Command {

cmd.Flags().StringVarP(&opts.outputFormat, "output", "o", "json", opts.localizer.MustLocalize("kafka.topic.common.flag.output.description"))

cmd.Flags().StringVar(&opts.name, "name", "", opts.localizer.MustLocalize("kafka.topic.common.flag.output.description"))
_ = cmd.RegisterFlagCompletionFunc("name", func(cmd *cobra.Command, _ []string, toComplete string) ([]string, cobra.ShellCompDirective) {
return cmdutil.FilterValidTopicNameArgs(f, toComplete)
})
_ = cmd.MarkFlagRequired("name")
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Offtopic] It might be good to have our own helper for that that provides i18n support.
I have been manually validating flags that are required due to lack of i18n support for _ = cmd.MarkFlagRequired("name")

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't follow. Something like cmd.MarkFlagRequired(opts.localizer.MustLocalize("flag.id")


flagutil.EnableOutputFlagCompletion(cmd)

return cmd
Expand All @@ -106,14 +104,14 @@ func runCmd(opts *Options) error {

// fetch the topic
topicResponse, httpRes, err := api.TopicsApi.
GetTopic(context.Background(), opts.topicName).
GetTopic(context.Background(), opts.name).
Execute()
if err != nil {
if httpRes == nil {
return err
}

topicNameTmplPair := localize.NewEntry("TopicName", opts.topicName)
topicNameTmplPair := localize.NewEntry("TopicName", opts.name)
kafkaNameTmplPair := localize.NewEntry("InstanceName", kafkaInstance.GetName())
operationTmplPair := localize.NewEntry("Operation", "delete")

Expand Down
9 changes: 4 additions & 5 deletions pkg/cmd/kafka/use/use.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,10 @@ import (

"github.com/redhat-developer/app-services-cli/pkg/connection"
"github.com/redhat-developer/app-services-cli/pkg/iostreams"
kafkacmdutil "github.com/redhat-developer/app-services-cli/pkg/kafka/cmdutil"
"github.com/redhat-developer/app-services-cli/pkg/localize"
kafkamgmtclient "github.com/redhat-developer/app-services-sdk-go/kafkamgmt/apiv1/client"

"github.com/redhat-developer/app-services-cli/pkg/cmdutil"

"github.com/redhat-developer/app-services-cli/pkg/kafka"

"github.com/spf13/cobra"
Expand Down Expand Up @@ -48,9 +47,6 @@ func NewUseCommand(f *factory.Factory) *cobra.Command {
Long: opts.localizer.MustLocalize("kafka.use.cmd.longDescription"),
Example: opts.localizer.MustLocalize("kafka.use.cmd.example"),
Args: cobra.NoArgs,
ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
return cmdutil.FilterValidKafkas(f, toComplete)
},
RunE: func(cmd *cobra.Command, args []string) error {
if opts.id == "" && opts.name == "" {
if !opts.IO.CanPrompt() {
Expand All @@ -69,6 +65,9 @@ func NewUseCommand(f *factory.Factory) *cobra.Command {

cmd.Flags().StringVar(&opts.id, "id", "", opts.localizer.MustLocalize("kafka.use.flag.id"))
cmd.Flags().StringVar(&opts.name, "name", "", opts.localizer.MustLocalize("kafka.use.flag.name"))

_ = kafkacmdutil.RegisterNameFlagCompletionFunc(cmd, f)

return cmd
}

Expand Down
67 changes: 0 additions & 67 deletions pkg/cmdutil/cmdutil.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,29 +2,13 @@ package cmdutil

import (
"context"
"errors"
"os"
"strconv"

"github.com/AlecAivazis/survey/v2/terminal"
"github.com/redhat-developer/app-services-cli/pkg/cloudprovider/cloudproviderutil"
"github.com/redhat-developer/app-services-cli/pkg/cmd/factory"
"github.com/redhat-developer/app-services-cli/pkg/connection"
"github.com/spf13/cobra"
)

// CheckSurveyError checks the error from AlecAivazis/survey
// if the error is from SIGINT, force exit the program quietly
func CheckSurveyError(err error) error {
if errors.Is(err, terminal.InterruptErr) {
os.Exit(0)
} else if err != nil {
return err
}

return nil
}

// FilterValidTopicNameArgs filters topics from the API and returns the names
// This is used in the cobra.ValidArgsFunction for dynamic completion of topic names
func FilterValidTopicNameArgs(f *factory.Factory, toComplete string) (validNames []string, directive cobra.ShellCompDirective) {
Expand Down Expand Up @@ -108,57 +92,6 @@ func FilterValidConsumerGroupIDs(f *factory.Factory, toComplete string) (validID
return validIDs, directive
}

// FilterValidKafkaNames filters Kafkas by name from the API and returns the names
// This is used in the cobra.ValidArgsFunction for dynamic completion of Kafka instance names
func FilterValidKafkas(f *factory.Factory, toComplete string) (validNames []string, directive cobra.ShellCompDirective) {
validNames = []string{}
directive = cobra.ShellCompDirectiveNoSpace

conn, err := f.Connection(connection.DefaultConfigSkipMasAuth)
if err != nil {
return validNames, directive
}

req := conn.API().Kafka().GetKafkas(context.Background())
if toComplete != "" {
searchQ := "name like " + toComplete + "%"
req = req.Search(searchQ)
}
kafkas, _, err := req.Execute()
if err != nil {
return validNames, directive
}

items := kafkas.GetItems()
for _, kafka := range items {
validNames = append(validNames, kafka.GetName())
}

return validNames, directive
}

// FetchCloudProviders returns the list of supported cloud providers for creating a Kafka instance
// This is used in the cmd.RegisterFlagCompletionFunc for dynamic completion of --provider
func FetchCloudProviders(f *factory.Factory) (validProviders []string, directive cobra.ShellCompDirective) {
validProviders = []string{}
directive = cobra.ShellCompDirectiveNoSpace

conn, err := f.Connection(connection.DefaultConfigSkipMasAuth)
if err != nil {
return validProviders, directive
}

cloudProviderResponse, _, err := conn.API().Kafka().GetCloudProviders(context.Background()).Execute()
if err != nil {
return validProviders, directive
}

cloudProviders := cloudProviderResponse.GetItems()
validProviders = cloudproviderutil.GetEnabledNames(cloudProviders)

return validProviders, directive
}

func ConvertPageValueToInt32(s string) int32 {
val, err := strconv.ParseInt(s, 10, 32)

Expand Down
Loading