This is an automated email from the ASF dual-hosted git repository.

cdeppisch pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/main by this push:
     new 7571f4eb23d CAMEL-20984: Add Camel JBang Kubernetes trait container 
missing options
7571f4eb23d is described below

commit 7571f4eb23df71b7c2eb168401e13793192e38ca
Author: Gaelle Fournier <gaelle.fournier.w...@gmail.com>
AuthorDate: Mon Jul 22 10:09:25 2024 +0200

    CAMEL-20984: Add Camel JBang Kubernetes trait container missing options
    
    * Add missing container trait options to Kubernetes plugin: 
container.request-cpu, container.request-memory, container.limit-cpu, 
container.limit-memory
    * Fix parsing to be able to map kebab case command option to  camel case 
containing an uppercase part (like CPU or SSL)
---
 .../modules/ROOT/pages/camel-jbang-kubernetes.adoc | 22 +++++++++++++++++++++-
 .../core/commands/kubernetes/KubernetesHelper.java |  1 +
 .../commands/kubernetes/traits/ContainerTrait.java | 17 +++++++++++++++++
 .../commands/kubernetes/KubernetesExportTest.java  | 18 +++++++++++++++++-
 4 files changed, 56 insertions(+), 2 deletions(-)

diff --git a/docs/user-manual/modules/ROOT/pages/camel-jbang-kubernetes.adoc 
b/docs/user-manual/modules/ROOT/pages/camel-jbang-kubernetes.adoc
index 0702390d39f..70f04e90c12 100644
--- a/docs/user-manual/modules/ROOT/pages/camel-jbang-kubernetes.adoc
+++ b/docs/user-manual/modules/ROOT/pages/camel-jbang-kubernetes.adoc
@@ -190,6 +190,22 @@ The container trait is able to customize the container 
specification with follow
 | PullPolicy
 | The pull policy: Always\|Never\|IfNotPresent
 
+| container.request-cpu
+| string
+| The minimum amount of CPU required.
+
+| container.request-memory
+| string
+| The minimum amount of memory required.
+
+| container.limit-cpu
+| string
+| The maximum amount of CPU required.
+
+| container.limit-memory
+| string
+| The maximum amount of memory required.
+
 |===
 
 The syntax to specify container trait options is as follows:
@@ -203,7 +219,7 @@ You may specify these options with the export command to 
customize the container
 
 [source,bash]
 ----
-camel kubernetes export Sample.java --trait container.name=my-container 
--trait container.port=8088 --trait container.imagePullPolicy=IfNotPresent
+camel kubernetes export Sample.java --trait container.name=my-container 
--trait container.port=8088 --trait container.imagePullPolicy=IfNotPresent 
--trait container.request-cpu=0.005 --trait container.request-memory=100Mi
 ----
 
 This results in the following container specification in the Deployment 
resource.
@@ -233,6 +249,10 @@ spec:
         - containerPort: 8088 #<4>
           name: http
           protocol: TCP
+        resources:
+          requests:
+            memory: 100Mi
+            cpu: '0.005'
 ----
 <1> Container image running the application
 <2> Customized image pull policy
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesHelper.java
 
b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesHelper.java
index 26ad4c4235b..7accbf83990 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesHelper.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesHelper.java
@@ -55,6 +55,7 @@ public final class KubernetesHelper {
                 .enable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING)
                 .disable(JsonParser.Feature.AUTO_CLOSE_SOURCE)
                 .enable(MapperFeature.BLOCK_UNSAFE_POLYMORPHIC_BASE_TYPES)
+                .enable(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES)
                 .build()
                 .setDefaultPropertyInclusion(
                         
JsonInclude.Value.construct(JsonInclude.Include.NON_EMPTY, 
JsonInclude.Include.NON_EMPTY));
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/traits/ContainerTrait.java
 
b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/traits/ContainerTrait.java
index 946bd4efb0a..83531df2e75 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/traits/ContainerTrait.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/traits/ContainerTrait.java
@@ -21,6 +21,8 @@ import java.util.Optional;
 
 import io.fabric8.kubernetes.api.model.ContainerBuilder;
 import io.fabric8.kubernetes.api.model.ContainerPortBuilder;
+import io.fabric8.kubernetes.api.model.Quantity;
+import io.fabric8.kubernetes.api.model.ResourceRequirementsBuilder;
 import org.apache.camel.v1.integrationspec.Traits;
 import org.apache.camel.v1.integrationspec.traits.Container;
 
@@ -59,6 +61,21 @@ public class ContainerTrait extends BaseTrait {
                     .build());
         }
 
+        ResourceRequirementsBuilder resourceRequirementsBuilder = new 
ResourceRequirementsBuilder();
+        if (containerTrait.getRequestMemory() != null) {
+            resourceRequirementsBuilder.addToRequests("memory", new 
Quantity(containerTrait.getRequestMemory()));
+        }
+        if (containerTrait.getRequestCPU() != null) {
+            resourceRequirementsBuilder.addToRequests("cpu", new 
Quantity(containerTrait.getRequestCPU()));
+        }
+        if (containerTrait.getLimitMemory() != null) {
+            resourceRequirementsBuilder.addToLimits("memory", new 
Quantity(containerTrait.getLimitMemory()));
+        }
+        if (containerTrait.getLimitCPU() != null) {
+            resourceRequirementsBuilder.addToLimits("cpu", new 
Quantity(containerTrait.getLimitCPU()));
+        }
+        container.withResources(resourceRequirementsBuilder.build());
+
         context.doWithDeployments(d -> d.editOrNewSpec()
                 .editOrNewTemplate()
                 .editOrNewMetadata()
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/test/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExportTest.java
 
b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/test/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExportTest.java
index 29cc1bd87cc..069e68ba24b 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/test/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExportTest.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/test/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExportTest.java
@@ -143,7 +143,11 @@ class KubernetesExportTest extends KubernetesBaseTest {
                 "container.port-name=custom",
                 "container.service-port-name=custom-port",
                 "container.image-pull-policy=IfNotPresent",
-                "container.service-port=443" };
+                "container.service-port=443",
+                "container.request-cpu=5m",
+                "container.request-memory=100Mi",
+                "container.limit-cpu=0.5",
+                "container.limit-memory=512Mi" };
         command.doCall();
 
         Assertions.assertTrue(hasService(workingDir));
@@ -160,6 +164,18 @@ class KubernetesExportTest extends KubernetesBaseTest {
                 
deployment.getSpec().getTemplate().getSpec().getContainers().get(0).getPorts().get(0).getName());
         Assertions.assertEquals(8088,
                 
deployment.getSpec().getTemplate().getSpec().getContainers().get(0).getPorts().get(0).getContainerPort());
+        Assertions.assertEquals("5m",
+                
deployment.getSpec().getTemplate().getSpec().getContainers().get(0).getResources().getRequests().get("cpu")
+                        .toString());
+        Assertions.assertEquals("100Mi",
+                
deployment.getSpec().getTemplate().getSpec().getContainers().get(0).getResources().getRequests().get("memory")
+                        .toString());
+        Assertions.assertEquals("0.5",
+                
deployment.getSpec().getTemplate().getSpec().getContainers().get(0).getResources().getLimits().get("cpu")
+                        .toString());
+        Assertions.assertEquals("512Mi",
+                
deployment.getSpec().getTemplate().getSpec().getContainers().get(0).getResources().getLimits().get("memory")
+                        .toString());
 
         Service service = getService(workingDir);
         Assertions.assertEquals("route-service", 
service.getMetadata().getName());

Reply via email to