From ddb02ae012715070461c0f9ce10dc49e74289f6e Mon Sep 17 00:00:00 2001 From: utkuerol Date: Mon, 3 Aug 2026 18:16:53 +0200 Subject: [PATCH] feat: expose container resources on service jobs --- provider/servicejob.go | 5 +++++ provider/servicejob_test.go | 28 ++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/provider/servicejob.go b/provider/servicejob.go index 73911cb..552c453 100644 --- a/provider/servicejob.go +++ b/provider/servicejob.go @@ -7,6 +7,8 @@ import ( "maps" "time" + corev1 "k8s.io/api/core/v1" + "github.com/codesphere-cloud/managed-services-lib/client" "github.com/codesphere-cloud/managed-services-lib/model" ) @@ -62,6 +64,8 @@ type ServiceJob struct { Labels map[string]string // ImagePullSecrets names Secrets used to pull Image from a private registry. ImagePullSecrets []string + // Resources sets the container's resource requests/limits. + Resources corev1.ResourceRequirements } // ServiceJobName is the Job naming convention: "-". It is stable @@ -93,6 +97,7 @@ func ServiceJobSpec(j ServiceJob) client.JobSpec { Secrets: j.Secrets, Labels: labels, ImagePullSecrets: j.ImagePullSecrets, + Resources: j.Resources, } } diff --git a/provider/servicejob_test.go b/provider/servicejob_test.go index b59ef2f..765e623 100644 --- a/provider/servicejob_test.go +++ b/provider/servicejob_test.go @@ -8,6 +8,8 @@ import ( . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/resource" "github.com/codesphere-cloud/managed-services-lib/client" "github.com/codesphere-cloud/managed-services-lib/model" @@ -65,6 +67,32 @@ var _ = Describe("Service job core", func() { }) Expect(spec.ImagePullSecrets).To(Equal([]string{"regcred"})) }) + + It("passes container resources through", func() { + res := corev1.ResourceRequirements{ + Requests: corev1.ResourceList{ + corev1.ResourceCPU: resource.MustParse("200m"), + corev1.ResourceMemory: resource.MustParse("256Mi"), + }, + Limits: corev1.ResourceList{ + corev1.ResourceCPU: resource.MustParse("1"), + corev1.ResourceMemory: resource.MustParse("512Mi"), + }, + } + spec := provider.ServiceJobSpec(provider.ServiceJob{ + Operation: provider.JobOpBackup, MsID: "svc-42", Key: "bkp-7", + Resources: res, + }) + Expect(spec.Resources).To(Equal(res)) + }) + + It("leaves resources unset if not specified", func() { + spec := provider.ServiceJobSpec(provider.ServiceJob{ + Operation: provider.JobOpBackup, MsID: "svc-42", Key: "bkp-7", + }) + Expect(spec.Resources.Requests).To(BeEmpty()) + Expect(spec.Resources.Limits).To(BeEmpty()) + }) }) Describe("OperationStatusFromJob", func() {