diff --git a/internal/controller/mapserver/deployment.go b/internal/controller/mapserver/deployment.go index a35d80e..e1b75e4 100644 --- a/internal/controller/mapserver/deployment.go +++ b/internal/controller/mapserver/deployment.go @@ -218,12 +218,24 @@ func GetEnvVarsForDeployment[O pdoknlv3.WMSWFS](obj O, blobsSecretName string) [ // Resources for mapserver container func GetResourcesForDeployment[O pdoknlv3.WMSWFS](obj O) v1.ResourceRequirements { resources := v1.ResourceRequirements{ - Limits: v1.ResourceList{ - v1.ResourceMemory: resource.MustParse("800M"), - }, - Requests: v1.ResourceList{ - v1.ResourceCPU: resource.MustParse("0.15"), - }, + Limits: v1.ResourceList{}, + Requests: v1.ResourceList{}, + } + + maxResourceVal := func(v1 *resource.Quantity, v2 *resource.Quantity) *resource.Quantity { + if v1 != nil && v2 != nil { + if v1.Value() > v2.Value() { + return v1 + } else { + return v2 + } + } else if v1 != nil && v2 == nil { + return v1 + } else if v1 == nil || v2 != nil { + return v2 + } + + return &resource.Quantity{} } objResources := &v1.ResourceRequirements{} @@ -243,38 +255,51 @@ func GetResourcesForDeployment[O pdoknlv3.WMSWFS](obj O) v1.ResourceRequirements } - if obj.Type() == pdoknlv3.ServiceTypeWMS && obj.Options().UseWebserviceProxy() { - resources.Requests[v1.ResourceCPU] = resource.MustParse("0.1") + /** + Set CPU request and limit + */ + cpuRequest := objResources.Requests.Cpu() + if cpuRequest == nil || cpuRequest.IsZero() { + cpuRequest = smoothoperatorutils.Pointer(resource.MustParse("0.15")) + if obj.Type() == pdoknlv3.ServiceTypeWMS && obj.Options().UseWebserviceProxy() { + cpuRequest = smoothoperatorutils.Pointer(resource.MustParse("0.1")) + } + } + resources.Requests[v1.ResourceCPU] = *cpuRequest + + cpuLimit := objResources.Limits.Cpu() + if cpuLimit != nil && !cpuLimit.IsZero() { + resources.Limits[v1.ResourceCPU] = *maxResourceVal(cpuLimit, cpuRequest) } - if objResources.Limits.Cpu() != nil && objResources.Requests.Cpu().Value() > resources.Requests.Cpu().Value() { - resources.Limits[v1.ResourceCPU] = *objResources.Limits.Cpu() + /** + Set memory limit/request if the request is higher than the limit the request is used as limit + */ + memoryRequest := objResources.Requests.Memory() + if memoryRequest != nil && !memoryRequest.IsZero() { + resources.Requests[v1.ResourceMemory] = *memoryRequest } - if objResources.Requests.Memory() != nil && !objResources.Requests.Memory().IsZero() { - resources.Requests[v1.ResourceMemory] = *objResources.Requests.Memory() + memoryLimit := objResources.Limits.Memory() + if memoryLimit == nil || memoryLimit.IsZero() { + memoryLimit = smoothoperatorutils.Pointer(resource.MustParse("800M")) } + resources.Limits[v1.ResourceMemory] = *maxResourceVal(memoryLimit, memoryRequest) + /** + Set ephemeral-storage if there is no ephemeral volume + */ if use, _ := mapperutils.UseEphemeralVolume(obj); !use { - minimumEphemeralStorageLimit := resource.MustParse("200M") ephemeralStorageRequest := mapperutils.EphemeralStorageRequest(obj) - ephemeralStorageLimit := mapperutils.EphemeralStorageLimit(obj) - if ephemeralStorageRequest != nil { resources.Requests[v1.ResourceEphemeralStorage] = *ephemeralStorageRequest } - if ephemeralStorageLimit != nil && ephemeralStorageLimit.Value() > minimumEphemeralStorageLimit.Value() { - // Request higher than limit, use request as limit - if ephemeralStorageRequest != nil && ephemeralStorageRequest.Value() > ephemeralStorageLimit.Value() { - resources.Limits[v1.ResourceEphemeralStorage] = *ephemeralStorageRequest - } else { - resources.Limits[v1.ResourceEphemeralStorage] = *ephemeralStorageLimit - } - } else { - // No limit given or the given limit is lower than the default, use default - resources.Limits[v1.ResourceEphemeralStorage] = minimumEphemeralStorageLimit + ephemeralStorageLimit := mapperutils.EphemeralStorageLimit(obj) + if ephemeralStorageLimit == nil || ephemeralStorageLimit.IsZero() { + ephemeralStorageLimit = smoothoperatorutils.Pointer(resource.MustParse("200M")) } + resources.Limits[v1.ResourceEphemeralStorage] = *maxResourceVal(ephemeralStorageLimit, ephemeralStorageRequest) } return resources diff --git a/internal/controller/wfs_controller_test.go b/internal/controller/wfs_controller_test.go index 4920506..7d22550 100644 --- a/internal/controller/wfs_controller_test.go +++ b/internal/controller/wfs_controller_test.go @@ -241,7 +241,7 @@ var _ = Describe("WFS Controller", func() { Expect(container.Ports[0].ContainerPort).Should(Equal(int32(80))) Expect(container.Image).Should(Equal(reconcilerImages.MapserverImage)) Expect(container.ImagePullPolicy).Should(Equal(v1.PullIfNotPresent)) - Expect(container.Resources.Limits.Memory().String()).Should(Equal("800M")) + Expect(container.Resources.Limits.Memory().String()).Should(Equal("12M")) Expect(container.Resources.Requests.Cpu().String()).Should(Equal("150m")) Expect(len(container.LivenessProbe.Exec.Command)).Should(Equal(3)) Expect(container.LivenessProbe.Exec.Command[2]).Should(Equal("wget -SO- -T 10 -t 2 'http://127.0.0.1:80/mapserver?SERVICE=wfs&request=GetCapabilities' 2>&1 | egrep -aiA10 'HTTP/1.1 200' | egrep -i 'Content-Type: text/xml'")) diff --git a/internal/controller/wms_controller_test.go b/internal/controller/wms_controller_test.go index 0618244..79c03e9 100644 --- a/internal/controller/wms_controller_test.go +++ b/internal/controller/wms_controller_test.go @@ -237,7 +237,7 @@ var _ = Describe("WMS Controller", func() { Expect(containerMapserver.Ports[0].ContainerPort).Should(Equal(int32(80))) Expect(containerMapserver.Image).Should(Equal(reconcilerImages.MapserverImage)) Expect(containerMapserver.ImagePullPolicy).Should(Equal(corev1.PullIfNotPresent)) - Expect(containerMapserver.Resources.Limits.Memory().String()).Should(Equal("800M")) + Expect(containerMapserver.Resources.Limits.Memory().String()).Should(Equal("12M")) Expect(containerMapserver.Resources.Requests.Cpu().String()).Should(Equal("100m")) Expect(len(containerMapserver.LivenessProbe.Exec.Command)).Should(Equal(3)) Expect(containerMapserver.LivenessProbe.Exec.Command[2]).Should(Equal("wget -SO- -T 10 -t 2 'http://127.0.0.1:80/mapserver?SERVICE=wms&request=GetCapabilities' 2>&1 | egrep -aiA10 'HTTP/1.1 200' | egrep -i 'Content-Type: text/xml'"))