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

davsclaus 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 0121227d3cb6 CAMEL-21935 camel-jbang - kubernetes plugin fails to run 
when knative-service.enabled=true in openshift (#23995)
0121227d3cb6 is described below

commit 0121227d3cb6ddd74320f135070718764ed9228a
Author: Claudio Miranda <[email protected]>
AuthorDate: Fri Jun 12 17:42:32 2026 -0300

    CAMEL-21935 camel-jbang - kubernetes plugin fails to run when 
knative-service.enabled=true in openshift (#23995)
    
    * Set the correct image registry and group when building in openshift
---
 .../modules/ROOT/pages/camel-jbang-kubernetes.adoc       | 16 ++++++++--------
 .../jbang/core/commands/kubernetes/KubernetesExport.java |  2 ++
 .../jbang/core/commands/kubernetes/KubernetesRun.java    |  8 +++++++-
 .../core/commands/kubernetes/traits/ContainerTrait.java  |  3 +--
 .../core/commands/kubernetes/KubernetesExportTest.java   |  9 ++++++---
 5 files changed, 24 insertions(+), 14 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 d5ba00f683b3..fb01a58b061b 100644
--- a/docs/user-manual/modules/ROOT/pages/camel-jbang-kubernetes.adoc
+++ b/docs/user-manual/modules/ROOT/pages/camel-jbang-kubernetes.adoc
@@ -281,8 +281,6 @@ Use https://knative.dev/docs/serving/[Knative serving] for 
serverless workloads
 
 NOTE: Disabled by default — enable with `--trait knative-service.enabled=true`.
 
-WARN: Currently does not work on OpenShift.
-
 [cols="2m,1m,5a"]
 |===
 |Property | Type | Description
@@ -737,13 +735,15 @@ Quick start for local development with Minikube (Camel 
4.10+):
 ----
 minikube start --addons registry --driver=docker
 eval $(minikube -p minikube docker-env)
-camel kubernetes run demo.camel.yaml --cluster-type=minikube \
-  --build-property=quarkus.kubernetes.image-pull-policy=Never \
-  --image-registry "$(kubectl -n kube-system get service registry -o 
jsonpath='{.spec.clusterIP}')" \
-  --image-builder=docker
+camel kubernetes run demo.camel.yaml
 ----
 
-IMPORTANT: The `--build-property=quarkus.kubernetes.image-pull-policy=Never` 
flag is required for Minikube deployments.
+== Deployment tips and troubleshooting
+
+* If there is any error with `camel kubernetes run`, set `--verbose` to 
display additional logging.
+
+* You may want to examine the generated maven project in 
`.camel-jbang-run/<name>`.
 
-NOTE: Docker multi-platform build is used. Follow the 
https://docs.docker.com/build/building/multi-platform/#build-multi-platform-images[Docker
 multi-platform requirements].
+* If there are issues building the container image or deploying the kubernetes 
manifests, consider disabling the kubernetes cluster detection with 
`--disable-auto`.
 
+* Note that Docker multi-platform build is used. It requires to have followed 
these 
https://docs.docker.com/build/building/multi-platform/#build-multi-platform-images[Docker
 requirements].
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExport.java
 
b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExport.java
index 63225809d096..9f0a084a1fd3 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExport.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExport.java
@@ -522,6 +522,8 @@ public class KubernetesExport extends Export {
             return "localhost:5001";
         } else if (ClusterType.MINIKUBE.isEqualTo(clusterType)) {
             return "localhost:5000";
+        } else if (ClusterType.OPENSHIFT.isEqualTo(clusterType)) {
+            return "image-registry.openshift-image-registry.svc:5000";
         }
 
         return null;
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesRun.java
 
b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesRun.java
index 2eeacfaf02f2..a8651d4642b3 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesRun.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesRun.java
@@ -726,6 +726,7 @@ public class KubernetesRun extends KubernetesBaseCommand {
         }
         // suppress maven transfer progress
         args.add("-ntp");
