Skip to content

Commit ba6a98b

Browse files
committed
feat: simplify override var
Signed-off-by: lenglet-k <[email protected]>
1 parent 0613300 commit ba6a98b

File tree

6 files changed

+131
-8
lines changed

6 files changed

+131
-8
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
---
2+
apiVersion: mongodbcommunity.mongodb.com/v1
3+
kind: MongoDBCommunity
4+
metadata:
5+
name: mongodb-specify-readiness-probe-values
6+
spec:
7+
members: 3
8+
type: ReplicaSet
9+
version: "6.0.5"
10+
security:
11+
authentication:
12+
modes: ["SCRAM"]
13+
users:
14+
- name: my-user
15+
db: admin
16+
passwordSecretRef: # a reference to the secret that will be used to generate the user's password
17+
name: my-user-password
18+
roles:
19+
- name: clusterAdmin
20+
db: admin
21+
- name: userAdminAnyDatabase
22+
db: admin
23+
scramCredentialsSecretName: my-scram
24+
statefulSet:
25+
spec:
26+
persistentVolumeClaimRetentionPolicy:
27+
WhenDeleted: "Delete"
28+
WhenScaled: "Delete"
29+
template:
30+
spec:
31+
containers:
32+
- name: mongodb-agent
33+
readinessProbe:
34+
failureThreshold: 50
35+
initialDelaySeconds: 10
36+
37+
# the user credentials will be generated from this secret
38+
# once the credentials are generated, this secret is no longer required
39+
---
40+
apiVersion: v1
41+
kind: Secret
42+
metadata:
43+
name: my-user-password
44+
type: Opaque
45+
stringData:
46+
password: <your-password-here>

Diff for: pkg/kube/statefulset/merge_statefulset_test.go

+1-3
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,7 @@ func TestGetLabelSelectorRequirementByKey(t *testing.T) {
6060
}
6161

