Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ require (
github.com/pkg/errors v0.9.1
github.com/redhat-developer/app-services-sdk-go/accountmgmt v0.1.0
github.com/redhat-developer/app-services-sdk-go/kafkainstance v0.4.0
github.com/redhat-developer/app-services-sdk-go/kafkamgmt v0.8.2
github.com/redhat-developer/app-services-sdk-go/kafkamgmt v0.9.0
github.com/redhat-developer/app-services-sdk-go/registryinstance v0.3.1
github.com/redhat-developer/app-services-sdk-go/registrymgmt v0.6.1
github.com/redhat-developer/service-binding-operator v0.9.0
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -703,8 +703,8 @@ github.com/redhat-developer/app-services-sdk-go/accountmgmt v0.1.0 h1:MOljVN8AKT
github.com/redhat-developer/app-services-sdk-go/accountmgmt v0.1.0/go.mod h1:0LX7ZCEmMKAbncO05/zRYsV0K5wsds7AGPpOFC7KWGo=
github.com/redhat-developer/app-services-sdk-go/kafkainstance v0.4.0 h1:eAtKA1umUzWMCtfgC28k59xTYS4uAoxIOiSlzdF8NhU=
github.com/redhat-developer/app-services-sdk-go/kafkainstance v0.4.0/go.mod h1:6CxhBFDnXyrl5rWiLX2iBVs30o7Yhbt63SxGk4ZAnu0=
github.com/redhat-developer/app-services-sdk-go/kafkamgmt v0.8.2 h1:kpLSSOqMTd+aAN9vIQ0B8tOwFeFAcvTWe1rmM+tW4BU=
github.com/redhat-developer/app-services-sdk-go/kafkamgmt v0.8.2/go.mod h1:Bs/YQI9ZuZLzBoeBAWV6KmkO8Jwm8NcrUn3VFp8eleo=
github.com/redhat-developer/app-services-sdk-go/kafkamgmt v0.9.0 h1:wb335WbgyhFZRIHOwqHJm+D877l50MPMacrONCmknnw=
github.com/redhat-developer/app-services-sdk-go/kafkamgmt v0.9.0/go.mod h1:Bs/YQI9ZuZLzBoeBAWV6KmkO8Jwm8NcrUn3VFp8eleo=
github.com/redhat-developer/app-services-sdk-go/registryinstance v0.3.1 h1:xRq5XJzRDs/Z7e/9SDt6zbNRIyesC4LTqN9ajHKwjHo=
github.com/redhat-developer/app-services-sdk-go/registryinstance v0.3.1/go.mod h1:Z/gr/snlpsqYg4vftmcx97vCR3qMQJhALGelDHx4pMA=
github.com/redhat-developer/app-services-sdk-go/registrymgmt v0.6.1 h1:3sUmQ3nAawsYWg7ZCO2Q8HF2J7MW6YA38h/YFL3ao6o=
Expand Down
47 changes: 28 additions & 19 deletions pkg/cmd/kafka/create/create.go
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@ func runCreate(opts *options) error {
if opts.interactive {
opts.Logger.Debug()

payload, err = promptKafkaPayload(opts)
payload, err = promptKafkaPayload(opts, constants)
if err != nil {
return err
}
Expand All @@ -188,19 +188,20 @@ func runCreate(opts *options) error {
opts.region = defaultRegion
}

if !opts.bypassAmsCheck {
err = validateProviderAndRegion(opts, constants, conn)
if err != nil {
return err
}
}

payload = &kafkamgmtclient.KafkaRequestPayload{
Name: opts.name,
Region: &opts.region,
CloudProvider: &opts.provider,
MultiAz: &opts.multiAZ,
}
}

if !opts.bypassAmsCheck {
err = validateProviderAndRegion(opts, constants, conn)
if err != nil {
return err
}
}

api := conn.API()
Expand Down Expand Up @@ -387,8 +388,16 @@ func validateProviderRegion(conn connection.Connection, opts *options, selectedP
return nil
}

// set type to store the answers from the prompt with defaults
type promptAnswers struct {
Name string
Region string
MultiAZ bool
CloudProvider string
}

// Show a prompt to allow the user to interactively insert the data for their Kafka
func promptKafkaPayload(opts *options) (payload *kafkamgmtclient.KafkaRequestPayload, err error) {
func promptKafkaPayload(opts *options, constants *remote.DynamicServiceConstants) (payload *kafkamgmtclient.KafkaRequestPayload, err error) {
conn, err := opts.Connection(connection.DefaultConfigSkipMasAuth)
if err != nil {
return nil, err
Expand All @@ -401,21 +410,15 @@ func promptKafkaPayload(opts *options) (payload *kafkamgmtclient.KafkaRequestPay
Connection: opts.Connection,
}

// set type to store the answers from the prompt with defaults
answers := struct {
Name string
Region string
MultiAZ bool
CloudProvider string
}{
MultiAZ: defaultMultiAZ,
}

promptName := &survey.Input{
Message: opts.localizer.MustLocalize("kafka.create.input.name.message"),
Help: opts.localizer.MustLocalize("kafka.create.input.name.help"),
}

answers := &promptAnswers{
MultiAZ: defaultMultiAZ,
}

err = survey.AskOne(promptName, &answers.Name, survey.WithValidator(validator.ValidateName), survey.WithValidator(validator.ValidateNameIsAvailable))
if err != nil {
return nil, err
Expand Down Expand Up @@ -453,8 +456,14 @@ func promptKafkaPayload(opts *options) (payload *kafkamgmtclient.KafkaRequestPay
return nil, err
}

userInstanceTypes, err := accountmgmtutil.GetUserSupportedInstanceTypes(opts.Context, constants.Kafka.Ams, conn)
if err != nil {
opts.Logger.Debug("Cannot retrieve user supported instance types. Skipping validation", err)
return payload, err
}

regions := cloudRegionResponse.GetItems()
regionIDs := pkgKafka.GetEnabledCloudRegionIDs(regions)
regionIDs := pkgKafka.GetEnabledCloudRegionIDs(regions, &userInstanceTypes)

regionPrompt := &survey.Select{
Message: opts.localizer.MustLocalize("kafka.create.input.cloudRegion.message"),
Expand Down
3 changes: 2 additions & 1 deletion pkg/cmd/kafka/list/list.go
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,8 @@ func runList(opts *options) error {
func mapResponseItemsToRows(kafkas []kafkamgmtclient.KafkaRequest, selectedId string) []kafkaRow {
rows := make([]kafkaRow, len(kafkas))

for i, k := range kafkas {
for i := range kafkas {
k := kafkas[i]
name := k.GetName()
if k.GetId() == selectedId {
name = fmt.Sprintf("%s %s", name, icon.Emoji("✔", "(current)"))
Expand Down
2 changes: 1 addition & 1 deletion pkg/cmd/serviceaccount/list/list.go
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ func mapResponseItemsToRows(svcAccts []kafkamgmtclient.ServiceAccountListItem) [
ID: sa.GetId(),
Name: sa.GetName(),
ClientID: sa.GetClientId(),
Owner: sa.GetOwner(),
Owner: sa.GetCreatedBy(),
CreatedAt: sa.GetCreatedAt().String(),
}

Expand Down
31 changes: 25 additions & 6 deletions pkg/shared/kafkautil/util.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@ func RegisterNameFlagCompletionFunc(cmd *cobra.Command, f *factory.Factory) erro
}

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

return validNames, directive
Expand Down Expand Up @@ -85,7 +85,7 @@ func GetCloudProviderRegionCompletionValues(f *factory.Factory, providerID strin
}

cloudProviders := cloudProviderResponse.GetItems()
validRegions = GetEnabledCloudRegionIDs(cloudProviders)
validRegions = GetEnabledCloudRegionIDs(cloudProviders, nil)

return validRegions, directive
}
Expand All @@ -112,16 +112,35 @@ func FindCloudProviderByName(cloudProviders []kafkamgmtclient.CloudProvider, nam
}

// GetEnabledCloudRegionIDs extracts and returns a slice of the unique IDs of all enabled regions
func GetEnabledCloudRegionIDs(regions []kafkamgmtclient.CloudRegion) []string {
func GetEnabledCloudRegionIDs(regions []kafkamgmtclient.CloudRegion, userAllowedInstanceTypes *[]string) []string {
var regionIDs []string
for _, region := range regions {
for i, region := range regions {
if region.GetEnabled() {
regionIDs = append(regionIDs, region.GetId())
if userAllowedInstanceTypes != nil {
if IsRegionAllowed(&regions[i], userAllowedInstanceTypes) {
regionIDs = append(regionIDs, region.GetId())
}
} else {
regionIDs = append(regionIDs, region.GetId())
}
}
}
return regionIDs
}

func IsRegionAllowed(region *kafkamgmtclient.CloudRegion, userAllowedInstanceTypes *[]string) bool {
for _, userInstanceType := range *userAllowedInstanceTypes {
if region.GetSupportedInstanceTypes() != nil {
for _, instanceType := range region.GetSupportedInstanceTypes() {
if instanceType == userInstanceType {
return true
}
}
}
}
return false
}

// FilterValidTopicNameArgs filters topics from the API and returns the names
// This is used in for dynamic completion of topic names
func FilterValidTopicNameArgs(f *factory.Factory, toComplete string) (validNames []string, directive cobra.ShellCompDirective) {
Expand Down