diff --git a/pkg/api/v1/atlasdeployment_types.go b/pkg/api/v1/atlasdeployment_types.go index ea34d06884..b5ce8dc516 100644 --- a/pkg/api/v1/atlasdeployment_types.go +++ b/pkg/api/v1/atlasdeployment_types.go @@ -605,6 +605,26 @@ func (c *AtlasDeployment) WithBackupScheduleRef(ref common.ResourceRefNamespaced return c } +func (c *AtlasDeployment) WithDiskSizeGB(size int) *AtlasDeployment { + c.Spec.DeploymentSpec.DiskSizeGB = &size + return c +} + +func (c *AtlasDeployment) WithAutoscalingDisabled() *AtlasDeployment { + f := false + c.Spec.DeploymentSpec.AutoScaling = &AutoScalingSpec{ + AutoIndexingEnabled: &f, + DiskGBEnabled: &f, + Compute: &ComputeSpec{ + Enabled: &f, + ScaleDownEnabled: &f, + MinInstanceSize: "", + MaxInstanceSize: "", + }, + } + return c +} + func (c *AtlasDeployment) WithInstanceSize(name string) *AtlasDeployment { c.Spec.DeploymentSpec.ProviderSettings.InstanceSizeName = name return c diff --git a/pkg/api/v1/zz_generated.deepcopy.go b/pkg/api/v1/zz_generated.deepcopy.go index 280872fdf3..bde7333981 100644 --- a/pkg/api/v1/zz_generated.deepcopy.go +++ b/pkg/api/v1/zz_generated.deepcopy.go @@ -295,7 +295,7 @@ func (in *AtlasBackupSchedule) DeepCopyInto(out *AtlasBackupSchedule) { *out = *in out.TypeMeta = in.TypeMeta in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - out.Spec = in.Spec + in.Spec.DeepCopyInto(&out.Spec) out.Status = in.Status } @@ -352,7 +352,11 @@ func (in *AtlasBackupScheduleList) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *AtlasBackupScheduleSpec) DeepCopyInto(out *AtlasBackupScheduleSpec) { *out = *in - out.Export = in.Export + if in.Export != nil { + in, out := &in.Export, &out.Export + *out = new(AtlasBackupExportSpec) + **out = **in + } out.PolicyRef = in.PolicyRef } diff --git a/pkg/controller/atlasdeployment/deployment.go b/pkg/controller/atlasdeployment/deployment.go index ab8396d042..7bfc4f572a 100644 --- a/pkg/controller/atlasdeployment/deployment.go +++ b/pkg/controller/atlasdeployment/deployment.go @@ -131,9 +131,17 @@ func removeOutdatedFields(removeFrom *mongodbatlas.Cluster, lookAt *mongodbatlas if *lookAt.AutoScaling.Compute.Enabled { result.ProviderSettings.InstanceSizeName = "" } else { + if result.ProviderSettings == nil { + result.ProviderSettings = &mongodbatlas.ProviderSettings{} + } + if result.ProviderSettings.AutoScaling == nil { + result.ProviderSettings.AutoScaling = &mongodbatlas.AutoScaling{} + } result.ProviderSettings.AutoScaling.Compute = &mongodbatlas.Compute{} } + } + if lookAt.AutoScaling != nil { if lookAt.AutoScaling.DiskGBEnabled != nil && *lookAt.AutoScaling.DiskGBEnabled { result.DiskSizeGB = nil } diff --git a/test/int/deployment_test.go b/test/int/deployment_test.go index 41bb35de6f..f783a8f1da 100644 --- a/test/int/deployment_test.go +++ b/test/int/deployment_test.go @@ -460,8 +460,42 @@ var _ = Describe("AtlasDeployment", Label("int", "AtlasDeployment"), func() { }) }) + It("Should Success (AWS) with enabled autoscaling", func() { + createdDeployment = mdbv1.DefaultAWSDeployment(namespace.Name, createdProject.Name) + createdDeployment.Spec.DeploymentSpec.DiskSizeGB = intptr(20) + createdDeployment.Spec.DeploymentSpec.AutoScaling = &mdbv1.AutoScalingSpec{ + AutoIndexingEnabled: boolptr(true), + DiskGBEnabled: boolptr(true), + } + + By(fmt.Sprintf("Creating the Deployment %s with autoscaling", kube.ObjectKeyFromObject(createdDeployment)), func() { + Expect(k8sClient.Create(context.Background(), createdDeployment)).ToNot(HaveOccurred()) + + Eventually(testutil.WaitFor(k8sClient, createdDeployment, status.TrueCondition(status.ReadyType), validateDeploymentCreatingFunc()), + DeploymentUpdateTimeout, interval).Should(BeTrue()) + + doRegularDeploymentStatusChecks() + checkAtlasState() + }) + + By("Decreasing the Deployment disk size should not take effect", func() { + prevDiskSize := *createdDeployment.Spec.DeploymentSpec.DiskSizeGB + createdDeployment.Spec.DeploymentSpec.DiskSizeGB = intptr(14) + performUpdate(30 * time.Minute) + doRegularDeploymentStatusChecks() + checkAtlasState(func(c *mongodbatlas.Cluster) { + Expect(*c.DiskSizeGB).To(BeEquivalentTo(prevDiskSize)) + + // check whether https://github.com/mongodb/go-client-mongodb-atlas/issues/140 is fixed + Expect(c.DiskSizeGB).To(BeAssignableToTypeOf(float64ptr(0)), "DiskSizeGB is no longer a *float64, please check the spec!") + }) + }) + }) + It("Should Succeed (AWS)", func() { createdDeployment = mdbv1.DefaultAWSDeployment(namespace.Name, createdProject.Name) + createdDeployment.Spec.DeploymentSpec.DiskSizeGB = intptr(20) + createdDeployment = createdDeployment.WithAutoscalingDisabled() By(fmt.Sprintf("Creating the Deployment %s", kube.ObjectKeyFromObject(createdDeployment)), func() { Expect(k8sClient.Create(context.Background(), createdDeployment)).ToNot(HaveOccurred()) @@ -490,7 +524,7 @@ var _ = Describe("AtlasDeployment", Label("int", "AtlasDeployment"), func() { }) By("Decreasing the Deployment disk size", func() { - createdDeployment.Spec.DeploymentSpec.DiskSizeGB = intptr(10) + createdDeployment.Spec.DeploymentSpec.DiskSizeGB = intptr(15) performUpdate(20 * time.Minute) doRegularDeploymentStatusChecks() checkAtlasState(func(c *mongodbatlas.Cluster) {