6262
func TestMergeSpec(t *testing.T) {
63-
var overridePersistentVolumeClaimRetentionPolicy appsv1.StatefulSetPersistentVolumeClaimRetentionPolicy
64-
overridePersistentVolumeClaimRetentionPolicy.WhenDeleted = "Deleted"
65-
overridePersistentVolumeClaimRetentionPolicy.WhenScaled = "Deleted"
63+
overridePersistentVolumeClaimRetentionPolicy := appsv1.StatefulSetPersistentVolumeClaimRetentionPolicy{WhenDeleted: "Delete", WhenScaled: "Delete"}
6664

6765
original := New(
6866
WithName("original"),

Diff for: pkg/util/merge/merge_statefulset.go

+4-5
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,12 @@ func StatefulSetSpecs(defaultSpec, overrideSpec appsv1.StatefulSetSpec) appsv1.S
5353
mergedSpec.ServiceName = overrideSpec.ServiceName
5454
}
5555

56-
if overrideSpec.PersistentVolumeClaimRetentionPolicy.WhenDeleted != "" {
57-
mergedSpec.PersistentVolumeClaimRetentionPolicy.WhenDeleted = overrideSpec.PersistentVolumeClaimRetentionPolicy.WhenDeleted
56+
if overrideSpec.PersistentVolumeClaimRetentionPolicy != nil {
57+
overridePersistentVolumeClaimRetentionPolicy := appsv1.StatefulSetPersistentVolumeClaimRetentionPolicy{WhenDeleted: overrideSpec.PersistentVolumeClaimRetentionPolicy.WhenDeleted,
58+
WhenScaled: overrideSpec.PersistentVolumeClaimRetentionPolicy.WhenScaled}
59+
mergedSpec.PersistentVolumeClaimRetentionPolicy = &overridePersistentVolumeClaimRetentionPolicy
5860
}
5961

60-
if overrideSpec.PersistentVolumeClaimRetentionPolicy.WhenScaled != "" {
61-
mergedSpec.PersistentVolumeClaimRetentionPolicy.WhenScaled = overrideSpec.PersistentVolumeClaimRetentionPolicy.WhenScaled
62-
}
6362
mergedSpec.Template = PodTemplateSpecs(defaultSpec.Template, overrideSpec.Template)
6463
mergedSpec.VolumeClaimTemplates = VolumeClaimTemplates(defaultSpec.VolumeClaimTemplates, overrideSpec.VolumeClaimTemplates)
6564
return mergedSpec

Diff for: test/e2e/mongodbtests/mongodbtests.go

+12
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,18 @@ func StatefulSetHasUpdateStrategy(ctx context.Context, mdb *mdbv1.MongoDBCommuni
221221
}
222222
}
223223

224+
// StatefulSetHasPersistentVolumeClaimRetentionPolicy verifies that the StatefulSet holding this MongoDB
225+
// resource has the correct PersistentVolumeClaim Retention Policy
226+
func StatefulSetHasPersistentVolumeClaimRetentionPolicy(ctx context.Context, mdb *mdbv1.MongoDBCommunity, persistentVolumeClaimRetentionPolicy appsv1.StatefulSetPersistentVolumeClaimRetentionPolicy) func(t *testing.T) {
227+
return func(t *testing.T) {
228+
err := wait.ForStatefulSetToHavePersistentVolumeClaimRetentionPolicy(ctx, t, mdb, persistentVolumeClaimRetentionPolicy, wait.RetryInterval(time.Second*15), wait.Timeout(time.Minute*8))
229+
if err != nil {
230+
t.Fatal(err)
231+
}
232+
t.Logf("StatefulSet %s/%s is ready!", mdb.Namespace, mdb.Name)
233+
}
234+
}
235+
224236
// GetPersistentVolumes returns all persistent volumes on the cluster
225237
func getPersistentVolumesList(ctx context.Context) (*corev1.PersistentVolumeList, error) {
226238
return e2eutil.TestClient.CoreV1Client.PersistentVolumes().List(ctx, metav1.ListOptions{})
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package replica_set_custom_persistentvolumclaimretentionpolicy_test
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"os"
7+
"testing"
8+
9+
e2eutil "github.com/mongodb/mongodb-kubernetes-operator/test/e2e"
10+
"github.com/mongodb/mongodb-kubernetes-operator/test/e2e/mongodbtests"
11+
"github.com/mongodb/mongodb-kubernetes-operator/test/e2e/setup"
12+
. "github.com/mongodb/mongodb-kubernetes-operator/test/e2e/util/mongotester"
13+
appsv1 "k8s.io/api/apps/v1"
14+
)
15+
16+
func TestMain(m *testing.M) {
17+
code, err := e2eutil.RunTest(m)
18+
if err != nil {
19+
fmt.Println(err)
20+
}
21+
os.Exit(code)
22+
}
23+
24+
func TestReplicaSetCustomPersistentVolumeClaimRetentionPolicy(t *testing.T) {
25+
ctx := context.Background()
26+
testCtx := setup.Setup(ctx, t)
27+
defer testCtx.Teardown()
28+
29+
mdb, user := e2eutil.NewTestMongoDB(testCtx, "mdb0", "")
30+
var test appsv1.StatefulSetPersistentVolumeClaimRetentionPolicy
31+
test.WhenDeleted = "Deleted"
32+
test.WhenScaled = "Deleted"
33+
mdb.Spec.StatefulSetConfiguration.SpecWrapper.Spec.PersistentVolumeClaimRetentionPolicy = &test
34+
scramUser := mdb.GetAuthUsers()[0]
35+
36+
_, err := setup.GeneratePasswordForUser(testCtx, user, "")
37+
if err != nil {
38+
t.Fatal(err)
39+
}
40+
41+
tester, err := FromResource(ctx, t, mdb)
42+
if err != nil {
43+
t.Fatal(err)
44+
}
45+
46+
t.Run("Create MongoDB Resource", mongodbtests.CreateMongoDBResource(&mdb, testCtx))
47+
t.Run("Basic tests", mongodbtests.BasicFunctionality(ctx, &mdb))
48+
t.Run("Keyfile authentication is configured", tester.HasKeyfileAuth(3))
49+
t.Run("Test Basic Connectivity", tester.ConnectivitySucceeds())
50+
t.Run("Test SRV Connectivity", tester.ConnectivitySucceeds(WithURI(mdb.MongoSRVURI("")), WithoutTls(), WithReplicaSet((mdb.Name))))
51+
t.Run("Test Basic Connectivity with generated connection string secret",
52+
tester.ConnectivitySucceeds(WithURI(mongodbtests.GetConnectionStringForUser(ctx, mdb, scramUser))))
53+
t.Run("Test SRV Connectivity with generated connection string secret",
54+
tester.ConnectivitySucceeds(WithURI(mongodbtests.GetSrvConnectionStringForUser(ctx, mdb, scramUser))))
55+
t.Run("Ensure Authentication", tester.EnsureAuthenticationIsConfigured(3))
56+
t.Run("AutomationConfig has the correct version", mongodbtests.AutomationConfigVersionHasTheExpectedVersion(ctx, &mdb, 1))
57+
t.Run("Statefulset has the expectd PersistentVolumeClaimRetentionPolicy", mongodbtests.StatefulSetHasPersistentVolumeClaimRetentionPolicy(ctx, &mdb, test))
58+
t.Run("Cluster has the expected labels and annotations", mongodbtests.HasExpectedMetadata(ctx, &mdb, e2eutil.TestLabels(), e2eutil.TestAnnotations()))
59+
}

Diff for: test/e2e/util/wait/wait.go

+9
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,15 @@ func ForStatefulSetToHaveUpdateStrategy(ctx context.Context, t *testing.T, mdb *
9797
})
9898
}
9999

100+
// ForStatefulSetToHavePersistentVolumeClaimRetentionPolicy waits until all replicas of the StatefulSet with the given name
101+
// have reached the ready status
102+
func ForStatefulSetToHavePersistentVolumeClaimRetentionPolicy(ctx context.Context, t *testing.T, mdb *mdbv1.MongoDBCommunity, persistentVolumeClaimRetentionPolicy appsv1.StatefulSetPersistentVolumeClaimRetentionPolicy, opts ...Configuration) error {
103+
options := newOptions(opts...)
104+
return waitForStatefulSetCondition(ctx, t, mdb, options, func(sts appsv1.StatefulSet) bool {
105+
return sts.Spec.PersistentVolumeClaimRetentionPolicy.WhenScaled == persistentVolumeClaimRetentionPolicy.WhenScaled
106+
})
107+
}
108+
100109
// ForStatefulSetToBeReady waits until all replicas of the StatefulSet with the given name
101110
// have reached the ready status
102111
func ForStatefulSetToBeReady(ctx context.Context, t *testing.T, mdb *mdbv1.MongoDBCommunity, opts ...Configuration) error {

0 commit comments

Comments
 (0)