Skip to content

Commit

Permalink
fix: conversion when only one resource (cpu or memory) is specified f… (
Browse files Browse the repository at this point in the history
#1516)

* fix: conversion when only one resource (cpu or memory) is specified for component

Signed-off-by: Anatolii Bazko <abazko@redhat.com>
  • Loading branch information
tolusha committed Sep 12, 2022
1 parent 0a3d57c commit dcc491a
Show file tree
Hide file tree
Showing 4 changed files with 111 additions and 28 deletions.
40 changes: 40 additions & 0 deletions api/checluster_conversion_from_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -565,3 +565,43 @@ func TestConvertFrom(t *testing.T) {
assert.Equal(t, checlusterv1.Spec.Storage.PerWorkspaceStrategyPvcClaimSize, "PerWorkspaceStorageClaimSize")
assert.Equal(t, checlusterv1.Spec.Storage.PerWorkspaceStrategyPVCStorageClassName, "PerWorkspaceStorageClass")
}

func TestShouldConvertFromWhenOnlyMemoryResourceSpecified(t *testing.T) {
infrastructure.InitializeForTesting(infrastructure.OpenShiftv4)

checlusterv2 := &chev2.CheCluster{
ObjectMeta: metav1.ObjectMeta{
Name: "eclipse-che",
Namespace: "eclipse-che",
},
Spec: chev2.CheClusterSpec{
Components: chev2.CheClusterComponents{
CheServer: chev2.CheServer{
Deployment: &chev2.Deployment{
Containers: []chev2.Container{
{
Resources: &chev2.ResourceRequirements{
Requests: &chev2.ResourceList{
Memory: resource.MustParse("128Mi"),
},
Limits: &chev2.ResourceList{
Memory: resource.MustParse("228Mi"),
},
},
},
},
},
},
},
},
}

checlusterv1 := &chev1.CheCluster{}
err := checlusterv1.ConvertFrom(checlusterv2)
assert.Nil(t, err)

assert.Empty(t, checlusterv1.Spec.Server.ServerCpuLimit)
assert.Empty(t, checlusterv1.Spec.Server.ServerCpuRequest)
assert.Equal(t, checlusterv1.Spec.Server.ServerMemoryLimit, "228Mi")
assert.Equal(t, checlusterv1.Spec.Server.ServerMemoryRequest, "128Mi")
}
26 changes: 26 additions & 0 deletions api/checluster_conversion_to_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -515,3 +515,29 @@ func TestConvertTo(t *testing.T) {
assert.Equal(t, checlusterv2.Status.Reason, "Reason")
assert.Equal(t, checlusterv2.Status.PostgresVersion, "PostgresVersion")
}

func TestShouldConvertToWhenOnlyMemoryResourceSpecified(t *testing.T) {
infrastructure.InitializeForTesting(infrastructure.Kubernetes)

checlusterv1 := &chev1.CheCluster{
ObjectMeta: metav1.ObjectMeta{
Name: "eclipse-che",
Namespace: "eclipse-che",
},
Spec: chev1.CheClusterSpec{
Server: chev1.CheClusterSpecServer{
ServerMemoryLimit: "10Gi",
ServerMemoryRequest: "5Gi",
},
},
}

checlusterv2 := &chev2.CheCluster{}
err := checlusterv1.ConvertTo(checlusterv2)
assert.Nil(t, err)

assert.True(t, checlusterv2.Spec.Components.CheServer.Deployment.Containers[0].Resources.Limits.Cpu.IsZero())
assert.Equal(t, checlusterv2.Spec.Components.CheServer.Deployment.Containers[0].Resources.Limits.Memory, resource.MustParse("10Gi"))
assert.True(t, checlusterv2.Spec.Components.CheServer.Deployment.Containers[0].Resources.Requests.Cpu.IsZero())
assert.Equal(t, checlusterv2.Spec.Components.CheServer.Deployment.Containers[0].Resources.Requests.Memory, resource.MustParse("5Gi"))
}
49 changes: 29 additions & 20 deletions api/v1/checluster_conversion_from.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ import (
"strconv"
"strings"

"k8s.io/apimachinery/pkg/api/resource"

"github.com/eclipse-che/che-operator/pkg/common/utils"

"github.com/devfile/devworkspace-operator/pkg/infrastructure"
Expand Down Expand Up @@ -117,12 +119,12 @@ func (dst *CheCluster) convertFrom_Server(src *chev2.CheCluster) error {

if src.Spec.Components.CheServer.Deployment.Containers[0].Resources != nil {
if src.Spec.Components.CheServer.Deployment.Containers[0].Resources.Requests != nil {
dst.Spec.Server.ServerMemoryRequest = src.Spec.Components.CheServer.Deployment.Containers[0].Resources.Requests.Memory.String()
dst.Spec.Server.ServerCpuRequest = src.Spec.Components.CheServer.Deployment.Containers[0].Resources.Requests.Cpu.String()
dst.Spec.Server.ServerMemoryRequest = resource2String(src.Spec.Components.CheServer.Deployment.Containers[0].Resources.Requests.Memory)
dst.Spec.Server.ServerCpuRequest = resource2String(src.Spec.Components.CheServer.Deployment.Containers[0].Resources.Requests.Cpu)
}
if src.Spec.Components.CheServer.Deployment.Containers[0].Resources.Limits != nil {
dst.Spec.Server.ServerMemoryLimit = src.Spec.Components.CheServer.Deployment.Containers[0].Resources.Limits.Memory.String()
dst.Spec.Server.ServerCpuLimit = src.Spec.Components.CheServer.Deployment.Containers[0].Resources.Limits.Cpu.String()
dst.Spec.Server.ServerMemoryLimit = resource2String(src.Spec.Components.CheServer.Deployment.Containers[0].Resources.Limits.Memory)
dst.Spec.Server.ServerCpuLimit = resource2String(src.Spec.Components.CheServer.Deployment.Containers[0].Resources.Limits.Cpu)
}
}
}
Expand Down Expand Up @@ -198,12 +200,12 @@ func (dst *CheCluster) convertFrom_Server_PluginRegistry(src *chev2.CheCluster)

if src.Spec.Components.PluginRegistry.Deployment.Containers[0].Resources != nil {
if src.Spec.Components.PluginRegistry.Deployment.Containers[0].Resources.Requests != nil {
dst.Spec.Server.PluginRegistryMemoryRequest = src.Spec.Components.PluginRegistry.Deployment.Containers[0].Resources.Requests.Memory.String()
dst.Spec.Server.PluginRegistryCpuRequest = src.Spec.Components.PluginRegistry.Deployment.Containers[0].Resources.Requests.Cpu.String()
dst.Spec.Server.PluginRegistryMemoryRequest = resource2String(src.Spec.Components.PluginRegistry.Deployment.Containers[0].Resources.Requests.Memory)
dst.Spec.Server.PluginRegistryCpuRequest = resource2String(src.Spec.Components.PluginRegistry.Deployment.Containers[0].Resources.Requests.Cpu)
}
if src.Spec.Components.PluginRegistry.Deployment.Containers[0].Resources.Limits != nil {
dst.Spec.Server.PluginRegistryMemoryLimit = src.Spec.Components.PluginRegistry.Deployment.Containers[0].Resources.Limits.Memory.String()
dst.Spec.Server.PluginRegistryCpuLimit = src.Spec.Components.PluginRegistry.Deployment.Containers[0].Resources.Limits.Cpu.String()
dst.Spec.Server.PluginRegistryMemoryLimit = resource2String(src.Spec.Components.PluginRegistry.Deployment.Containers[0].Resources.Limits.Memory)
dst.Spec.Server.PluginRegistryCpuLimit = resource2String(src.Spec.Components.PluginRegistry.Deployment.Containers[0].Resources.Limits.Cpu)
}
}
}
Expand All @@ -230,12 +232,12 @@ func (dst *CheCluster) convertFrom_Server_DevfileRegistry(src *chev2.CheCluster)

if src.Spec.Components.DevfileRegistry.Deployment.Containers[0].Resources != nil {
if src.Spec.Components.DevfileRegistry.Deployment.Containers[0].Resources.Requests != nil {
dst.Spec.Server.DevfileRegistryMemoryRequest = src.Spec.Components.DevfileRegistry.Deployment.Containers[0].Resources.Requests.Memory.String()
dst.Spec.Server.DevfileRegistryCpuRequest = src.Spec.Components.DevfileRegistry.Deployment.Containers[0].Resources.Requests.Cpu.String()
dst.Spec.Server.DevfileRegistryMemoryRequest = resource2String(src.Spec.Components.DevfileRegistry.Deployment.Containers[0].Resources.Requests.Memory)
dst.Spec.Server.DevfileRegistryCpuRequest = resource2String(src.Spec.Components.DevfileRegistry.Deployment.Containers[0].Resources.Requests.Cpu)
}
if src.Spec.Components.DevfileRegistry.Deployment.Containers[0].Resources.Limits != nil {
dst.Spec.Server.DevfileRegistryMemoryLimit = src.Spec.Components.DevfileRegistry.Deployment.Containers[0].Resources.Limits.Memory.String()
dst.Spec.Server.DevfileRegistryCpuLimit = src.Spec.Components.DevfileRegistry.Deployment.Containers[0].Resources.Limits.Cpu.String()
dst.Spec.Server.DevfileRegistryMemoryLimit = resource2String(src.Spec.Components.DevfileRegistry.Deployment.Containers[0].Resources.Limits.Memory)
dst.Spec.Server.DevfileRegistryCpuLimit = resource2String(src.Spec.Components.DevfileRegistry.Deployment.Containers[0].Resources.Limits.Cpu)
}
}
}
Expand All @@ -252,12 +254,12 @@ func (dst *CheCluster) convertFrom_Server_Dashboard(src *chev2.CheCluster) error
dst.Spec.Server.DashboardImagePullPolicy = string(src.Spec.Components.Dashboard.Deployment.Containers[0].ImagePullPolicy)
if src.Spec.Components.Dashboard.Deployment.Containers[0].Resources != nil {
if src.Spec.Components.Dashboard.Deployment.Containers[0].Resources.Requests != nil {
dst.Spec.Server.DashboardMemoryRequest = src.Spec.Components.Dashboard.Deployment.Containers[0].Resources.Requests.Memory.String()
dst.Spec.Server.DashboardCpuRequest = src.Spec.Components.Dashboard.Deployment.Containers[0].Resources.Requests.Cpu.String()
dst.Spec.Server.DashboardMemoryRequest = resource2String(src.Spec.Components.Dashboard.Deployment.Containers[0].Resources.Requests.Memory)
dst.Spec.Server.DashboardCpuRequest = resource2String(src.Spec.Components.Dashboard.Deployment.Containers[0].Resources.Requests.Cpu)
}
if src.Spec.Components.Dashboard.Deployment.Containers[0].Resources.Limits != nil {
dst.Spec.Server.DashboardMemoryLimit = src.Spec.Components.Dashboard.Deployment.Containers[0].Resources.Limits.Memory.String()
dst.Spec.Server.DashboardCpuLimit = src.Spec.Components.Dashboard.Deployment.Containers[0].Resources.Limits.Cpu.String()
dst.Spec.Server.DashboardMemoryLimit = resource2String(src.Spec.Components.Dashboard.Deployment.Containers[0].Resources.Limits.Memory)
dst.Spec.Server.DashboardCpuLimit = resource2String(src.Spec.Components.Dashboard.Deployment.Containers[0].Resources.Limits.Cpu)
}
}
}
Expand Down Expand Up @@ -332,12 +334,12 @@ func (dst *CheCluster) convertFrom_Database(src *chev2.CheCluster) error {
dst.Spec.Database.PostgresImagePullPolicy = src.Spec.Components.Database.Deployment.Containers[0].ImagePullPolicy
if src.Spec.Components.Database.Deployment.Containers[0].Resources != nil {
if src.Spec.Components.Database.Deployment.Containers[0].Resources.Requests != nil {
dst.Spec.Database.ChePostgresContainerResources.Requests.Memory = src.Spec.Components.Database.Deployment.Containers[0].Resources.Requests.Memory.String()
dst.Spec.Database.ChePostgresContainerResources.Requests.Cpu = src.Spec.Components.Database.Deployment.Containers[0].Resources.Requests.Cpu.String()
dst.Spec.Database.ChePostgresContainerResources.Requests.Memory = resource2String(src.Spec.Components.Database.Deployment.Containers[0].Resources.Requests.Memory)
dst.Spec.Database.ChePostgresContainerResources.Requests.Cpu = resource2String(src.Spec.Components.Database.Deployment.Containers[0].Resources.Requests.Cpu)
}
if src.Spec.Components.Database.Deployment.Containers[0].Resources.Limits != nil {
dst.Spec.Database.ChePostgresContainerResources.Limits.Memory = src.Spec.Components.Database.Deployment.Containers[0].Resources.Limits.Memory.String()
dst.Spec.Database.ChePostgresContainerResources.Limits.Cpu = src.Spec.Components.Database.Deployment.Containers[0].Resources.Limits.Cpu.String()
dst.Spec.Database.ChePostgresContainerResources.Limits.Memory = resource2String(src.Spec.Components.Database.Deployment.Containers[0].Resources.Limits.Memory)
dst.Spec.Database.ChePostgresContainerResources.Limits.Cpu = resource2String(src.Spec.Components.Database.Deployment.Containers[0].Resources.Limits.Cpu)
}
}
}
Expand Down Expand Up @@ -443,3 +445,10 @@ func findTrustStoreConfigMap(namespace string) (string, error) {

return "", nil
}

