Skip to content

Commit 8fab2cb

Browse files
committed
refactoring manifest repository
1 parent 335e6ee commit 8fab2cb

File tree

5 files changed

+76
-45
lines changed

5 files changed

+76
-45
lines changed

Diff for: internal/repository/kyma.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ func NewKymaRepository(client client.Client) *KymaRepository {
1717
return &KymaRepository{Client: client}
1818
}
1919

20-
func (r *KymaRepository) GetKyma(ctx context.Context, namespacedName client.ObjectKey) (*v1beta2.Kyma, error) {
20+
func (r *KymaRepository) Get(ctx context.Context, namespacedName client.ObjectKey) (*v1beta2.Kyma, error) {
2121
kyma := &v1beta2.Kyma{}
2222
if err := r.Client.Get(ctx, namespacedName, kyma); err != nil {
2323
return nil, fmt.Errorf("failed to get Kyma: %w", err)

Diff for: internal/repository/manifest.go

+12-36
Original file line numberDiff line numberDiff line change
@@ -8,62 +8,38 @@ import (
88
"sigs.k8s.io/controller-runtime/pkg/client"
99
logf "sigs.k8s.io/controller-runtime/pkg/log"
1010

11-
"github.com/kyma-project/lifecycle-manager/api/shared"
1211
"github.com/kyma-project/lifecycle-manager/api/v1beta2"
13-
"github.com/kyma-project/lifecycle-manager/internal/descriptor/provider"
1412
"github.com/kyma-project/lifecycle-manager/pkg/log"
1513
)
1614

1715
type ManifestRepository struct {
18-
Client client.Client
19-
DescriptorProvider *provider.CachedDescriptorProvider
16+
Client client.Client
2017
}
2118

2219
func NewManifestRepository(client client.Client,
23-
descriptorProvider *provider.CachedDescriptorProvider,
2420
) *ManifestRepository {
2521
return &ManifestRepository{
26-
Client: client,
27-
DescriptorProvider: descriptorProvider,
22+
Client: client,
2823
}
2924
}
3025

31-
func (r *ManifestRepository) GetMandatoryManifests(ctx context.Context,
32-
template *v1beta2.ModuleTemplate,
33-
) ([]v1beta2.Manifest, error) {
34-
manifests := &v1beta2.ManifestList{}
35-
descriptor, err := r.DescriptorProvider.GetDescriptor(template)
36-
if err != nil {
37-
return nil, fmt.Errorf("not able to get descriptor from template: %w", err)
38-
}
39-
if err := r.Client.List(ctx, manifests, &client.ListOptions{
40-
Namespace: template.Namespace,
41-
LabelSelector: k8slabels.SelectorFromSet(k8slabels.Set{shared.IsMandatoryModule: "true"}),
42-
}); client.IgnoreNotFound(err) != nil {
43-
return nil, fmt.Errorf("not able to list mandatory module manifests: %w", err)
44-
}
45-
46-
return filterManifestsByAnnotation(manifests.Items, shared.FQDN, descriptor.GetName()), nil
47-
}
48-
49-
func (r *ManifestRepository) RemoveManifests(ctx context.Context, manifests []v1beta2.Manifest) error {
26+
func (m *ManifestRepository) RemoveManifests(ctx context.Context, manifests []v1beta2.Manifest) error {
5027
for _, manifest := range manifests {
51-
if err := r.Client.Delete(ctx, &manifest); err != nil {
28+
if err := m.Client.Delete(ctx, &manifest); err != nil {
5229
return fmt.Errorf("not able to delete manifest %s/%s: %w", manifest.Namespace, manifest.Name, err)
5330
}
5431
}
5532
logf.FromContext(ctx).V(log.DebugLevel).Info("Marked all Manifests for deletion")
5633
return nil
5734
}
5835

59-
func filterManifestsByAnnotation(manifests []v1beta2.Manifest,
60-
annotationKey, annotationValue string,
61-
) []v1beta2.Manifest {
62-
filteredManifests := make([]v1beta2.Manifest, 0)
63-
for _, manifest := range manifests {
64-
if manifest.Annotations[annotationKey] == annotationValue {
65-
filteredManifests = append(filteredManifests, manifest)
66-
}
36+
func (m *ManifestRepository) ListByLabel(ctx context.Context,
37+
labelSelector k8slabels.Selector,
38+
) (*v1beta2.ManifestList, error) {
39+
manifestList := &v1beta2.ManifestList{}
40+
if err := m.Client.List(ctx, manifestList,
41+
&client.ListOptions{LabelSelector: labelSelector}); err != nil {
42+
return nil, fmt.Errorf("could not list ManifestList: %w", err)
6743
}
68-
return filteredManifests
44+
return manifestList, nil
6945
}

Diff for: internal/repository/module_template.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,10 @@ func (m *ModuleTemplateRepository) Update(ctx context.Context,
4040
func (m *ModuleTemplateRepository) ListByLabel(ctx context.Context,
4141
labelSelector k8slabels.Selector,
4242
) (*v1beta2.ModuleTemplateList, error) {
43-
mandatoryModuleTemplateList := &v1beta2.ModuleTemplateList{}
44-
if err := m.Client.List(ctx, mandatoryModuleTemplateList,
43+
moduleTemplateList := &v1beta2.ModuleTemplateList{}
44+
if err := m.Client.List(ctx, moduleTemplateList,
4545
&client.ListOptions{LabelSelector: labelSelector}); err != nil {
4646
return nil, fmt.Errorf("could not list ModuleTemplates: %w", err)
4747
}
48-
return mandatoryModuleTemplateList, nil
48+
return moduleTemplateList, nil
4949
}

Diff for: internal/service/mandatory_module_deletion.go

+6-4
Original file line numberDiff line numberDiff line change
@@ -12,21 +12,23 @@ import (
1212
)
1313

1414
type MandatoryModuleDeletionService struct {
15-
ManifestRepository *repository.ManifestRepository
15+
manifestRepository *repository.ManifestRepository
16+
manifestService *ManifestService
1617
}
1718

1819
func NewMandatoryModuleDeletionService(client client.Client,
1920
descriptorProvider *provider.CachedDescriptorProvider,
2021
) *MandatoryModuleDeletionService {
2122
return &MandatoryModuleDeletionService{
22-
ManifestRepository: repository.NewManifestRepository(client, descriptorProvider),
23+
manifestRepository: repository.NewManifestRepository(client),
24+
manifestService: NewManifestService(client, descriptorProvider),
2325
}
2426
}
2527

2628
func (s *MandatoryModuleDeletionService) DeleteMandatoryModules(ctx context.Context,
2729
template *v1beta2.ModuleTemplate,
2830
) (bool, error) {
29-
manifests, err := s.ManifestRepository.GetMandatoryManifests(ctx, template)
31+
manifests, err := s.manifestService.GetMandatoryManifests(ctx, template)
3032
if err != nil {
3133
return false, fmt.Errorf("failed to get MandatoryModuleManifests: %w", err)
3234
}
@@ -35,7 +37,7 @@ func (s *MandatoryModuleDeletionService) DeleteMandatoryModules(ctx context.Cont
3537
return true, nil
3638
}
3739

38-
if err := s.ManifestRepository.RemoveManifests(ctx, manifests); err != nil {
40+
if err := s.manifestRepository.RemoveManifests(ctx, manifests); err != nil {
3941
return false, fmt.Errorf("failed to remove MandatoryModule Manifest: %w", err)
4042
}
4143

Diff for: internal/service/manifest.go

+54-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,56 @@
11
package service
22

3-
type ManifestService struct{}
3+
import (
4+
"context"
5+
"fmt"
6+
7+
k8slabels "k8s.io/apimachinery/pkg/labels"
8+
"sigs.k8s.io/controller-runtime/pkg/client"
9+
10+
"github.com/kyma-project/lifecycle-manager/api/shared"
11+
"github.com/kyma-project/lifecycle-manager/api/v1beta2"
12+
"github.com/kyma-project/lifecycle-manager/internal/descriptor/provider"
13+
"github.com/kyma-project/lifecycle-manager/internal/repository"
14+
)
15+
16+
type ManifestService struct {
17+
DescriptorProvider *provider.CachedDescriptorProvider
18+
ManifestRepository *repository.ManifestRepository
19+
}
20+
21+
func NewManifestService(client client.Client, descriptorProvider *provider.CachedDescriptorProvider) *ManifestService {
22+
return &ManifestService{
23+
DescriptorProvider: descriptorProvider,
24+
ManifestRepository: repository.NewManifestRepository(client),
25+
}
26+
}
27+
28+
func (r *ManifestService) GetMandatoryManifests(ctx context.Context,
29+
template *v1beta2.ModuleTemplate,
30+
) ([]v1beta2.Manifest, error) {
31+
descriptor, err := r.DescriptorProvider.GetDescriptor(template)
32+
if err != nil {
33+
return nil, fmt.Errorf("not able to get descriptor from template: %w", err)
34+
}
35+
manifests, err := r.ManifestRepository.ListByLabel(ctx, k8slabels.SelectorFromSet(k8slabels.Set{
36+
shared.IsMandatoryModule: "true",
37+
}))
38+
39+
if client.IgnoreNotFound(err) != nil {
40+
return nil, fmt.Errorf("not able to list mandatory module manifests: %w", err)
41+
}
42+
43+
return filterManifestsByAnnotation(manifests.Items, shared.FQDN, descriptor.GetName()), nil
44+
}
45+
46+
func filterManifestsByAnnotation(manifests []v1beta2.Manifest,
47+
annotationKey, annotationValue string,
48+
) []v1beta2.Manifest {
49+
filteredManifests := make([]v1beta2.Manifest, 0)
50+
for _, manifest := range manifests {
51+
if manifest.Annotations[annotationKey] == annotationValue {
52+
filteredManifests = append(filteredManifests, manifest)
53+
}
54+
}
55+
return filteredManifests
56+
}

0 commit comments

Comments
 (0)