From 06133007cafb6bee56409abc3276c87e2a1bc0a3 Mon Sep 17 00:00:00 2001 From: lenglet-k Date: Thu, 17 Oct 2024 19:03:28 +0200 Subject: [PATCH 1/4] feat: add persistentVolumeClaimRetentionPolicy --- pkg/kube/statefulset/merge_statefulset_test.go | 6 ++++++ pkg/kube/statefulset/statefulset.go | 6 ++++++ pkg/util/merge/merge_statefulset.go | 7 +++++++ 3 files changed, 19 insertions(+) diff --git a/pkg/kube/statefulset/merge_statefulset_test.go b/pkg/kube/statefulset/merge_statefulset_test.go index 7ae2acd53..303a562b9 100644 --- a/pkg/kube/statefulset/merge_statefulset_test.go +++ b/pkg/kube/statefulset/merge_statefulset_test.go @@ -60,6 +60,9 @@ func TestGetLabelSelectorRequirementByKey(t *testing.T) { } func TestMergeSpec(t *testing.T) { + var overridePersistentVolumeClaimRetentionPolicy appsv1.StatefulSetPersistentVolumeClaimRetentionPolicy + overridePersistentVolumeClaimRetentionPolicy.WhenDeleted = "Deleted" + overridePersistentVolumeClaimRetentionPolicy.WhenScaled = "Deleted" original := New( WithName("original"), @@ -67,6 +70,7 @@ func TestMergeSpec(t *testing.T) { WithReplicas(3), WithRevisionHistoryLimit(10), WithPodManagementPolicyType(appsv1.OrderedReadyPodManagement), + WithPersistentVolumeClaimRetentionPolicy(appsv1.StatefulSetPersistentVolumeClaimRetentionPolicy{}), WithSelector(&metav1.LabelSelector{ MatchLabels: map[string]string{ "a": "1", @@ -95,6 +99,7 @@ func TestMergeSpec(t *testing.T) { WithReplicas(5), WithRevisionHistoryLimit(15), WithPodManagementPolicyType(appsv1.ParallelPodManagement), + WithPersistentVolumeClaimRetentionPolicy(overridePersistentVolumeClaimRetentionPolicy), WithSelector(&metav1.LabelSelector{ MatchLabels: map[string]string{ "a": "10", @@ -124,6 +129,7 @@ func TestMergeSpec(t *testing.T) { assert.Equal(t, int32(5), *mergedSpec.Replicas) assert.Equal(t, int32(15), *mergedSpec.RevisionHistoryLimit) assert.Equal(t, appsv1.ParallelPodManagement, mergedSpec.PodManagementPolicy) + assert.Equal(t, overridePersistentVolumeClaimRetentionPolicy, *mergedSpec.PersistentVolumeClaimRetentionPolicy) }) matchLabels := mergedSpec.Selector.MatchLabels diff --git a/pkg/kube/statefulset/statefulset.go b/pkg/kube/statefulset/statefulset.go index d6e7660cb..1d24bd15f 100644 --- a/pkg/kube/statefulset/statefulset.go +++ b/pkg/kube/statefulset/statefulset.go @@ -315,6 +315,12 @@ func WithObjectMetadata(labels map[string]string, annotations map[string]string) } } +func WithPersistentVolumeClaimRetentionPolicy(persistentVolumeClaimRetentionPolicy appsv1.StatefulSetPersistentVolumeClaimRetentionPolicy) Modification { + return func(set *appsv1.StatefulSet) { + set.Spec.PersistentVolumeClaimRetentionPolicy = &persistentVolumeClaimRetentionPolicy + } +} + func findVolumeClaimIndexByName(name string, pvcs []corev1.PersistentVolumeClaim) int { for idx, pvc := range pvcs { if pvc.Name == name { diff --git a/pkg/util/merge/merge_statefulset.go b/pkg/util/merge/merge_statefulset.go index a6a9f4879..a8a34e430 100644 --- a/pkg/util/merge/merge_statefulset.go +++ b/pkg/util/merge/merge_statefulset.go @@ -53,6 +53,13 @@ func StatefulSetSpecs(defaultSpec, overrideSpec appsv1.StatefulSetSpec) appsv1.S mergedSpec.ServiceName = overrideSpec.ServiceName } + if overrideSpec.PersistentVolumeClaimRetentionPolicy.WhenDeleted != "" { + mergedSpec.PersistentVolumeClaimRetentionPolicy.WhenDeleted = overrideSpec.PersistentVolumeClaimRetentionPolicy.WhenDeleted + } + + if overrideSpec.PersistentVolumeClaimRetentionPolicy.WhenScaled != "" { + mergedSpec.PersistentVolumeClaimRetentionPolicy.WhenScaled = overrideSpec.PersistentVolumeClaimRetentionPolicy.WhenScaled + } mergedSpec.Template = PodTemplateSpecs(defaultSpec.Template, overrideSpec.Template) mergedSpec.VolumeClaimTemplates = VolumeClaimTemplates(defaultSpec.VolumeClaimTemplates, overrideSpec.VolumeClaimTemplates) return mergedSpec From ba6a98b9e1eda3d525ce1958b2e4dba56f78cca4 Mon Sep 17 00:00:00 2001 From: lenglet-k Date: Fri, 18 Oct 2024 15:34:21 +0200 Subject: [PATCH 2/4] feat: simplify override var Signed-off-by: lenglet-k --- ...sistent_volume_claim_retention_policy.yaml | 46 +++++++++++++++ .../statefulset/merge_statefulset_test.go | 4 +- pkg/util/merge/merge_statefulset.go | 9 ++- test/e2e/mongodbtests/mongodbtests.go | 12 ++++ ...rsistentvolumeclaimretentionpolicy_test.go | 59 +++++++++++++++++++ test/e2e/util/wait/wait.go | 9 +++ 6 files changed, 131 insertions(+), 8 deletions(-) create mode 100644 config/samples/mongodb.com_v1_mongodbcommunity_persistent_volume_claim_retention_policy.yaml create mode 100644 test/e2e/replica_set_custom_persistentvolumclaimretentionpolicy_test/replica_set_custom_persistentvolumeclaimretentionpolicy_test.go diff --git a/config/samples/mongodb.com_v1_mongodbcommunity_persistent_volume_claim_retention_policy.yaml b/config/samples/mongodb.com_v1_mongodbcommunity_persistent_volume_claim_retention_policy.yaml new file mode 100644 index 000000000..da944f843 --- /dev/null +++ b/config/samples/mongodb.com_v1_mongodbcommunity_persistent_volume_claim_retention_policy.yaml @@ -0,0 +1,46 @@ +--- +apiVersion: mongodbcommunity.mongodb.com/v1 +kind: MongoDBCommunity +metadata: + name: mongodb-specify-readiness-probe-values +spec: + members: 3 + type: ReplicaSet + version: "6.0.5" + security: + authentication: + modes: ["SCRAM"] + users: + - name: my-user + db: admin + passwordSecretRef: # a reference to the secret that will be used to generate the user's password + name: my-user-password + roles: + - name: clusterAdmin + db: admin + - name: userAdminAnyDatabase + db: admin + scramCredentialsSecretName: my-scram + statefulSet: + spec: + persistentVolumeClaimRetentionPolicy: + WhenDeleted: "Delete" + WhenScaled: "Delete" + template: + spec: + containers: + - name: mongodb-agent + readinessProbe: + failureThreshold: 50 + initialDelaySeconds: 10 + +# the user credentials will be generated from this secret +# once the credentials are generated, this secret is no longer required +--- +apiVersion: v1 +kind: Secret +metadata: + name: my-user-password +type: Opaque +stringData: + password: diff --git a/pkg/kube/statefulset/merge_statefulset_test.go b/pkg/kube/statefulset/merge_statefulset_test.go index 303a562b9..94e018c65 100644 --- a/pkg/kube/statefulset/merge_statefulset_test.go +++ b/pkg/kube/statefulset/merge_statefulset_test.go @@ -60,9 +60,7 @@ func TestGetLabelSelectorRequirementByKey(t *testing.T) { } func TestMergeSpec(t *testing.T) { - var overridePersistentVolumeClaimRetentionPolicy appsv1.StatefulSetPersistentVolumeClaimRetentionPolicy - overridePersistentVolumeClaimRetentionPolicy.WhenDeleted = "Deleted" - overridePersistentVolumeClaimRetentionPolicy.WhenScaled = "Deleted" + overridePersistentVolumeClaimRetentionPolicy := appsv1.StatefulSetPersistentVolumeClaimRetentionPolicy{WhenDeleted: "Delete", WhenScaled: "Delete"} original := New( WithName("original"), diff --git a/pkg/util/merge/merge_statefulset.go b/pkg/util/merge/merge_statefulset.go index a8a34e430..4d76f2bd5 100644 --- a/pkg/util/merge/merge_statefulset.go +++ b/pkg/util/merge/merge_statefulset.go @@ -53,13 +53,12 @@ func StatefulSetSpecs(defaultSpec, overrideSpec appsv1.StatefulSetSpec) appsv1.S mergedSpec.ServiceName = overrideSpec.ServiceName } - if overrideSpec.PersistentVolumeClaimRetentionPolicy.WhenDeleted != "" { - mergedSpec.PersistentVolumeClaimRetentionPolicy.WhenDeleted = overrideSpec.PersistentVolumeClaimRetentionPolicy.WhenDeleted + if overrideSpec.PersistentVolumeClaimRetentionPolicy != nil { + overridePersistentVolumeClaimRetentionPolicy := appsv1.StatefulSetPersistentVolumeClaimRetentionPolicy{WhenDeleted: overrideSpec.PersistentVolumeClaimRetentionPolicy.WhenDeleted, + WhenScaled: overrideSpec.PersistentVolumeClaimRetentionPolicy.WhenScaled} + mergedSpec.PersistentVolumeClaimRetentionPolicy = &overridePersistentVolumeClaimRetentionPolicy } - if overrideSpec.PersistentVolumeClaimRetentionPolicy.WhenScaled != "" { - mergedSpec.PersistentVolumeClaimRetentionPolicy.WhenScaled = overrideSpec.PersistentVolumeClaimRetentionPolicy.WhenScaled - } mergedSpec.Template = PodTemplateSpecs(defaultSpec.Template, overrideSpec.Template) mergedSpec.VolumeClaimTemplates = VolumeClaimTemplates(defaultSpec.VolumeClaimTemplates, overrideSpec.VolumeClaimTemplates) return mergedSpec diff --git a/test/e2e/mongodbtests/mongodbtests.go b/test/e2e/mongodbtests/mongodbtests.go index aad73a450..6666bea58 100644 --- a/test/e2e/mongodbtests/mongodbtests.go +++ b/test/e2e/mongodbtests/mongodbtests.go @@ -221,6 +221,18 @@ func StatefulSetHasUpdateStrategy(ctx context.Context, mdb *mdbv1.MongoDBCommuni } } +// StatefulSetHasPersistentVolumeClaimRetentionPolicy verifies that the StatefulSet holding this MongoDB +// resource has the correct PersistentVolumeClaim Retention Policy +func StatefulSetHasPersistentVolumeClaimRetentionPolicy(ctx context.Context, mdb *mdbv1.MongoDBCommunity, persistentVolumeClaimRetentionPolicy appsv1.StatefulSetPersistentVolumeClaimRetentionPolicy) func(t *testing.T) { + return func(t *testing.T) { + err := wait.ForStatefulSetToHavePersistentVolumeClaimRetentionPolicy(ctx, t, mdb, persistentVolumeClaimRetentionPolicy, wait.RetryInterval(time.Second*15), wait.Timeout(time.Minute*8)) + if err != nil { + t.Fatal(err) + } + t.Logf("StatefulSet %s/%s is ready!", mdb.Namespace, mdb.Name) + } +} + // GetPersistentVolumes returns all persistent volumes on the cluster func getPersistentVolumesList(ctx context.Context) (*corev1.PersistentVolumeList, error) { return e2eutil.TestClient.CoreV1Client.PersistentVolumes().List(ctx, metav1.ListOptions{}) diff --git a/test/e2e/replica_set_custom_persistentvolumclaimretentionpolicy_test/replica_set_custom_persistentvolumeclaimretentionpolicy_test.go b/test/e2e/replica_set_custom_persistentvolumclaimretentionpolicy_test/replica_set_custom_persistentvolumeclaimretentionpolicy_test.go new file mode 100644 index 000000000..c96b197d5 --- /dev/null +++ b/test/e2e/replica_set_custom_persistentvolumclaimretentionpolicy_test/replica_set_custom_persistentvolumeclaimretentionpolicy_test.go @@ -0,0 +1,59 @@ +package replica_set_custom_persistentvolumclaimretentionpolicy_test + +import ( + "context" + "fmt" + "os" + "testing" + + e2eutil "github.com/mongodb/mongodb-kubernetes-operator/test/e2e" + "github.com/mongodb/mongodb-kubernetes-operator/test/e2e/mongodbtests" + "github.com/mongodb/mongodb-kubernetes-operator/test/e2e/setup" + . "github.com/mongodb/mongodb-kubernetes-operator/test/e2e/util/mongotester" + appsv1 "k8s.io/api/apps/v1" +) + +func TestMain(m *testing.M) { + code, err := e2eutil.RunTest(m) + if err != nil { + fmt.Println(err) + } + os.Exit(code) +} + +func TestReplicaSetCustomPersistentVolumeClaimRetentionPolicy(t *testing.T) { + ctx := context.Background() + testCtx := setup.Setup(ctx, t) + defer testCtx.Teardown() + + mdb, user := e2eutil.NewTestMongoDB(testCtx, "mdb0", "") + var test appsv1.StatefulSetPersistentVolumeClaimRetentionPolicy + test.WhenDeleted = "Deleted" + test.WhenScaled = "Deleted" + mdb.Spec.StatefulSetConfiguration.SpecWrapper.Spec.PersistentVolumeClaimRetentionPolicy = &test + scramUser := mdb.GetAuthUsers()[0] + + _, err := setup.GeneratePasswordForUser(testCtx, user, "") + if err != nil { + t.Fatal(err) + } + + tester, err := FromResource(ctx, t, mdb) + if err != nil { + t.Fatal(err) + } + + t.Run("Create MongoDB Resource", mongodbtests.CreateMongoDBResource(&mdb, testCtx)) + t.Run("Basic tests", mongodbtests.BasicFunctionality(ctx, &mdb)) + t.Run("Keyfile authentication is configured", tester.HasKeyfileAuth(3)) + t.Run("Test Basic Connectivity", tester.ConnectivitySucceeds()) + t.Run("Test SRV Connectivity", tester.ConnectivitySucceeds(WithURI(mdb.MongoSRVURI("")), WithoutTls(), WithReplicaSet((mdb.Name)))) + t.Run("Test Basic Connectivity with generated connection string secret", + tester.ConnectivitySucceeds(WithURI(mongodbtests.GetConnectionStringForUser(ctx, mdb, scramUser)))) + t.Run("Test SRV Connectivity with generated connection string secret", + tester.ConnectivitySucceeds(WithURI(mongodbtests.GetSrvConnectionStringForUser(ctx, mdb, scramUser)))) + t.Run("Ensure Authentication", tester.EnsureAuthenticationIsConfigured(3)) + t.Run("AutomationConfig has the correct version", mongodbtests.AutomationConfigVersionHasTheExpectedVersion(ctx, &mdb, 1)) + t.Run("Statefulset has the expectd PersistentVolumeClaimRetentionPolicy", mongodbtests.StatefulSetHasPersistentVolumeClaimRetentionPolicy(ctx, &mdb, test)) + t.Run("Cluster has the expected labels and annotations", mongodbtests.HasExpectedMetadata(ctx, &mdb, e2eutil.TestLabels(), e2eutil.TestAnnotations())) +} diff --git a/test/e2e/util/wait/wait.go b/test/e2e/util/wait/wait.go index 54798860e..1043fe07f 100644 --- a/test/e2e/util/wait/wait.go +++ b/test/e2e/util/wait/wait.go @@ -97,6 +97,15 @@ func ForStatefulSetToHaveUpdateStrategy(ctx context.Context, t *testing.T, mdb * }) } +// ForStatefulSetToHavePersistentVolumeClaimRetentionPolicy waits until all replicas of the StatefulSet with the given name +// have reached the ready status +func ForStatefulSetToHavePersistentVolumeClaimRetentionPolicy(ctx context.Context, t *testing.T, mdb *mdbv1.MongoDBCommunity, persistentVolumeClaimRetentionPolicy appsv1.StatefulSetPersistentVolumeClaimRetentionPolicy, opts ...Configuration) error { + options := newOptions(opts...) + return waitForStatefulSetCondition(ctx, t, mdb, options, func(sts appsv1.StatefulSet) bool { + return sts.Spec.PersistentVolumeClaimRetentionPolicy.WhenScaled == persistentVolumeClaimRetentionPolicy.WhenScaled + }) +} + // ForStatefulSetToBeReady waits until all replicas of the StatefulSet with the given name // have reached the ready status func ForStatefulSetToBeReady(ctx context.Context, t *testing.T, mdb *mdbv1.MongoDBCommunity, opts ...Configuration) error { From d442b05875bbeead50f1519f4f076043f680ea47 Mon Sep 17 00:00:00 2001 From: lenglet-k Date: Thu, 24 Oct 2024 16:17:41 +0200 Subject: [PATCH 3/4] feat: add e2e test for persistentVolumeClaimRetentionPolicy --- ...mmunity_persistent_volume_claim_retention_policy.yaml | 2 +- ...t_custom_persistentvolumeclaimretentionpolicy_test.go | 9 +++------ test/e2e/util/wait/wait.go | 5 ++++- 3 files changed, 8 insertions(+), 8 deletions(-) rename test/e2e/{replica_set_custom_persistentvolumclaimretentionpolicy_test => replica_set_custom_persistentvolumeclaimretentionpolicy_test}/replica_set_custom_persistentvolumeclaimretentionpolicy_test.go (81%) diff --git a/config/samples/mongodb.com_v1_mongodbcommunity_persistent_volume_claim_retention_policy.yaml b/config/samples/mongodb.com_v1_mongodbcommunity_persistent_volume_claim_retention_policy.yaml index da944f843..fe4d83edf 100644 --- a/config/samples/mongodb.com_v1_mongodbcommunity_persistent_volume_claim_retention_policy.yaml +++ b/config/samples/mongodb.com_v1_mongodbcommunity_persistent_volume_claim_retention_policy.yaml @@ -2,7 +2,7 @@ apiVersion: mongodbcommunity.mongodb.com/v1 kind: MongoDBCommunity metadata: - name: mongodb-specify-readiness-probe-values + name: mongodb-specify-volumeclaimretention-values spec: members: 3 type: ReplicaSet diff --git a/test/e2e/replica_set_custom_persistentvolumclaimretentionpolicy_test/replica_set_custom_persistentvolumeclaimretentionpolicy_test.go b/test/e2e/replica_set_custom_persistentvolumeclaimretentionpolicy_test/replica_set_custom_persistentvolumeclaimretentionpolicy_test.go similarity index 81% rename from test/e2e/replica_set_custom_persistentvolumclaimretentionpolicy_test/replica_set_custom_persistentvolumeclaimretentionpolicy_test.go rename to test/e2e/replica_set_custom_persistentvolumeclaimretentionpolicy_test/replica_set_custom_persistentvolumeclaimretentionpolicy_test.go index c96b197d5..945f837da 100644 --- a/test/e2e/replica_set_custom_persistentvolumclaimretentionpolicy_test/replica_set_custom_persistentvolumeclaimretentionpolicy_test.go +++ b/test/e2e/replica_set_custom_persistentvolumeclaimretentionpolicy_test/replica_set_custom_persistentvolumeclaimretentionpolicy_test.go @@ -27,10 +27,8 @@ func TestReplicaSetCustomPersistentVolumeClaimRetentionPolicy(t *testing.T) { defer testCtx.Teardown() mdb, user := e2eutil.NewTestMongoDB(testCtx, "mdb0", "") - var test appsv1.StatefulSetPersistentVolumeClaimRetentionPolicy - test.WhenDeleted = "Deleted" - test.WhenScaled = "Deleted" - mdb.Spec.StatefulSetConfiguration.SpecWrapper.Spec.PersistentVolumeClaimRetentionPolicy = &test + overridePersistentVolumeClaim := appsv1.StatefulSetPersistentVolumeClaimRetentionPolicy{WhenDeleted: "Delete", WhenScaled: "Delete"} + mdb.Spec.StatefulSetConfiguration.SpecWrapper.Spec.PersistentVolumeClaimRetentionPolicy = &overridePersistentVolumeClaim scramUser := mdb.GetAuthUsers()[0] _, err := setup.GeneratePasswordForUser(testCtx, user, "") @@ -54,6 +52,5 @@ func TestReplicaSetCustomPersistentVolumeClaimRetentionPolicy(t *testing.T) { tester.ConnectivitySucceeds(WithURI(mongodbtests.GetSrvConnectionStringForUser(ctx, mdb, scramUser)))) t.Run("Ensure Authentication", tester.EnsureAuthenticationIsConfigured(3)) t.Run("AutomationConfig has the correct version", mongodbtests.AutomationConfigVersionHasTheExpectedVersion(ctx, &mdb, 1)) - t.Run("Statefulset has the expectd PersistentVolumeClaimRetentionPolicy", mongodbtests.StatefulSetHasPersistentVolumeClaimRetentionPolicy(ctx, &mdb, test)) - t.Run("Cluster has the expected labels and annotations", mongodbtests.HasExpectedMetadata(ctx, &mdb, e2eutil.TestLabels(), e2eutil.TestAnnotations())) + t.Run("Statefulset has the expected PersistentVolumeClaimRetentionPolicy", mongodbtests.StatefulSetHasPersistentVolumeClaimRetentionPolicy(ctx, &mdb, overridePersistentVolumeClaim)) } diff --git a/test/e2e/util/wait/wait.go b/test/e2e/util/wait/wait.go index 1043fe07f..eda0b135f 100644 --- a/test/e2e/util/wait/wait.go +++ b/test/e2e/util/wait/wait.go @@ -102,7 +102,10 @@ func ForStatefulSetToHaveUpdateStrategy(ctx context.Context, t *testing.T, mdb * func ForStatefulSetToHavePersistentVolumeClaimRetentionPolicy(ctx context.Context, t *testing.T, mdb *mdbv1.MongoDBCommunity, persistentVolumeClaimRetentionPolicy appsv1.StatefulSetPersistentVolumeClaimRetentionPolicy, opts ...Configuration) error { options := newOptions(opts...) return waitForStatefulSetCondition(ctx, t, mdb, options, func(sts appsv1.StatefulSet) bool { - return sts.Spec.PersistentVolumeClaimRetentionPolicy.WhenScaled == persistentVolumeClaimRetentionPolicy.WhenScaled + if sts.Spec.PersistentVolumeClaimRetentionPolicy.WhenScaled == persistentVolumeClaimRetentionPolicy.WhenScaled && sts.Spec.PersistentVolumeClaimRetentionPolicy.WhenDeleted == persistentVolumeClaimRetentionPolicy.WhenDeleted { + return true + } + return false }) } From 59ae420f4aa522f1e0eb828011907852c7fe419a Mon Sep 17 00:00:00 2001 From: lenglet-k Date: Wed, 27 Nov 2024 15:34:59 +0100 Subject: [PATCH 4/4] feat: update RELEASE_NOTES and add e2e test in github-actions --- .action_templates/jobs/tests.yaml | 2 ++ .github/workflows/e2e-fork.yml | 2 ++ .github/workflows/e2e.yml | 2 ++ docs/RELEASE_NOTES.md | 3 +++ 4 files changed, 9 insertions(+) diff --git a/.action_templates/jobs/tests.yaml b/.action_templates/jobs/tests.yaml index f360ee3d6..79f6c27c7 100644 --- a/.action_templates/jobs/tests.yaml +++ b/.action_templates/jobs/tests.yaml @@ -66,3 +66,5 @@ tests: distro: ubi - test-name: replica_set_remove_user distro: ubi + - test-name: replica_set_custom_persistentvolumeclaimretentionpolicy_test + distro: ubi \ No newline at end of file diff --git a/.github/workflows/e2e-fork.yml b/.github/workflows/e2e-fork.yml index eede9c4ed..3a8b171b3 100644 --- a/.github/workflows/e2e-fork.yml +++ b/.github/workflows/e2e-fork.yml @@ -151,6 +151,8 @@ jobs: distro: ubi - test-name: replica_set_remove_user distro: ubi + - test-name: replica_set_custom_persistentvolumeclaimretentionpolicy_test + distro: ubi steps: # template: .action_templates/steps/cancel-previous.yaml - name: Cancel Previous Runs diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 6eb0a6d53..e769cb403 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -157,6 +157,8 @@ jobs: distro: ubi - test-name: replica_set_remove_user distro: ubi + - test-name: replica_set_custom_persistentvolumeclaimretentionpolicy_test + distro: ubi steps: # template: .action_templates/steps/cancel-previous.yaml - name: Cancel Previous Runs diff --git a/docs/RELEASE_NOTES.md b/docs/RELEASE_NOTES.md index 280ab59b9..326c0dd5f 100644 --- a/docs/RELEASE_NOTES.md +++ b/docs/RELEASE_NOTES.md @@ -2,3 +2,6 @@ ## Added support for MongoDB 8.0.0 GA MongoDB 8.0.0 GA is now officially supported by the Operator + +## Added support for persistentVolumeClaimRetentionPolicy +Add persistentVolumeClaimRetentionPolicy on MongoDB statefulset.