func resource2String(resource resource.Quantity) string {
if resource.IsZero() {
return ""
}
return resource.String()
}
24 changes: 16 additions & 8 deletions api/v1/checluster_conversion_to.go
Original file line number Diff line number Diff line change
Expand Up @@ -633,22 +633,30 @@ func toCheV2Deployment(
}

if memoryRequest != "" || cpuRequest != "" {
resources = &chev2.ResourceRequirements{
Requests: &chev2.ResourceList{
Memory: resource.MustParse(memoryRequest),
Cpu: resource.MustParse(cpuRequest),
},
if resources == nil {
resources = &chev2.ResourceRequirements{}
}
resources.Requests = &chev2.ResourceList{}

if memoryRequest != "" {
resources.Requests.Memory = resource.MustParse(memoryRequest)
}
if cpuRequest != "" {
resources.Requests.Cpu = resource.MustParse(cpuRequest)
}
}

if memoryLimit != "" || cpuLimit != "" {
if resources == nil {
resources = &chev2.ResourceRequirements{}
}
resources.Limits = &chev2.ResourceList{}

resources.Limits = &chev2.ResourceList{
Memory: resource.MustParse(memoryLimit),
Cpu: resource.MustParse(cpuLimit),
if memoryLimit != "" {
resources.Limits.Memory = resource.MustParse(memoryLimit)
}
if cpuLimit != "" {
resources.Limits.Cpu = resource.MustParse(cpuLimit)
}
}

Expand Down

0 comments on commit dcc491a

Please sign in to comment.