@@ -2,6 +2,7 @@ package construct
22
33import (
44 "fmt"
5+ "github.com/stretchr/objx"
56 "os"
67 "strings"
78
@@ -43,8 +44,9 @@ const (
4344 ReadinessProbeImageEnv = "READINESS_PROBE_IMAGE"
4445 ManagedSecurityContextEnv = "MANAGED_SECURITY_CONTEXT"
4546
46- automationconfFilePath = "/data/automation-mongod.conf"
47- keyfileFilePath = "/var/lib/mongodb-mms-automation/authentication/keyfile"
47+ defaultDataDir = "/data"
48+ automationMongodConfFileName = "automation-mongod.conf"
49+ keyfileFilePath = "/var/lib/mongodb-mms-automation/authentication/keyfile"
4850
4951 automationAgentOptions = " -skipMongoStart -noDaemonize -useLocalMongoDbTools"
5052
@@ -82,6 +84,9 @@ type MongoDBStatefulSetOwner interface {
8284 DataVolumeName () string
8385 // LogsVolumeName returns the name that the data volume should have
8486 LogsVolumeName () string
87+
88+ // GetMongodConfiguration returns the MongoDB configuration for each member.
89+ GetMongodConfiguration () map [string ]interface {}
8590}
8691
8792// BuildMongoDBReplicaSetStatefulSetModificationFunction builds the parts of the replica set that are common between every resource that implements
@@ -122,14 +127,14 @@ func BuildMongoDBReplicaSetStatefulSetModificationFunction(mdb MongoDBStatefulSe
122127 singleModeVolumeClaim := func (s * appsv1.StatefulSet ) {}
123128 if mdb .HasSeparateDataAndLogsVolumes () {
124129 logVolumeMount := statefulset .CreateVolumeMount (mdb .LogsVolumeName (), automationconfig .DefaultAgentLogPath )
125- dataVolumeMount := statefulset .CreateVolumeMount (mdb .DataVolumeName (), "/data" )
130+ dataVolumeMount := statefulset .CreateVolumeMount (mdb .DataVolumeName (), GetDBDataDir ( mdb . GetMongodConfiguration ()) )
126131 dataVolumeClaim = statefulset .WithVolumeClaim (mdb .DataVolumeName (), dataPvc (mdb .DataVolumeName ()))
127132 logVolumeClaim = statefulset .WithVolumeClaim (mdb .LogsVolumeName (), logsPvc (mdb .LogsVolumeName ()))
128133 mongodbAgentVolumeMounts = append (mongodbAgentVolumeMounts , dataVolumeMount , logVolumeMount )
129134 mongodVolumeMounts = append (mongodVolumeMounts , dataVolumeMount , logVolumeMount )
130135 } else {
131136 mounts := []corev1.VolumeMount {
132- statefulset .CreateVolumeMount (mdb .DataVolumeName (), "/data" , statefulset .WithSubPath ("data" )),
137+ statefulset .CreateVolumeMount (mdb .DataVolumeName (), GetDBDataDir ( mdb . GetMongodConfiguration ()) , statefulset .WithSubPath ("data" )),
133138 statefulset .CreateVolumeMount (mdb .DataVolumeName (), automationconfig .DefaultAgentLogPath , statefulset .WithSubPath ("logs" )),
134139 }
135140 mongodbAgentVolumeMounts = append (mongodbAgentVolumeMounts , mounts ... )
@@ -165,7 +170,7 @@ func BuildMongoDBReplicaSetStatefulSetModificationFunction(mdb MongoDBStatefulSe
165170 podtemplatespec .WithVolume (keyFileVolume ),
166171 podtemplatespec .WithServiceAccount (mongodbDatabaseServiceAccountName ),
167172 podtemplatespec .WithContainer (AgentName , mongodbAgentContainer (mdb .AutomationConfigSecretName (), mongodbAgentVolumeMounts )),
168- podtemplatespec .WithContainer (MongodbName , mongodbContainer (mdb .GetMongoDBVersion (), mongodVolumeMounts )),
173+ podtemplatespec .WithContainer (MongodbName , mongodbContainer (mdb .GetMongoDBVersion (), mongodVolumeMounts , mdb . GetMongodConfiguration () )),
169174 podtemplatespec .WithInitContainer (versionUpgradeHookName , versionUpgradeHookInit ([]corev1.VolumeMount {hooksVolumeMount })),
170175 podtemplatespec .WithInitContainer (ReadinessProbeContainerName , readinessProbeInit ([]corev1.VolumeMount {scriptsVolumeMount })),
171176 ),
@@ -276,7 +281,16 @@ func getMongoDBImage(version string) string {
276281 return fmt .Sprintf ("%s/%s:%s" , repoUrl , mongoImageName , version )
277282}
278283
279- func mongodbContainer (version string , volumeMounts []corev1.VolumeMount ) container.Modification {
284+ // GetDBDataDir returns the db path which should be used.
285+ func GetDBDataDir (additionalMongoDBConfig objx.Map ) string {
286+ if additionalMongoDBConfig == nil {
287+ return defaultDataDir
288+ }
289+ return additionalMongoDBConfig .Get ("storage.dbPath" ).Str (defaultDataDir )
290+ }
291+
292+ func mongodbContainer (version string , volumeMounts []corev1.VolumeMount , additionalMongoDBConfig map [string ]interface {}) container.Modification {
293+ filePath := GetDBDataDir (additionalMongoDBConfig ) + "/" + automationMongodConfFileName
280294 mongoDbCommand := fmt .Sprintf (`
281295#run post-start hook to handle version changes
282296/hooks/version-upgrade
@@ -291,7 +305,7 @@ tail -F /var/log/mongodb-mms-automation/mongodb.log > /dev/stdout &
291305# start mongod with this configuration
292306exec mongod -f %s;
293307
294- ` , automationconfFilePath , keyfileFilePath , automationconfFilePath )
308+ ` , filePath , keyfileFilePath , filePath )
295309
296310 containerCommand := []string {
297311 "/bin/sh" ,
0 commit comments