diff --git a/internal/kubernetes/operator/deployment/deployment.go b/internal/kubernetes/operator/deployment/deployment.go index f714669f48..9e9066f08f 100644 --- a/internal/kubernetes/operator/deployment/deployment.go +++ b/internal/kubernetes/operator/deployment/deployment.go @@ -171,9 +171,35 @@ func BuildAtlasAdvancedDeployment(deploymentStore store.OperatorClusterStore, va advancedSpec.ManagedNamespaces = managedNamespaces } + if hasTenantRegionConfig(atlasDeployment) { + atlasDeployment.Spec.DeploymentSpec.BiConnector = nil + atlasDeployment.Spec.DeploymentSpec.EncryptionAtRestProvider = "" + atlasDeployment.Spec.DeploymentSpec.DiskSizeGB = nil + atlasDeployment.Spec.DeploymentSpec.MongoDBMajorVersion = "" + atlasDeployment.Spec.DeploymentSpec.PitEnabled = nil + atlasDeployment.Spec.DeploymentSpec.BackupEnabled = nil + } + return deploymentResult, nil } +func hasTenantRegionConfig(out *akov2.AtlasDeployment) bool { + if out.Spec.DeploymentSpec == nil { + return false + } + for _, spec := range out.Spec.DeploymentSpec.ReplicationSpecs { + if spec == nil { + continue + } + for _, c := range spec.RegionConfigs { + if c != nil && c.ProviderName == "TENANT" { + return true + } + } + } + return false +} + func buildGlobalDeployment(atlasRepSpec []atlasv2.ReplicationSpec, globalDeploymentProvider store.GlobalClusterDescriber, projectID, clusterID string) ([]akov2.CustomZoneMapping, []akov2.ManagedNamespace, error) { globalCluster, err := globalDeploymentProvider.GlobalCluster(projectID, clusterID) if err != nil { diff --git a/internal/kubernetes/operator/deployment/deployment_test.go b/internal/kubernetes/operator/deployment/deployment_test.go index 7c20a74971..ff26904c74 100644 --- a/internal/kubernetes/operator/deployment/deployment_test.go +++ b/internal/kubernetes/operator/deployment/deployment_test.go @@ -520,3 +520,105 @@ func TestBuildServerlessDeployments(t *testing.T) { } }) } + +func TestCleanTenantFields(t *testing.T) { + for _, tt := range []struct { + name string + spec akov2.AtlasDeploymentSpec + expect bool + }{ + { + name: "nil deploymentspec", + spec: akov2.AtlasDeploymentSpec{ + DeploymentSpec: nil, + }, + expect: false, + }, + { + name: "nil replicationspec", + spec: akov2.AtlasDeploymentSpec{ + DeploymentSpec: &akov2.AdvancedDeploymentSpec{ + ReplicationSpecs: []*akov2.AdvancedReplicationSpec{ + nil, + }, + }, + }, + expect: false, + }, + { + name: "nil regionconfig", + spec: akov2.AtlasDeploymentSpec{ + DeploymentSpec: &akov2.AdvancedDeploymentSpec{ + ReplicationSpecs: []*akov2.AdvancedReplicationSpec{ + { + RegionConfigs: []*akov2.AdvancedRegionConfig{ + nil, + }, + }, + }, + }, + }, + expect: false, + }, + { + name: "multiple non-tenant regionconfigs", + spec: akov2.AtlasDeploymentSpec{ + DeploymentSpec: &akov2.AdvancedDeploymentSpec{ + ReplicationSpecs: []*akov2.AdvancedReplicationSpec{ + { + RegionConfigs: []*akov2.AdvancedRegionConfig{ + { + ProviderName: "AWS", + }, + { + ProviderName: "GCP", + }, + { + ProviderName: "AZURE", + }, + { + ProviderName: "AWS", + }, + }, + }, + }, + }, + }, + expect: false, + }, + { + name: "multiple non-tenant regionconfigs and one tenant", + spec: akov2.AtlasDeploymentSpec{ + DeploymentSpec: &akov2.AdvancedDeploymentSpec{ + ReplicationSpecs: []*akov2.AdvancedReplicationSpec{ + { + RegionConfigs: []*akov2.AdvancedRegionConfig{ + { + ProviderName: "AWS", + }, + { + ProviderName: "GCP", + }, + { + ProviderName: "AZURE", + }, + { + ProviderName: "TENANT", + }, + }, + }, + }, + }, + }, + expect: true, + }, + } { + t.Run(tt.name, func(t *testing.T) { + if got := hasTenantRegionConfig(&akov2.AtlasDeployment{ + Spec: tt.spec, + }); got != tt.expect { + t.Errorf("expect hasTenantRegionConfig to be %t, got %t", tt.expect, got) + } + }) + } +}