Skip to content

Commit 08c2c49

Browse files
committed
first refactoring
1 parent ca0c007 commit 08c2c49

File tree

2 files changed

+70
-45
lines changed

2 files changed

+70
-45
lines changed

controllers/operator/construct/database_construction.go

Lines changed: 69 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -105,10 +105,10 @@ type DatabaseStatefulSetOptions struct {
105105
StsType StsType
106106
AdditionalMongodConfig *mdbv1.AdditionalMongodConfig
107107

108-
InitDatabaseNonStaticImage string
109-
DatabaseNonStaticImage string
110-
MongodbImage string
111-
AgentImage string
108+
InitDatabaseImage string
109+
DatabaseNonStaticImage string
110+
MongodbImage string
111+
AgentImage string
112112

113113
Annotations map[string]string
114114
VaultConfig vault.VaultConfiguration
@@ -665,6 +665,63 @@ func getVolumesAndVolumeMounts(mdb databaseStatefulSetSource, databaseOpts Datab
665665

666666
// buildMongoDBPodTemplateSpec constructs the podTemplateSpec for the MongoDB resource
667667
func buildMongoDBPodTemplateSpec(opts DatabaseStatefulSetOptions, mdb databaseStatefulSetSource) podtemplatespec.Modification {
668+
if architectures.IsRunningStaticArchitecture(mdb.GetAnnotations()) {
669+
return buildStaticArchitecturePodTemplateSpec(opts, mdb)
670+
} else {
671+
return buildNonStaticArchitecturePodTemplateSpec(opts, mdb)
672+
}
673+
}
674+
675+
// buildStaticArchitecturePodTemplateSpec constructs the podTemplateSpec for static architecture
676+
func buildStaticArchitecturePodTemplateSpec(opts DatabaseStatefulSetOptions, mdb databaseStatefulSetSource) podtemplatespec.Modification {
677+
var volumes []corev1.Volume
678+
679+
_, containerSecurityContext := podtemplatespec.WithDefaultSecurityContextsModifications()
680+
681+
// Static architecture containers: agent container and mongod container
682+
agentContainerModifications := []func(*corev1.Container){container.Apply(
683+
container.WithName(util.AgentContainerName),
684+
container.WithImage(opts.AgentImage),
685+
container.WithEnvs(databaseEnvVars(opts)...),
686+
containerSecurityContext,
687+
)}
688+
689+
mongodContainerModifications := []func(*corev1.Container){container.Apply(
690+
container.WithName(util.DatabaseContainerName),
691+
container.WithArgs([]string{""}),
692+
container.WithImage(opts.MongodbImage),
693+
container.WithEnvs(databaseEnvVars(opts)...),
694+
container.WithCommand([]string{"bash", "-c", "tail -F -n0 ${MDB_LOG_FILE_MONGODB} mongodb_marker"}),
695+
containerSecurityContext,
696+
)}
697+
698+
// Handle hostname override for static architecture
699+
if opts.HostNameOverrideConfigmapName != "" {
700+
volumes = append(volumes, statefulset.CreateVolumeFromConfigMap(opts.HostNameOverrideConfigmapName, opts.HostNameOverrideConfigmapName))
701+
hostnameOverrideModification := container.WithVolumeMounts([]corev1.VolumeMount{
702+
{
703+
Name: opts.HostNameOverrideConfigmapName,
704+
MountPath: "/opt/scripts/config",
705+
},
706+
})
707+
agentContainerModifications = append(agentContainerModifications, hostnameOverrideModification)
708+
mongodContainerModifications = append(mongodContainerModifications, hostnameOverrideModification)
709+
}
710+
711+
mods := []podtemplatespec.Modification{
712+
sharedDatabaseConfiguration(opts, mdb),
713+
podtemplatespec.WithServiceAccount(util.MongoDBServiceAccount),
714+
podtemplatespec.WithServiceAccount(getServiceAccountName(opts)),
715+
podtemplatespec.WithVolumes(volumes),
716+
podtemplatespec.WithContainerByIndex(0, agentContainerModifications...),
717+
podtemplatespec.WithContainerByIndex(1, mongodContainerModifications...),
718+
}
719+
720+
return podtemplatespec.Apply(mods...)
721+
}
722+
723+
// buildNonStaticArchitecturePodTemplateSpec constructs the podTemplateSpec for non-static architecture
724+
func buildNonStaticArchitecturePodTemplateSpec(opts DatabaseStatefulSetOptions, mdb databaseStatefulSetSource) podtemplatespec.Modification {
668725
// scripts volume is shared by the init container and the AppDB, so the startup
669726
// script can be copied over
670727
scriptsVolume := statefulset.CreateVolumeFromEmptyDir("database-scripts")
@@ -673,7 +730,9 @@ func buildMongoDBPodTemplateSpec(opts DatabaseStatefulSetOptions, mdb databaseSt
673730
volumes := []corev1.Volume{scriptsVolume}
674731
volumeMounts := []corev1.VolumeMount{databaseScriptsVolumeMount}
675732

676-
initContainerModifications := []func(*corev1.Container){buildDatabaseInitContainer(opts.InitDatabaseNonStaticImage)}
733+
// Non-static architecture: init container and database container
734+
initContainerModifications := []func(*corev1.Container){buildDatabaseInitContainer(opts.InitDatabaseImage)}
735+
677736
databaseContainerModifications := []func(*corev1.Container){container.Apply(
678737
container.WithName(util.DatabaseContainerName),
679738
container.WithImage(opts.DatabaseNonStaticImage),
@@ -682,47 +741,17 @@ func buildMongoDBPodTemplateSpec(opts DatabaseStatefulSetOptions, mdb databaseSt
682741
container.WithVolumeMounts(volumeMounts),
683742
)}
684743

685-
_, containerSecurityContext := podtemplatespec.WithDefaultSecurityContextsModifications()
686-
687-
staticContainerMongodContainerModification := podtemplatespec.NOOP()
688-
if architectures.IsRunningStaticArchitecture(mdb.GetAnnotations()) {
689-
// we don't use initContainers therefore, we reset it here
690-
initContainerModifications = []func(*corev1.Container){}
691-
mongodModification := []func(*corev1.Container){container.Apply(
692-
container.WithName(util.DatabaseContainerName),
693-
container.WithArgs([]string{""}),
694-
container.WithImage(opts.MongodbImage),
695-
container.WithEnvs(databaseEnvVars(opts)...),
696-
container.WithCommand([]string{"bash", "-c", "tail -F -n0 ${MDB_LOG_FILE_MONGODB} mongodb_marker"}),
697-
containerSecurityContext,
698-
)}
699-
staticContainerMongodContainerModification = podtemplatespec.WithContainer(util.DatabaseContainerName, mongodModification...)
700-
701-
// We are not setting the database-scripts volume on purpose,
702-
// since we don't need to copy things from the init container over.
703-
databaseContainerModifications = []func(*corev1.Container){container.Apply(
704-
container.WithName(util.AgentContainerName),
705-
container.WithImage(opts.AgentImage),
706-
container.WithEnvs(databaseEnvVars(opts)...),
707-
containerSecurityContext,
708-
)}
709-
}
710-
744+
// Handle hostname override for non-static architecture
711745
if opts.HostNameOverrideConfigmapName != "" {
712746
volumes = append(volumes, statefulset.CreateVolumeFromConfigMap(opts.HostNameOverrideConfigmapName, opts.HostNameOverrideConfigmapName))
713-
modification := container.WithVolumeMounts([]corev1.VolumeMount{
747+
hostnameOverrideModification := container.WithVolumeMounts([]corev1.VolumeMount{
714748
{
715749
Name: opts.HostNameOverrideConfigmapName,
716750
MountPath: "/opt/scripts/config",
717751
},
718752
})
719-
720-
// we only need to add the volume modification if we actually use an init container
721-
if len(initContainerModifications) > 0 {
722-
initContainerModifications = append(initContainerModifications, modification)
723-
}
724-
725-
databaseContainerModifications = append(databaseContainerModifications, modification)
753+
initContainerModifications = append(initContainerModifications, hostnameOverrideModification)
754+
databaseContainerModifications = append(databaseContainerModifications, hostnameOverrideModification)
726755
}
727756

728757
mods := []podtemplatespec.Modification{
@@ -731,11 +760,7 @@ func buildMongoDBPodTemplateSpec(opts DatabaseStatefulSetOptions, mdb databaseSt
731760
podtemplatespec.WithServiceAccount(getServiceAccountName(opts)),
732761
podtemplatespec.WithVolumes(volumes),
733762
podtemplatespec.WithContainerByIndex(0, databaseContainerModifications...),
734-
staticContainerMongodContainerModification,
735-
}
736-
737-
if len(initContainerModifications) > 0 {
738-
mods = append(mods, podtemplatespec.WithInitContainer(InitDatabaseContainerName, initContainerModifications...))
763+
podtemplatespec.WithInitContainerByIndex(0, initContainerModifications...),
739764
}
740765

741766
return podtemplatespec.Apply(mods...)

pkg/util/constants.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ const (
8989
BackupDaemonContainerName = "mongodb-backup-daemon"
9090
DatabaseContainerName = "mongodb-enterprise-database"
9191
AgentContainerName = "mongodb-agent"
92-
AgentContainerUtilitiesName = "mongodb-agent-operator-utilities"
92+
AgentContainerUtilitiesName = "mongodb-agent-operator-utilities"
9393
InitOpsManagerContainerName = "mongodb-kubernetes-init-ops-manager"
9494
PvcNameData = "data"
9595
PvcMountPathData = "/data"

0 commit comments

Comments
 (0)