Skip to content

Commit ad58135

Browse files
authored
Delete secrets on cluster removal (#177)
1 parent c5977d4 commit ad58135

File tree

2 files changed

+54
-1
lines changed

2 files changed

+54
-1
lines changed

pkg/controller/atlascluster/atlascluster_controller.go

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import (
3434
mdbv1 "github.com/mongodb/mongodb-atlas-kubernetes/pkg/api/v1"
3535
"github.com/mongodb/mongodb-atlas-kubernetes/pkg/api/v1/status"
3636
"github.com/mongodb/mongodb-atlas-kubernetes/pkg/controller/atlas"
37+
"github.com/mongodb/mongodb-atlas-kubernetes/pkg/controller/connectionsecret"
3738
"github.com/mongodb/mongodb-atlas-kubernetes/pkg/controller/customresource"
3839
"github.com/mongodb/mongodb-atlas-kubernetes/pkg/controller/statushandler"
3940
"github.com/mongodb/mongodb-atlas-kubernetes/pkg/controller/watch"
@@ -176,7 +177,7 @@ func (r *AtlasClusterReconciler) Delete(e event.DeleteEvent) error {
176177
}
177178

178179
if err != nil {
179-
log.Errorw("cannot delete Atlas cluster", "error", err)
180+
log.Errorw("Cannot delete Atlas cluster", "error", err)
180181
time.Sleep(workflow.DefaultRetry)
181182
continue
182183
}
@@ -187,5 +188,17 @@ func (r *AtlasClusterReconciler) Delete(e event.DeleteEvent) error {
187188

188189
log.Error("Failed to delete Atlas cluster in time")
189190
}()
191+
192+
secrets, err := connectionsecret.ListByClusterName(r.Client, cluster.Namespace, project.ID(), cluster.Spec.Name)
193+
if err != nil {
194+
return fmt.Errorf("failed to find connection secrets for the user: %w", err)
195+
}
196+
197+
for i := range secrets {
198+
if err := r.Client.Delete(context.Background(), &secrets[i]); err != nil {
199+
log.Errorw("Failed to delete secret", "secretName", secrets[i].Name, "error", err)
200+
}
201+
}
202+
190203
return nil
191204
}

test/int/cluster_test.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -392,6 +392,46 @@ var _ = Describe("AtlasCluster", func() {
392392
})
393393
})
394394
})
395+
396+
Describe("Create cluster, user, delete cluster and check secrets are removed", func() {
397+
It("Should Succeed", func() {
398+
createdCluster = mdbv1.DefaultGCPCluster(namespace.Name, createdProject.Name)
399+
By(fmt.Sprintf("Creating the Cluster %s", kube.ObjectKeyFromObject(createdCluster)), func() {
400+
Expect(k8sClient.Create(context.Background(), createdCluster)).ToNot(HaveOccurred())
401+
402+
Eventually(testutil.WaitFor(k8sClient, createdCluster, status.TrueCondition(status.ReadyType), validateClusterCreatingFunc()),
403+
1800, interval).Should(BeTrue())
404+
405+
doCommonChecks()
406+
checkAtlasState()
407+
})
408+
409+
passwordSecret := buildPasswordSecret(UserPasswordSecret, DBUserPassword)
410+
Expect(k8sClient.Create(context.Background(), &passwordSecret)).To(Succeed())
411+
412+
createdDBUser := mdbv1.DefaultDBUser(namespace.Name, "test-db-user", createdProject.Name).WithPasswordSecret(UserPasswordSecret)
413+
By(fmt.Sprintf("Creating the Database User %s", kube.ObjectKeyFromObject(createdDBUser)), func() {
414+
Expect(k8sClient.Create(context.Background(), createdDBUser)).ToNot(HaveOccurred())
415+
416+
Eventually(testutil.WaitFor(k8sClient, createdDBUser, status.TrueCondition(status.ReadyType)),
417+
80, interval).Should(BeTrue())
418+
})
419+
420+
By("Removing Atlas Cluster "+createdCluster.Name, func() {
421+
Expect(k8sClient.Delete(context.Background(), createdCluster)).To(Succeed())
422+
Eventually(checkAtlasClusterRemoved(createdProject.Status.ID, createdCluster.Spec.Name), 600, interval).Should(BeTrue())
423+
})
424+
425+
By("Checking that Secrets got removed", func() {
426+
secretNames := []string{kube.NormalizeIdentifier(fmt.Sprintf("%s-%s-%s", createdProject.Spec.Name, createdCluster.Spec.Name, createdDBUser.Spec.Username))}
427+
Eventually(checkSecretsDontExist(namespace.Name, secretNames), 50, interval).Should(BeTrue())
428+
checkNumberOfConnectionSecrets(k8sClient, *createdProject, 0)
429+
})
430+
431+
// prevent cleanup from failing due to cluster already deleted
432+
createdCluster = nil
433+
})
434+
})
395435
})
396436

397437
func validateClusterCreatingFunc() func(a mdbv1.AtlasCustomResource) {

0 commit comments

Comments
 (0)