Skip to content

Commit 36b34c1

Browse files
committed
wip - modules package refactor poc
1 parent f4e0899 commit 36b34c1

File tree

3 files changed

+145
-0
lines changed

3 files changed

+145
-0
lines changed

internal/modulesv2/catalog.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package modulesv2
2+
3+
import (
4+
"context"
5+
6+
"github.com/kyma-project/cli.v3/internal/modulesv2/entities"
7+
"github.com/kyma-project/cli.v3/internal/modulesv2/repository"
8+
)
9+
10+
type Catalog struct {
11+
moduleTemplatesRepository *repository.ModuleTemplatesRepository
12+
}
13+
14+
func NewCatalogService(moduleTemplatesRepository *repository.ModuleTemplatesRepository) *Catalog {
15+
return &Catalog{
16+
moduleTemplatesRepository: moduleTemplatesRepository,
17+
}
18+
}
19+
20+
func (c *Catalog) Get(ctx context.Context) ([]entities.ModuleTemplate, error) {
21+
22+
return nil, nil
23+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package entities
2+
3+
import (
4+
"github.com/kyma-project/cli.v3/internal/kube/kyma"
5+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
6+
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
7+
)
8+
9+
type ModuleTemplate struct {
10+
name string
11+
moduleName string
12+
version string
13+
channel string // core-only
14+
namespace string
15+
associatedResources []metav1.GroupVersionKind
16+
data unstructured.Unstructured
17+
manager *kyma.Manager
18+
source string // community-only
19+
resourcesList []unstructured.Unstructured // community-only
20+
isCommunity bool
21+
}
22+
23+
func MapModuleTemplateFromRaw(rawModuleTemplate *kyma.ModuleTemplate) ModuleTemplate {
24+
entity := ModuleTemplate{}
25+
26+
entity.name = rawModuleTemplate.GetName()
27+
entity.moduleName = rawModuleTemplate.Spec.ModuleName
28+
entity.version = rawModuleTemplate.Spec.Version
29+
entity.namespace = rawModuleTemplate.GetNamespace()
30+
entity.associatedResources = rawModuleTemplate.Spec.AssociatedResources
31+
entity.data = rawModuleTemplate.Spec.Data
32+
entity.manager = rawModuleTemplate.Spec.Manager
33+
34+
return entity
35+
}
36+
37+
func (mt *ModuleTemplate) SetChannel(channel string) {
38+
mt.channel = channel
39+
}
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
package repository
2+
3+
import (
4+
"context"
5+
"fmt"
6+
7+
"github.com/kyma-project/cli.v3/internal/kube"
8+
"github.com/kyma-project/cli.v3/internal/kube/kyma"
9+
"github.com/kyma-project/cli.v3/internal/modulesv2/entities"
10+
)
11+
12+
type ModuleTemplatesRepository interface {
13+
ListCore(ctx context.Context) ([]entities.ModuleTemplate, error)
14+
ListCommunity(ctx context.Context) ([]entities.ModuleTemplate, error)
15+
}
16+
17+
type moduleTemplatesRepository struct {
18+
client kube.Client
19+
}
20+
21+
func NewModuleTemplatesRepository(client kube.Client) *moduleTemplatesRepository {
22+
return &moduleTemplatesRepository{
23+
client: client,
24+
}
25+
}
26+
27+
func (r *moduleTemplatesRepository) getLocal(ctx context.Context) ([]kyma.ModuleTemplate, error) {
28+
moduleTemplates, err := r.client.Kyma().ListModuleTemplate(ctx)
29+
if err != nil {
30+
return nil, fmt.Errorf("failed to list module templates: %v", err)
31+
}
32+
33+
return moduleTemplates.Items, nil
34+
}
35+
36+
func (r *moduleTemplatesRepository) ListCore(ctx context.Context) ([]entities.ModuleTemplate, error) {
37+
rawModuleTemplates, err := r.getLocal(ctx)
38+
if err != nil {
39+
return nil, err
40+
}
41+
42+
rawModulesReleaseMeta, err := r.client.Kyma().ListModuleReleaseMeta(ctx)
43+
if err != nil {
44+
// TODO: add support for legacy catalog
45+
return nil, err
46+
}
47+
48+
return r.mapToCoreEntities(rawModuleTemplates, rawModulesReleaseMeta.Items), nil
49+
}
50+
51+
func (r *moduleTemplatesRepository) ListCommunity(ctx context.Context) ([]entities.ModuleTemplate, error) {
52+
53+
}
54+
55+
func (r *moduleTemplatesRepository) mapToCoreEntities(rawModuleTemplates []kyma.ModuleTemplate, rawReleaseMetas []kyma.ModuleReleaseMeta) []entities.ModuleTemplate {
56+
entities := make([]entities.ModuleTemplate, 0)
57+
58+
for _, rawModuleTemplate := range rawModuleTemplates {
59+
assignments := getChannelVersionsAssignments(rawReleaseMetas, rawModuleTemplate.Name)
60+
for _, assignment := range assignments {
61+
entities = append(entities, r.mapToCoreEntity(&rawModuleTemplate, assignment.Channel))
62+
}
63+
}
64+
65+
return entities
66+
}
67+
68+
func (r *moduleTemplatesRepository) mapToCoreEntity(rawModuleTemplate *kyma.ModuleTemplate, channel string) entities.ModuleTemplate {
69+
moduleTemplateEntity := entities.MapModuleTemplateFromRaw(rawModuleTemplate)
70+
moduleTemplateEntity.SetChannel(channel)
71+
72+
return moduleTemplateEntity
73+
}
74+
75+
func getChannelVersionsAssignments(rawReleaseMetas []kyma.ModuleReleaseMeta, moduleName string) []kyma.ChannelVersionAssignment {
76+
for _, rawReleaseMeta := range rawReleaseMetas {
77+
if rawReleaseMeta.Spec.ModuleName == moduleName {
78+
return rawReleaseMeta.Spec.Channels
79+
}
80+
}
81+
82+
return []kyma.ChannelVersionAssignment{}
83+
}

0 commit comments

Comments
 (0)