From 4d72c21e16dd25430b40ffcb81e2732a0b750a25 Mon Sep 17 00:00:00 2001 From: Piyush Kumar Date: Fri, 28 Jun 2024 11:39:53 +0530 Subject: [PATCH] implement archive managed services --- apps/infra/internal/domain/api.go | 2 ++ .../domain/cluster-managed-service.go | 32 +++++++++++++++++++ apps/infra/internal/domain/clusters.go | 4 +++ .../entities/cluster-managed-service.go | 2 ++ .../field-constants/generated_constants.go | 1 + 5 files changed, 41 insertions(+) diff --git a/apps/infra/internal/domain/api.go b/apps/infra/internal/domain/api.go index fd9d23bd3..962dbd689 100644 --- a/apps/infra/internal/domain/api.go +++ b/apps/infra/internal/domain/api.go @@ -135,10 +135,12 @@ type Domain interface { ListClusterManagedServices(ctx InfraContext, search map[string]repos.MatchFilter, pagination repos.CursorPagination) (*repos.PaginatedRecord[*entities.ClusterManagedService], error) GetClusterManagedService(ctx InfraContext, serviceName string) (*entities.ClusterManagedService, error) + CreateClusterManagedService(ctx InfraContext, cmsvc entities.ClusterManagedService) (*entities.ClusterManagedService, error) CloneClusterManagedService(ctx InfraContext, args CloneManagedServiceArgs) (*entities.ClusterManagedService, error) UpdateClusterManagedService(ctx InfraContext, cmsvc entities.ClusterManagedService) (*entities.ClusterManagedService, error) DeleteClusterManagedService(ctx InfraContext, name string) error + ArchiveClusterManagedService(ctx InfraContext, clusterName string) error OnClusterManagedServiceApplyError(ctx InfraContext, clusterName, name, errMsg string, opts UpdateAndDeleteOpts) error OnClusterManagedServiceDeleteMessage(ctx InfraContext, clusterName string, service entities.ClusterManagedService) error diff --git a/apps/infra/internal/domain/cluster-managed-service.go b/apps/infra/internal/domain/cluster-managed-service.go index 26edf0717..3cea9b450 100644 --- a/apps/infra/internal/domain/cluster-managed-service.go +++ b/apps/infra/internal/domain/cluster-managed-service.go @@ -186,6 +186,38 @@ func (d *domain) CloneClusterManagedService(ctx InfraContext, args CloneManagedS return destMsvc, nil } +func (d *domain) ArchiveClusterManagedService(ctx InfraContext, clusterName string) error { + filter := repos.Filter{ + fields.AccountName: ctx.AccountName, + fields.ClusterName: clusterName, + } + + msvc, err := d.clusterManagedServiceRepo.Find(ctx, repos.Query{ + Filter: filter, + Sort: nil, + }) + if err != nil { + return errors.NewE(err) + } + + for i := range msvc { + patchForUpdate := repos.Document{ + fc.ClusterManagedServiceIsArchived: true, + } + patchFilter := repos.Filter{ + fields.AccountName: ctx.AccountName, + fields.ClusterName: clusterName, + fields.MetadataName: msvc[i].Name, + } + + _, err := d.clusterManagedServiceRepo.Patch(ctx, patchFilter, patchForUpdate) + if err != nil { + return errors.NewE(err) + } + } + return nil +} + func (d *domain) UpdateClusterManagedService(ctx InfraContext, cmsvc entities.ClusterManagedService) (*entities.ClusterManagedService, error) { if err := d.canPerformActionInAccount(ctx, iamT.UpdateClusterManagedService); err != nil { return nil, errors.NewE(err) diff --git a/apps/infra/internal/domain/clusters.go b/apps/infra/internal/domain/clusters.go index 72365b9a3..c01d8d865 100644 --- a/apps/infra/internal/domain/clusters.go +++ b/apps/infra/internal/domain/clusters.go @@ -762,6 +762,10 @@ func (d *domain) DeleteCluster(ctx InfraContext, name string) error { return errors.NewE(err) } + if err := d.ArchiveClusterManagedService(ctx, name); err != nil { + return errors.NewE(err) + } + d.resourceEventPublisher.PublishInfraEvent(ctx, ResourceTypeCluster, ucluster.Name, PublishUpdate) if err := d.deleteK8sResource(ctx, &ucluster.Cluster); err != nil { if !apiErrors.IsNotFound(err) { diff --git a/apps/infra/internal/entities/cluster-managed-service.go b/apps/infra/internal/entities/cluster-managed-service.go index 51c6de37d..e5d6919bb 100644 --- a/apps/infra/internal/entities/cluster-managed-service.go +++ b/apps/infra/internal/entities/cluster-managed-service.go @@ -16,6 +16,8 @@ type ClusterManagedService struct { AccountName string `json:"accountName" graphql:"noinput"` ClusterName string `json:"clusterName"` + IsArchived *bool `json:"isArchived,omitempty" graphql:"noinput"` + SyncedOutputSecretRef *corev1.Secret `json:"syncedOutputSecretRef" graphql:"ignore"` common.ResourceMetadata `json:",inline"` diff --git a/apps/infra/internal/entities/field-constants/generated_constants.go b/apps/infra/internal/entities/field-constants/generated_constants.go index 25a960a60..7d4f19bc3 100644 --- a/apps/infra/internal/entities/field-constants/generated_constants.go +++ b/apps/infra/internal/entities/field-constants/generated_constants.go @@ -153,6 +153,7 @@ const ( // constant vars generated for struct ClusterManagedService const ( + ClusterManagedServiceIsArchived = "isArchived" ClusterManagedServiceOutput = "output" ClusterManagedServiceOutputCredentialsRef = "output.credentialsRef" ClusterManagedServiceOutputCredentialsRefName = "output.credentialsRef.name"