This is an automated email from the ASF dual-hosted git repository. pcongiusti pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel-k.git
commit 123ffb1fcbfd4e31a8dec45310e4022884838563 Author: Pasquale Congiusti <[email protected]> AuthorDate: Wed May 10 16:37:16 2023 +0200 chore(e2e): builder resources test --- e2e/common/traits/builder_test.go | 43 +++++++++++++++++++++++++++++++ e2e/support/test_support.go | 10 +++++++ pkg/apis/camel/v1/common_types_support.go | 9 +++++++ pkg/controller/build/build_pod.go | 22 ++++++++-------- pkg/controller/integrationkit/build.go | 9 ++++++- pkg/util/kubernetes/factory_test.go | 9 +++---- 6 files changed, 85 insertions(+), 17 deletions(-) diff --git a/e2e/common/traits/builder_test.go b/e2e/common/traits/builder_test.go index e57e0ceba..8eeb0c834 100644 --- a/e2e/common/traits/builder_test.go +++ b/e2e/common/traits/builder_test.go @@ -38,18 +38,61 @@ func TestBuilderTrait(t *testing.T) { RegisterTestingT(t) name := "java" + t.Run("Run build strategy routine", func(t *testing.T) { Expect(KamelRunWithID(operatorID, ns, "files/Java.java", "--name", name, "-t", "builder.strategy=routine").Execute()).To(Succeed()) + Eventually(IntegrationPodPhase(ns, name), TestTimeoutLong).Should(Equal(corev1.PodRunning)) Eventually(IntegrationConditionStatus(ns, name, v1.IntegrationConditionReady), TestTimeoutShort).Should(Equal(corev1.ConditionTrue)) Eventually(IntegrationLogs(ns, name), TestTimeoutShort).Should(ContainSubstring("Magicstring!")) integrationKitName := IntegrationKit(ns, name)() builderKitName := fmt.Sprintf("camel-k-%s-builder", integrationKitName) + Eventually(BuildConfig(ns, integrationKitName)().Strategy, TestTimeoutShort).Should(Equal(v1.BuildStrategyRoutine)) + // Default resource CPU Check + Eventually(BuildConfig(ns, integrationKitName)().RequestCPU, TestTimeoutShort).Should(Equal("")) + Eventually(BuildConfig(ns, integrationKitName)().LimitCPU, TestTimeoutShort).Should(Equal("")) + Eventually(BuildConfig(ns, integrationKitName)().RequestMemory, TestTimeoutShort).Should(Equal("")) + Eventually(BuildConfig(ns, integrationKitName)().LimitMemory, TestTimeoutShort).Should(Equal("")) + Eventually(BuilderPod(ns, builderKitName), TestTimeoutShort).Should(BeNil()) + // We need to remove the kit as well + Expect(Kamel("reset", "-n", ns).Execute()).To(Succeed()) + }) + + t.Run("Run build resources configuration", func(t *testing.T) { + Expect(KamelRunWithID(operatorID, ns, "files/Java.java", + "--name", name, + "-t", "builder.request-cpu=500m", + "-t", "builder.limit-cpu=1000m", + "-t", "builder.request-memory=2Gi", + "-t", "builder.limit-memory=3Gi", + ).Execute()).To(Succeed()) + + Eventually(IntegrationPodPhase(ns, name), TestTimeoutLong).Should(Equal(corev1.PodRunning)) + Eventually(IntegrationConditionStatus(ns, name, v1.IntegrationConditionReady), TestTimeoutShort).Should(Equal(corev1.ConditionTrue)) + Eventually(IntegrationLogs(ns, name), TestTimeoutShort).Should(ContainSubstring("Magicstring!")) + + integrationKitName := IntegrationKit(ns, name)() + builderKitName := fmt.Sprintf("camel-k-%s-builder", integrationKitName) + + Eventually(BuildConfig(ns, integrationKitName)().Strategy, TestTimeoutShort).Should(Equal(v1.BuildStrategyPod)) + Eventually(BuildConfig(ns, integrationKitName)().RequestCPU, TestTimeoutShort).Should(Equal("500m")) + Eventually(BuildConfig(ns, integrationKitName)().LimitCPU, TestTimeoutShort).Should(Equal("1000m")) + Eventually(BuildConfig(ns, integrationKitName)().RequestMemory, TestTimeoutShort).Should(Equal("2Gi")) + Eventually(BuildConfig(ns, integrationKitName)().LimitMemory, TestTimeoutShort).Should(Equal("3Gi")) + + Eventually(BuilderPod(ns, builderKitName), TestTimeoutShort).ShouldNot(BeNil()) + // Let's assert we set the resources on the builder container + Eventually(BuilderPod(ns, builderKitName)().Spec.InitContainers[0].Name, TestTimeoutShort).Should(Equal("builder")) + Eventually(BuilderPod(ns, builderKitName)().Spec.InitContainers[0].Resources.Requests.Cpu().String(), TestTimeoutShort).Should(Equal("500m")) + Eventually(BuilderPod(ns, builderKitName)().Spec.InitContainers[0].Resources.Limits.Cpu().String(), TestTimeoutShort).Should(Equal("1")) + Eventually(BuilderPod(ns, builderKitName)().Spec.InitContainers[0].Resources.Requests.Memory().String(), TestTimeoutShort).Should(Equal("2Gi")) + Eventually(BuilderPod(ns, builderKitName)().Spec.InitContainers[0].Resources.Limits.Memory().String(), TestTimeoutShort).Should(Equal("3Gi")) + Expect(Kamel("delete", "--all", "-n", ns).Execute()).To(Succeed()) }) } diff --git a/e2e/support/test_support.go b/e2e/support/test_support.go index fd07afc60..1823c229a 100644 --- a/e2e/support/test_support.go +++ b/e2e/support/test_support.go @@ -1602,6 +1602,16 @@ func Build(ns, name string) func() *v1.Build { } } +func BuildConfig(ns, name string) func() v1.BuildConfiguration { + return func() v1.BuildConfiguration { + build := Build(ns, name)() + if build != nil { + return build.Spec.Configuration + } + return v1.BuildConfiguration{} + } +} + func BuildPhase(ns, name string) func() v1.BuildPhase { return func() v1.BuildPhase { build := Build(ns, name)() diff --git a/pkg/apis/camel/v1/common_types_support.go b/pkg/apis/camel/v1/common_types_support.go index d16aeaee1..b66dca9a8 100644 --- a/pkg/apis/camel/v1/common_types_support.go +++ b/pkg/apis/camel/v1/common_types_support.go @@ -155,3 +155,12 @@ func SetAnnotation(obj *metav1.ObjectMeta, name string, value string) { var _ json.Marshaler = (*RawMessage)(nil) var _ json.Unmarshaler = (*RawMessage)(nil) + +// IsEmpty -- . +func (bc *BuildConfiguration) IsEmpty() bool { + return bc.Strategy == "" && + bc.RequestCPU == "" && + bc.RequestMemory == "" && + bc.LimitCPU == "" && + bc.LimitMemory == "" +} diff --git a/pkg/controller/build/build_pod.go b/pkg/controller/build/build_pod.go index da25ab3f0..88c35d078 100644 --- a/pkg/controller/build/build_pod.go +++ b/pkg/controller/build/build_pod.go @@ -165,14 +165,11 @@ func newBuildPod(ctx context.Context, c ctrl.Reader, build *v1.Build) (*corev1.P pod.Spec.Containers = pod.Spec.InitContainers[len(pod.Spec.InitContainers)-1 : len(pod.Spec.InitContainers)] pod.Spec.InitContainers = pod.Spec.InitContainers[:len(pod.Spec.InitContainers)-1] - if err := configureResources(build.Spec.Configuration, &pod.Spec.Containers[0]); err != nil { - return pod, err - } - return pod, nil } -func configureResources(conf v1.BuildConfiguration, container *corev1.Container) error { +func configureResources(build *v1.Build, container *corev1.Container) { + conf := build.Spec.Configuration requestsList := container.Resources.Requests limitsList := container.Resources.Limits var err error @@ -185,25 +182,27 @@ func configureResources(conf v1.BuildConfiguration, container *corev1.Container) requestsList, err = kubernetes.ConfigureResource(conf.RequestCPU, requestsList, corev1.ResourceCPU) if err != nil { - return err + Log.WithValues("request-namespace", build.Namespace, "request-name", build.Name). + Errorf(err, "Could not configure builder resource cpu, leaving default value") } requestsList, err = kubernetes.ConfigureResource(conf.RequestMemory, requestsList, corev1.ResourceMemory) if err != nil { - return err + Log.WithValues("request-namespace", build.Namespace, "request-name", build.Name). + Errorf(err, "Could not configure builder resource memory, leaving default value") } limitsList, err = kubernetes.ConfigureResource(conf.LimitCPU, limitsList, corev1.ResourceCPU) if err != nil { - return err + Log.WithValues("request-namespace", build.Namespace, "request-name", build.Name). + Errorf(err, "Could not configure builder limit cpu, leaving default value") } limitsList, err = kubernetes.ConfigureResource(conf.LimitMemory, limitsList, corev1.ResourceMemory) if err != nil { - return err + Log.WithValues("request-namespace", build.Namespace, "request-name", build.Name). + Errorf(err, "Could not configure builder limit memory, leaving default value") } container.Resources.Requests = requestsList container.Resources.Limits = limitsList - - return nil } func deleteBuilderPod(ctx context.Context, c ctrl.Writer, build *v1.Build) error { @@ -287,6 +286,7 @@ func addBuildTaskToPod(build *v1.Build, taskName string, pod *corev1.Pod) { Env: proxyFromEnvironment(), } + configureResources(build, &container) addContainerToPod(build, container, pod) } diff --git a/pkg/controller/integrationkit/build.go b/pkg/controller/integrationkit/build.go index d7dcea5dd..ab7744ecd 100644 --- a/pkg/controller/integrationkit/build.go +++ b/pkg/controller/integrationkit/build.go @@ -109,7 +109,14 @@ func (action *buildAction) handleBuildSubmitted(ctx context.Context, kit *v1.Int // It has to be the same namespace as the operator as they must share a PVC builderPodNamespace := platform.GetOperatorNamespace() - buildConfig := env.Platform.Status.Build.BuildConfiguration + buildConfig := env.BuildConfiguration + if buildConfig.IsEmpty() { + // default to IntegrationPlatform configuration + buildConfig = env.Platform.Status.Build.BuildConfiguration + } else if buildConfig.Strategy == "" { + // we always need to define a strategy, so we default to platform if none + buildConfig.Strategy = env.Platform.Status.Build.BuildConfiguration.Strategy + } // nolint: contextcheck if buildConfig.Strategy == v1.BuildStrategyPod { diff --git a/pkg/util/kubernetes/factory_test.go b/pkg/util/kubernetes/factory_test.go index 530c747fa..581e2d82e 100644 --- a/pkg/util/kubernetes/factory_test.go +++ b/pkg/util/kubernetes/factory_test.go @@ -22,7 +22,6 @@ import ( "testing" "github.com/stretchr/testify/assert" - corev1 "k8s.io/api/core/v1" v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" ) @@ -173,14 +172,14 @@ func TestMissingResourceRequirements(t *testing.T) { } func TestConfigureResources(t *testing.T) { - requestsList := make(corev1.ResourceList) - requestsList, err := ConfigureResource("500m", requestsList, corev1.ResourceCPU) + requestsList := make(v1.ResourceList) + requestsList, err := ConfigureResource("500m", requestsList, v1.ResourceCPU) assert.Nil(t, err) assert.Equal(t, "500m", requestsList.Cpu().String()) - requestsList, err = ConfigureResource("5Gi", requestsList, corev1.ResourceMemory) + requestsList, err = ConfigureResource("5Gi", requestsList, v1.ResourceMemory) assert.Nil(t, err) assert.Equal(t, "5Gi", requestsList.Memory().String()) - requestsList, err = ConfigureResource("5ss", requestsList, corev1.ResourceCPU) + requestsList, err = ConfigureResource("5ss", requestsList, v1.ResourceCPU) assert.NotNil(t, err) // Assert previous values haven't changed assert.Equal(t, "500m", requestsList.Cpu().String())
