Skip to content

Commit

Permalink
fix code for new modules, improve readability
Browse files Browse the repository at this point in the history
  • Loading branch information
halamix2 committed Jan 22, 2025
1 parent eb4b065 commit 6aac520
Show file tree
Hide file tree
Showing 4 changed files with 60 additions and 14 deletions.
2 changes: 1 addition & 1 deletion internal/kube/fake/kyma.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ func (c *KymaClient) GetModuleReleaseMetaForModule(_ context.Context, _ string)
return &c.ReturnModuleReleaseMeta, c.ReturnErr
}

func (c *KymaClient) GetModuleTemplateForModule(_ context.Context, _, _, _ string) (*kyma.ModuleTemplate, error) {
func (c *KymaClient) GetModuleTemplateForModule(_ context.Context, _, _ string) (*kyma.ModuleTemplate, error) {
return &c.ReturnModuleTemplate, c.ReturnGetModuleTemplateErr
}

Expand Down
17 changes: 17 additions & 0 deletions internal/kube/kyma/compatibility.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package kyma

import (
"fmt"
)

// Compatibility, remove when old moduleTemplate definitions are removed
// getOldModuleTemplate returns matching ModuleTemplate from list, based on old ModuleTemplate definitions
func getOldModuleTemplate(moduleTemplates *ModuleTemplateList, moduleName, moduleChannel string) *ModuleTemplate {
for _, moduleTemplate := range moduleTemplates.Items {
// old module templates have name in moduleName-moduleChannel format
if moduleTemplate.ObjectMeta.Name == fmt.Sprintf("%s-%s", moduleName, moduleChannel) {
return &moduleTemplate
}
}
return nil
}
53 changes: 41 additions & 12 deletions internal/kube/kyma/kyma.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ type Interface interface {
ListModuleReleaseMeta(context.Context) (*ModuleReleaseMetaList, error)
ListModuleTemplate(context.Context) (*ModuleTemplateList, error)
GetModuleReleaseMetaForModule(context.Context, string) (*ModuleReleaseMeta, error)
GetModuleTemplateForModule(context.Context, string, string, string) (*ModuleTemplate, error)
GetModuleTemplateForModule(context.Context, string, string) (*ModuleTemplate, error)
GetDefaultKyma(context.Context) (*Kyma, error)
UpdateDefaultKyma(context.Context, *Kyma) error
GetModuleInfo(context.Context, string) (*KymaModuleInfo, error)
Expand Down Expand Up @@ -74,26 +74,55 @@ func (c *client) GetModuleReleaseMetaForModule(ctx context.Context, moduleName s
}

// GetModuleTemplateForModule returns ModuleTemplate CR corelated with given module name in right version
func (c *client) GetModuleTemplateForModule(ctx context.Context, moduleName, moduleVersion, moduleChannel string) (*ModuleTemplate, error) {
func (c *client) GetModuleTemplateForModule(ctx context.Context, moduleName, moduleChannel string) (*ModuleTemplate, error) {
moduleTemplates, err := c.ListModuleTemplate(ctx)
if err != nil {
return nil, err
}

for _, moduleTemplate := range moduleTemplates.Items {
// old module templates have name in fomat moduleName-moduleChannel
if moduleTemplate.ObjectMeta.Name == fmt.Sprintf("%s-%s", moduleName, moduleChannel) {
return &moduleTemplate, nil
// get ModuleReleaseMeta if the CRD exists
moduleReleaseMeta, err := c.GetModuleReleaseMetaForModule(ctx, moduleName)
if err != nil {
// new modules not detected, going old route
moduleTemplate := getOldModuleTemplate(moduleTemplates, moduleName, moduleChannel)
if moduleTemplate != nil {
return moduleTemplate, nil
}
// in case this ever stops working for the new modules we could get moduleReleaseMeta list and parse that
// https://github.com/kyma-project/cli/issues/2319#issuecomment-2602751723
if moduleTemplate.Spec.ModuleName == moduleName &&
moduleTemplate.Spec.Version == moduleVersion {
return &moduleTemplate, nil
return nil, fmt.Errorf("can't find neither ModuleReleaseMeta CR/CRD nor ModuleTemplate CR %s in channel %s", moduleName, moduleChannel)
}

moduleVersion := getModuleVersionForChannel(moduleReleaseMeta, moduleChannel)
if moduleVersion == "" {
return nil, fmt.Errorf("can't find ModuleReleaseMeta CR for module %s in channel %s", moduleName, moduleChannel)
}

ModuleTemplate := getModuleTemplate(moduleTemplates, moduleName, moduleVersion)
if ModuleTemplate != nil {
return ModuleTemplate, nil
}

return nil, fmt.Errorf("can't find ModuleTemplate CR for module %s in channel %s", moduleName, moduleChannel)
}

// getModuleVersionForChannel returns version of the module for given channel
func getModuleVersionForChannel(moduleReleaseMeta *ModuleReleaseMeta, moduleChannel string) string {
for _, channel := range moduleReleaseMeta.Spec.Channels {
if channel.Channel == moduleChannel {
return channel.Version
}
}
return ""
}

return nil, fmt.Errorf("can't find ModuleTemplate CR for module %s in version %s", moduleName, moduleVersion)
// getModuleTemplate returns matching ModuleTemplate from list
func getModuleTemplate(moduleTemplates *ModuleTemplateList, moduleName, moduleVersion string) *ModuleTemplate {
// we can either look for moduleTemplates named moduleName-moduleVersion or look for the same info in .Spec
for _, moduleTemplate := range moduleTemplates.Items {
if moduleTemplate.Spec.ModuleName == moduleName && moduleTemplate.Spec.Version == moduleVersion {
return &moduleTemplate
}
}
return nil
}

// GetDefaultKyma gets the default Kyma CR from the kyma-system namespace and cast it to the Kyma structure
Expand Down
2 changes: 1 addition & 1 deletion internal/modules/disable.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ func removeModuleCR(writer io.Writer, ctx context.Context, client kube.Client, m
return nil
}

moduleTemplate, err := client.Kyma().GetModuleTemplateForModule(ctx, info.Status.Name, info.Status.Version, info.Status.Channel)
moduleTemplate, err := client.Kyma().GetModuleTemplateForModule(ctx, info.Status.Name, info.Status.Channel)
if err != nil {
return clierror.Wrap(err, clierror.New("failed to get ModuleTemplate CR for module"))
}
Expand Down

0 comments on commit 6aac520

Please sign in to comment.