Skip to content

Commit

Permalink
refactoring manifest repository
Browse files Browse the repository at this point in the history
  • Loading branch information
ruanxin committed Feb 27, 2025
1 parent 335e6ee commit 8fab2cb
Show file tree
Hide file tree
Showing 5 changed files with 76 additions and 45 deletions.
2 changes: 1 addition & 1 deletion internal/repository/kyma.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ func NewKymaRepository(client client.Client) *KymaRepository {
return &KymaRepository{Client: client}
}

func (r *KymaRepository) GetKyma(ctx context.Context, namespacedName client.ObjectKey) (*v1beta2.Kyma, error) {
func (r *KymaRepository) Get(ctx context.Context, namespacedName client.ObjectKey) (*v1beta2.Kyma, error) {
kyma := &v1beta2.Kyma{}
if err := r.Client.Get(ctx, namespacedName, kyma); err != nil {
return nil, fmt.Errorf("failed to get Kyma: %w", err)
Expand Down
48 changes: 12 additions & 36 deletions internal/repository/manifest.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,62 +8,38 @@ import (
"sigs.k8s.io/controller-runtime/pkg/client"
logf "sigs.k8s.io/controller-runtime/pkg/log"

"github.com/kyma-project/lifecycle-manager/api/shared"
"github.com/kyma-project/lifecycle-manager/api/v1beta2"
"github.com/kyma-project/lifecycle-manager/internal/descriptor/provider"
"github.com/kyma-project/lifecycle-manager/pkg/log"
)

type ManifestRepository struct {
Client client.Client
DescriptorProvider *provider.CachedDescriptorProvider
Client client.Client
}

func NewManifestRepository(client client.Client,
descriptorProvider *provider.CachedDescriptorProvider,
) *ManifestRepository {
return &ManifestRepository{
Client: client,
DescriptorProvider: descriptorProvider,
Client: client,
}
}

func (r *ManifestRepository) GetMandatoryManifests(ctx context.Context,
template *v1beta2.ModuleTemplate,
) ([]v1beta2.Manifest, error) {
manifests := &v1beta2.ManifestList{}
descriptor, err := r.DescriptorProvider.GetDescriptor(template)
if err != nil {
return nil, fmt.Errorf("not able to get descriptor from template: %w", err)
}
if err := r.Client.List(ctx, manifests, &client.ListOptions{
Namespace: template.Namespace,
LabelSelector: k8slabels.SelectorFromSet(k8slabels.Set{shared.IsMandatoryModule: "true"}),
}); client.IgnoreNotFound(err) != nil {
return nil, fmt.Errorf("not able to list mandatory module manifests: %w", err)
}

return filterManifestsByAnnotation(manifests.Items, shared.FQDN, descriptor.GetName()), nil
}

func (r *ManifestRepository) RemoveManifests(ctx context.Context, manifests []v1beta2.Manifest) error {
func (m *ManifestRepository) RemoveManifests(ctx context.Context, manifests []v1beta2.Manifest) error {
for _, manifest := range manifests {
if err := r.Client.Delete(ctx, &manifest); err != nil {
if err := m.Client.Delete(ctx, &manifest); err != nil {
return fmt.Errorf("not able to delete manifest %s/%s: %w", manifest.Namespace, manifest.Name, err)
}
}
logf.FromContext(ctx).V(log.DebugLevel).Info("Marked all Manifests for deletion")
return nil
}

func filterManifestsByAnnotation(manifests []v1beta2.Manifest,
annotationKey, annotationValue string,
) []v1beta2.Manifest {
filteredManifests := make([]v1beta2.Manifest, 0)
for _, manifest := range manifests {
if manifest.Annotations[annotationKey] == annotationValue {
filteredManifests = append(filteredManifests, manifest)
}
func (m *ManifestRepository) ListByLabel(ctx context.Context,
labelSelector k8slabels.Selector,
) (*v1beta2.ManifestList, error) {
manifestList := &v1beta2.ManifestList{}
if err := m.Client.List(ctx, manifestList,
&client.ListOptions{LabelSelector: labelSelector}); err != nil {
return nil, fmt.Errorf("could not list ManifestList: %w", err)
}
return filteredManifests
return manifestList, nil
}
6 changes: 3 additions & 3 deletions internal/repository/module_template.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,10 @@ func (m *ModuleTemplateRepository) Update(ctx context.Context,
func (m *ModuleTemplateRepository) ListByLabel(ctx context.Context,
labelSelector k8slabels.Selector,
) (*v1beta2.ModuleTemplateList, error) {
mandatoryModuleTemplateList := &v1beta2.ModuleTemplateList{}
if err := m.Client.List(ctx, mandatoryModuleTemplateList,
moduleTemplateList := &v1beta2.ModuleTemplateList{}
if err := m.Client.List(ctx, moduleTemplateList,
&client.ListOptions{LabelSelector: labelSelector}); err != nil {
return nil, fmt.Errorf("could not list ModuleTemplates: %w", err)
}
return mandatoryModuleTemplateList, nil
return moduleTemplateList, nil
}
10 changes: 6 additions & 4 deletions internal/service/mandatory_module_deletion.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,21 +12,23 @@ import (
)

type MandatoryModuleDeletionService struct {
ManifestRepository *repository.ManifestRepository
manifestRepository *repository.ManifestRepository
manifestService *ManifestService
}

func NewMandatoryModuleDeletionService(client client.Client,
descriptorProvider *provider.CachedDescriptorProvider,
) *MandatoryModuleDeletionService {
return &MandatoryModuleDeletionService{
ManifestRepository: repository.NewManifestRepository(client, descriptorProvider),
manifestRepository: repository.NewManifestRepository(client),
manifestService: NewManifestService(client, descriptorProvider),
}
}

func (s *MandatoryModuleDeletionService) DeleteMandatoryModules(ctx context.Context,
template *v1beta2.ModuleTemplate,
) (bool, error) {
manifests, err := s.ManifestRepository.GetMandatoryManifests(ctx, template)
manifests, err := s.manifestService.GetMandatoryManifests(ctx, template)
if err != nil {
return false, fmt.Errorf("failed to get MandatoryModuleManifests: %w", err)
}
Expand All @@ -35,7 +37,7 @@ func (s *MandatoryModuleDeletionService) DeleteMandatoryModules(ctx context.Cont
return true, nil
}

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

Expand Down
55 changes: 54 additions & 1 deletion internal/service/manifest.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,56 @@
package service

type ManifestService struct{}
import (
"context"
"fmt"

k8slabels "k8s.io/apimachinery/pkg/labels"
"sigs.k8s.io/controller-runtime/pkg/client"

"github.com/kyma-project/lifecycle-manager/api/shared"
"github.com/kyma-project/lifecycle-manager/api/v1beta2"
"github.com/kyma-project/lifecycle-manager/internal/descriptor/provider"
"github.com/kyma-project/lifecycle-manager/internal/repository"
)

type ManifestService struct {
DescriptorProvider *provider.CachedDescriptorProvider
ManifestRepository *repository.ManifestRepository
}

func NewManifestService(client client.Client, descriptorProvider *provider.CachedDescriptorProvider) *ManifestService {
return &ManifestService{
DescriptorProvider: descriptorProvider,
ManifestRepository: repository.NewManifestRepository(client),
}
}

func (r *ManifestService) GetMandatoryManifests(ctx context.Context,
template *v1beta2.ModuleTemplate,
) ([]v1beta2.Manifest, error) {
descriptor, err := r.DescriptorProvider.GetDescriptor(template)
if err != nil {
return nil, fmt.Errorf("not able to get descriptor from template: %w", err)
}
manifests, err := r.ManifestRepository.ListByLabel(ctx, k8slabels.SelectorFromSet(k8slabels.Set{
shared.IsMandatoryModule: "true",
}))

if client.IgnoreNotFound(err) != nil {
return nil, fmt.Errorf("not able to list mandatory module manifests: %w", err)
}

return filterManifestsByAnnotation(manifests.Items, shared.FQDN, descriptor.GetName()), nil
}

func filterManifestsByAnnotation(manifests []v1beta2.Manifest,
annotationKey, annotationValue string,
) []v1beta2.Manifest {
filteredManifests := make([]v1beta2.Manifest, 0)
for _, manifest := range manifests {
if manifest.Annotations[annotationKey] == annotationValue {
filteredManifests = append(filteredManifests, manifest)
}
}
return filteredManifests
}

0 comments on commit 8fab2cb

Please sign in to comment.