From f330528dcc8e810bc1f6dfb3507b66739e512cea Mon Sep 17 00:00:00 2001 From: Tom van der Woerdt Date: Wed, 23 Jul 2025 11:20:14 -0400 Subject: [PATCH] CLOUDP-333238: add configServerManagementMode to AtlasDeployment --- api/v1/atlasdeployment_types.go | 4 ++++ .../bases/atlas.mongodb.com_atlasdeployments.yaml | 7 +++++++ internal/translation/deployment/compare.go | 5 +++++ internal/translation/deployment/compare_test.go | 12 ++++++++++++ internal/translation/deployment/conversion.go | 4 ++++ internal/translation/deployment/conversion_test.go | 3 +++ 6 files changed, 35 insertions(+) diff --git a/api/v1/atlasdeployment_types.go b/api/v1/atlasdeployment_types.go index 753faeae54..f4985a2ba0 100644 --- a/api/v1/atlasdeployment_types.go +++ b/api/v1/atlasdeployment_types.go @@ -157,6 +157,10 @@ type AdvancedDeploymentSpec struct { // A list of atlas search indexes configuration for the current deployment // +optional SearchIndexes []SearchIndex `json:"searchIndexes,omitempty"` + // Config Server Management Mode for creating or updating a sharded cluster. + // +kubebuilder:validation:Enum=ATLAS_MANAGED;FIXED_TO_DEDICATED + // +optional + ConfigServerManagementMode string `json:"configServerManagementMode,omitempty"` } // ToAtlas converts the AdvancedDeploymentSpec to native Atlas client ToAtlas format. diff --git a/config/crd/bases/atlas.mongodb.com_atlasdeployments.yaml b/config/crd/bases/atlas.mongodb.com_atlasdeployments.yaml index 0ffa587a30..9d7071fe12 100644 --- a/config/crd/bases/atlas.mongodb.com_atlasdeployments.yaml +++ b/config/crd/bases/atlas.mongodb.com_atlasdeployments.yaml @@ -113,6 +113,13 @@ spec: - SHARDED - GEOSHARDED type: string + configServerManagementMode: + description: Config Server Management Mode for creating or updating + a sharded cluster. + enum: + - ATLAS_MANAGED + - FIXED_TO_DEDICATED + type: string customZoneMapping: items: properties: diff --git a/internal/translation/deployment/compare.go b/internal/translation/deployment/compare.go index c50817dbfe..77823f71a2 100644 --- a/internal/translation/deployment/compare.go +++ b/internal/translation/deployment/compare.go @@ -48,6 +48,7 @@ func ComputeChanges(desired, current *Cluster) (*Cluster, bool) { VersionReleaseSystem: desired.VersionReleaseSystem, BackupEnabled: desired.BackupEnabled, EncryptionAtRestProvider: desired.EncryptionAtRestProvider, + ConfigServerManagementMode: desired.ConfigServerManagementMode, BiConnector: desired.BiConnector, PitEnabled: desired.PitEnabled, RootCertType: desired.RootCertType, @@ -145,6 +146,10 @@ func specAreEqual(desired, current *Cluster) bool { return false } + if desired.ConfigServerManagementMode != "" && !areEqual(&desired.ConfigServerManagementMode, ¤t.ConfigServerManagementMode) { + return false + } + if desired.MongoDBMajorVersion != "" && !areEqual(&desired.MongoDBMajorVersion, ¤t.MongoDBMajorVersion) { return false } diff --git a/internal/translation/deployment/compare_test.go b/internal/translation/deployment/compare_test.go index e8145a8fed..fa0c4b3fd1 100644 --- a/internal/translation/deployment/compare_test.go +++ b/internal/translation/deployment/compare_test.go @@ -640,6 +640,18 @@ func TestSpecAreEqual(t *testing.T) { EncryptionAtRestProvider: pointer.MakePtr("NONE"), }, }, + "should return false when config server management are different": { + ako: &akov2.AtlasDeployment{ + Spec: akov2.AtlasDeploymentSpec{ + DeploymentSpec: &akov2.AdvancedDeploymentSpec{ + ConfigServerManagementMode: "ATLAS_MANAGED", + }, + }, + }, + atlas: &admin.ClusterDescription20240805{ + ConfigServerManagementMode: pointer.MakePtr("FIXED_TO_DEDICATED"), + }, + }, "should return false when mongodb version are different": { ako: &akov2.AtlasDeployment{ Spec: akov2.AtlasDeploymentSpec{ diff --git a/internal/translation/deployment/conversion.go b/internal/translation/deployment/conversion.go index 6b2f06c83a..6c2ff51599 100644 --- a/internal/translation/deployment/conversion.go +++ b/internal/translation/deployment/conversion.go @@ -598,6 +598,7 @@ func clusterFromAtlas(clusterDesc *admin.ClusterDescription20240805) *Cluster { TerminationProtectionEnabled: clusterDesc.GetTerminationProtectionEnabled(), SearchNodes: nil, SearchIndexes: nil, + ConfigServerManagementMode: clusterDesc.GetConfigServerManagementMode(), }, } normalizeClusterDeployment(cluster) @@ -625,6 +626,7 @@ func clusterCreateToAtlas(cluster *Cluster) *admin.ClusterDescription20240805 { RootCertType: pointer.MakePtrOrNil(cluster.RootCertType), Tags: tag.ToAtlas(cluster.Tags), TerminationProtectionEnabled: pointer.MakePtrOrNil(cluster.TerminationProtectionEnabled), + ConfigServerManagementMode: pointer.MakePtrOrNil(cluster.ConfigServerManagementMode), } } @@ -643,6 +645,7 @@ func clusterUpdateToAtlas(cluster *Cluster) *admin.ClusterDescription20240805 { RootCertType: pointer.MakePtrOrNil(cluster.RootCertType), Tags: tag.ToAtlas(cluster.Tags), TerminationProtectionEnabled: pointer.MakePtrOrNil(cluster.TerminationProtectionEnabled), + ConfigServerManagementMode: pointer.MakePtrOrNil(cluster.ConfigServerManagementMode), } } @@ -1293,5 +1296,6 @@ func flexUpgradeToAtlas(cluster *Cluster) *admin.AtlasTenantClusterUpgradeReques RootCertType: pointer.MakePtrOrNil(spec.RootCertType), Tags: tag.ToAtlas(spec.Tags), TerminationProtectionEnabled: pointer.MakePtrOrNil(spec.TerminationProtectionEnabled), + ConfigServerManagementMode: pointer.MakePtrOrNil(spec.ConfigServerManagementMode), } } diff --git a/internal/translation/deployment/conversion_test.go b/internal/translation/deployment/conversion_test.go index 26a6ce1629..8917e49efe 100644 --- a/internal/translation/deployment/conversion_test.go +++ b/internal/translation/deployment/conversion_test.go @@ -150,6 +150,7 @@ func TestNewDeployment(t *testing.T) { }, }, TerminationProtectionEnabled: true, + ConfigServerManagementMode: "ATLAS_MANAGED", Labels: []common.LabelSpec{ { Key: "name", @@ -213,6 +214,7 @@ func TestNewDeployment(t *testing.T) { }, }, TerminationProtectionEnabled: true, + ConfigServerManagementMode: "ATLAS_MANAGED", Labels: []common.LabelSpec{ { Key: "name", @@ -268,6 +270,7 @@ func TestNewDeployment(t *testing.T) { }, }, TerminationProtectionEnabled: true, + ConfigServerManagementMode: "ATLAS_MANAGED", Labels: []common.LabelSpec{ { Key: "name",