From 7b23d2c84ac4c8eb49ec4afaf2bfbf2ce06aa1cb Mon Sep 17 00:00:00 2001 From: Dawid Rusnak Date: Wed, 24 Jul 2024 14:35:03 +0200 Subject: [PATCH] fix: use default resources for the init container (#5684) --- .../testworkflowprocessor/container.go | 27 ++--------------- .../testworkflowprocessor/processor.go | 6 ++++ .../testworkflowprocessor/utils.go | 30 +++++++++++++++++++ 3 files changed, 39 insertions(+), 24 deletions(-) diff --git a/pkg/testworkflows/testworkflowprocessor/container.go b/pkg/testworkflows/testworkflowprocessor/container.go index 0b2b7b95370..31cd8a2488b 100644 --- a/pkg/testworkflows/testworkflowprocessor/container.go +++ b/pkg/testworkflows/testworkflowprocessor/container.go @@ -6,9 +6,7 @@ import ( "slices" "strings" - "github.com/pkg/errors" corev1 "k8s.io/api/core/v1" - quantity "k8s.io/apimachinery/pkg/api/resource" testworkflowsv1 "github.com/kubeshop/testkube-operator/api/testworkflows/v1" "github.com/kubeshop/testkube/internal/common" @@ -348,28 +346,9 @@ func (c *container) ToKubernetesTemplate() (corev1.Container, error) { if cr.WorkingDir != nil { workingDir = *cr.WorkingDir } - resources := corev1.ResourceRequirements{} - if cr.Resources != nil { - if len(cr.Resources.Requests) > 0 { - resources.Requests = make(corev1.ResourceList) - } - if len(cr.Resources.Limits) > 0 { - resources.Limits = make(corev1.ResourceList) - } - for k, v := range cr.Resources.Requests { - var err error - resources.Requests[k], err = quantity.ParseQuantity(v.String()) - if err != nil { - return corev1.Container{}, errors.Wrap(err, "parsing resources") - } - } - for k, v := range cr.Resources.Limits { - var err error - resources.Limits[k], err = quantity.ParseQuantity(v.String()) - if err != nil { - return corev1.Container{}, errors.Wrap(err, "parsing resources") - } - } + resources, resourcesErr := MapResourcesToKubernetesResources(cr.Resources) + if resourcesErr != nil { + return corev1.Container{}, resourcesErr } return corev1.Container{ Image: cr.Image, diff --git a/pkg/testworkflows/testworkflowprocessor/processor.go b/pkg/testworkflows/testworkflowprocessor/processor.go index dc842013273..998cef68800 100644 --- a/pkg/testworkflows/testworkflowprocessor/processor.go +++ b/pkg/testworkflows/testworkflowprocessor/processor.go @@ -312,6 +312,11 @@ func (p *processor) Bundle(ctx context.Context, workflow *testworkflowsv1.TestWo }, } AnnotateControlledBy(&podSpec, resourceRoot.Template(), resourceId.Template()) + + defaultResources, defaultResourcesErr := MapResourcesToKubernetesResources(common.Ptr(layer.ContainerDefaults().Resources())) + if defaultResourcesErr != nil { + return nil, defaultResourcesErr + } initContainer := corev1.Container{ Name: "tktw-init", Image: constants.DefaultInitImage, @@ -319,6 +324,7 @@ func (p *processor) Bundle(ctx context.Context, workflow *testworkflowsv1.TestWo Command: []string{"/bin/sh", "-c"}, Args: []string{constants.InitScript}, VolumeMounts: layer.ContainerDefaults().VolumeMounts(), + Resources: defaultResources, Env: []corev1.EnvVar{ {Name: "TK_DEBUG_NODE", ValueFrom: &corev1.EnvVarSource{ FieldRef: &corev1.ObjectFieldSelector{FieldPath: "spec.nodeName"}, diff --git a/pkg/testworkflows/testworkflowprocessor/utils.go b/pkg/testworkflows/testworkflowprocessor/utils.go index cd0fa239e7a..f899b9dbcca 100644 --- a/pkg/testworkflows/testworkflowprocessor/utils.go +++ b/pkg/testworkflows/testworkflowprocessor/utils.go @@ -4,10 +4,13 @@ import ( "fmt" "strings" + "github.com/pkg/errors" batchv1 "k8s.io/api/batch/v1" corev1 "k8s.io/api/core/v1" + quantity "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + testworkflowsv1 "github.com/kubeshop/testkube-operator/api/testworkflows/v1" "github.com/kubeshop/testkube/internal/common" "github.com/kubeshop/testkube/pkg/expressions" "github.com/kubeshop/testkube/pkg/rand" @@ -19,6 +22,33 @@ var BypassToolkitCheck = corev1.EnvVar{ Value: rand.String(20), } +func MapResourcesToKubernetesResources(resources *testworkflowsv1.Resources) (corev1.ResourceRequirements, error) { + result := corev1.ResourceRequirements{} + if resources != nil { + if len(resources.Requests) > 0 { + result.Requests = make(corev1.ResourceList) + } + if len(resources.Limits) > 0 { + result.Limits = make(corev1.ResourceList) + } + for k, v := range resources.Requests { + var err error + result.Requests[k], err = quantity.ParseQuantity(v.String()) + if err != nil { + return corev1.ResourceRequirements{}, errors.Wrap(err, "parsing resources") + } + } + for k, v := range resources.Limits { + var err error + result.Limits[k], err = quantity.ParseQuantity(v.String()) + if err != nil { + return corev1.ResourceRequirements{}, errors.Wrap(err, "parsing resources") + } + } + } + return result, nil +} + func AnnotateControlledBy(obj metav1.Object, rootId, id string) { labels := obj.GetLabels() if labels == nil {