+        args.add("-DskipTests");
         args.add("--file");
         args.add(new File(workingDir, "pom.xml").getAbsolutePath());
 
@@ -751,7 +752,8 @@ public class KubernetesRun extends KubernetesBaseCommand {
             // will generate the regular Deployment, so we have to disable the 
jkube resources task to not run and not generate the deployment.yml
             // apply the knative service manifest and specify the knative 
service.yml
             args.add("-Djkube.skip.resource=true");
-            args.add(prefix + ":build");
+            // run the "package" task instead of k8s:deploy
+            args.add("package");
             args.add(prefix + ":apply");
             if (isOpenshift) {
                 
args.add("-Djkube.openshiftManifest=src/main/jkube/service.yml");
@@ -801,6 +803,10 @@ public class KubernetesRun extends KubernetesBaseCommand {
             if (ClusterType.MINIKUBE == cluster) {
                 this.imageBuilder = "docker";
                 this.imagePush = false;
+            } else if (ClusterType.OPENSHIFT == cluster) {
+                if (ObjectHelper.isEmpty(imageGroup)) {
+                    this.imageGroup = client().getNamespace();
+                }
             }
             if (verbose) {
                 printer().println(this.clusterType);
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 275722ab8644..469886680b4d 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
@@ -86,14 +86,13 @@ public class ContainerTrait extends BaseTrait {
         }
         container.withResources(resourceRequirementsBuilder.build());
 
-        io.fabric8.kubernetes.api.model.Container cc = container.build();
         context.doWithKnativeServices(s -> s.editOrNewSpec()
                 .editOrNewTemplate()
                 .editOrNewMetadata()
                 .addToLabels(KUBERNETES_LABEL_NAME, context.getName())
                 .endMetadata()
                 .editOrNewSpec()
-                .addToContainers(cc)
+                .addToContainers(container.build())
                 .endSpec()
                 .endTemplate()
                 .endSpec());
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 c6b5025e6625..8ff1cc443918 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
@@ -487,7 +487,8 @@ class KubernetesExportTest extends 
KubernetesExportBaseTestSupport {
         Container container = 
deployment.getSpec().getTemplate().getSpec().getContainers().get(0);
         Assertions.assertEquals("route-service", 
deployment.getMetadata().getName());
         Assertions.assertEquals(1, 
deployment.getSpec().getTemplate().getSpec().getContainers().size());
-        Assertions.assertEquals("route-service:1.0-SNAPSHOT", 
container.getImage());
+        
Assertions.assertEquals("image-registry.openshift-image-registry.svc:5000/route-service:1.0-SNAPSHOT",
+                container.getImage());
         Assertions.assertEquals(1, container.getPorts().size());
         Assertions.assertEquals("http", container.getPorts().get(0).getName());
         Assertions.assertEquals(8080, 
container.getPorts().get(0).getContainerPort());
@@ -498,8 +499,10 @@ class KubernetesExportTest extends 
KubernetesExportBaseTestSupport {
         Assertions.assertEquals("1.0-SNAPSHOT", model.getVersion());
 
         Properties props = model.getProperties();
-        Assertions.assertEquals("route-service:1.0-SNAPSHOT", 
props.get("jkube.image.name"));
-        Assertions.assertEquals("route-service:1.0-SNAPSHOT", 
props.get("jkube.container-image.name"));
+        
Assertions.assertEquals("image-registry.openshift-image-registry.svc:5000/route-service:1.0-SNAPSHOT",
+                props.get("jkube.image.name"));
+        
Assertions.assertEquals("image-registry.openshift-image-registry.svc:5000/route-service:1.0-SNAPSHOT",
+                props.get("jkube.container-image.name"));
 
         Route route = getRoute(rt);
         Assertions.assertEquals("route-service", 
route.getMetadata().getName());

Reply via email to