Skip to content
This repository was archived by the owner on Jun 11, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions apps/console/internal/domain/environment.go
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@ func (d *domain) CloneEnvironment(ctx ConsoleContext, projectName string, source
},
Spec: crdsv1.EnvironmentSpec{
ProjectName: projectName,
TargetNamespace: fmt.Sprintf("env-%s", destinationEnvName),
TargetNamespace: d.getEnvironmentTargetNamespace(projectName, destinationEnvName),
Routing: &crdsv1.EnvironmentRouting{
Mode: envRoutingMode,
},
Expand Down Expand Up @@ -279,7 +279,7 @@ func (d *domain) CloneEnvironment(ctx ConsoleContext, projectName string, source

resourceMetadata := func(dn string) common.ResourceMetadata {
return common.ResourceMetadata{
DisplayName: fmt.Sprintf("clone of %s", dn),
DisplayName: dn,
CreatedBy: common.CreatedOrUpdatedBy{
UserId: ctx.UserId,
UserName: ctx.UserName,
Expand Down
134 changes: 132 additions & 2 deletions apps/infra/internal/app/graph/generated/generated.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions apps/infra/internal/app/graph/schema.graphqls
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,8 @@ type Mutation {
infra_createHelmRelease(clusterName: String!, release: HelmReleaseIn!): HelmRelease @isLoggedInAndVerified @hasAccount
infra_updateHelmRelease(clusterName: String!, release: HelmReleaseIn!): HelmRelease @isLoggedInAndVerified @hasAccount
infra_deleteHelmRelease(clusterName: String!, releaseName: String!): Boolean! @isLoggedInAndVerified @hasAccount

infra_deletePV(clusterName: String!, pvName: String!): Boolean! @isLoggedInAndVerified @hasAccount
}

type EncodedValue {
Expand Down
14 changes: 13 additions & 1 deletion apps/infra/internal/app/graph/schema.resolvers.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions apps/infra/internal/domain/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,7 @@ type Domain interface {
GetPV(ctx InfraContext, clusterName string, pvName string) (*entities.PersistentVolume, error)
OnPVUpdateMessage(ctx InfraContext, clusterName string, pv entities.PersistentVolume, status types.ResourceStatus, opts UpdateAndDeleteOpts) error
OnPVDeleteMessage(ctx InfraContext, clusterName string, pv entities.PersistentVolume) error
DeletePV(ctx InfraContext, clusterName string, pvName string) error

OnIngressUpdateMessage(ctx InfraContext, clusterName string, ingress networkingv1.Ingress, status types.ResourceStatus, opts UpdateAndDeleteOpts) error
OnIngressDeleteMessage(ctx InfraContext, clusterName string, ingress networkingv1.Ingress) error
Expand Down
21 changes: 21 additions & 0 deletions apps/infra/internal/domain/clusters.go
Original file line number Diff line number Diff line change
Expand Up @@ -405,6 +405,27 @@ func (d *domain) DeleteCluster(ctx InfraContext, name string) error {
return errors.NewE(err)
}

filter := repos.Filter{
fields.AccountName: ctx.AccountName,
fields.ClusterName: name,
}

npCount, err := d.nodePoolRepo.Count(ctx, filter)
if err != nil {
return errors.NewE(err)
}
if npCount != 0 {
return errors.Newf("delete nodepool first, aborting cluster deletion")
}

pvCount, err := d.pvRepo.Count(ctx, filter)
if err != nil {
return errors.NewE(err)
}
if pvCount != 0 {
return errors.Newf("delete pvs first, aborting cluster deletion")
}

ucluster, err := d.clusterRepo.Patch(
ctx,
repos.Filter{
Expand Down
25 changes: 25 additions & 0 deletions apps/infra/internal/domain/pv.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package domain

import (
iamT "github.com/kloudlite/api/apps/iam/types"
"github.com/kloudlite/api/apps/infra/internal/entities"
"github.com/kloudlite/api/common"
"github.com/kloudlite/api/common/fields"
"github.com/kloudlite/api/pkg/errors"
"github.com/kloudlite/api/pkg/repos"
Expand Down Expand Up @@ -35,6 +37,29 @@ func (d *domain) ListPVs(ctx InfraContext, clusterName string, search map[string
return d.pvRepo.FindPaginated(ctx, d.nodePoolRepo.MergeMatchFilters(filter, search), pagination)
}

func (d *domain) DeletePV(ctx InfraContext, clusterName string, pvName string) error {
Comment thread
nxtcoder17 marked this conversation as resolved.
// FIXME: (IAM role binding for DeletePV)
if err := d.canPerformActionInAccount(ctx, iamT.DeleteNodepool); err != nil {
return errors.NewE(err)
}

upv, err := d.pvRepo.Patch(
ctx,
repos.Filter{
fields.ClusterName: clusterName,
fields.AccountName: ctx.AccountName,
fields.MetadataName: pvName,
},
common.PatchForMarkDeletion(),
)
if err != nil {
return errors.NewE(err)
}

d.resourceEventPublisher.PublishResourceEvent(ctx, clusterName, ResourceTypeNodePool, upv.Name, PublishUpdate)
return d.resDispatcher.DeleteFromTargetCluster(ctx, clusterName, &upv.PersistentVolume)
}

// OnPVDeleteMessage implements Domain.
func (d *domain) OnPVDeleteMessage(ctx InfraContext, clusterName string, pv entities.PersistentVolume) error {
if err := d.pvRepo.DeleteOne(ctx, repos.Filter{
Expand Down