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

claudio4j 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 af8ff59d7e0 camel-jbang-plugin-kubernetes: change the openshift 
cluster detection (#17718)
af8ff59d7e0 is described below

commit af8ff59d7e0517892aa784c474705b101128eb72
Author: Claudio Miranda <[email protected]>
AuthorDate: Fri Apr 11 06:04:19 2025 -0300

    camel-jbang-plugin-kubernetes: change the openshift cluster detection 
(#17718)
    
    This improved way to detect openshift cluster, given the previous mechanism
    required permission to read from cluster wide apis
---
 .../core/commands/kubernetes/KubernetesHelper.java | 25 +++++++++-----------
 .../kubernetes/KubernetesRunCustomTest.java        | 27 ++++++++++------------
 .../src/test/resources/log4j2.properties           |  3 ++-
 3 files changed, 25 insertions(+), 30 deletions(-)

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 507d8cb0911..5c89bb77435 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
@@ -32,9 +32,9 @@ import com.fasterxml.jackson.databind.MapperFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.SerializationFeature;
 import com.fasterxml.jackson.databind.json.JsonMapper;
+import io.fabric8.kubernetes.api.model.APIGroup;
 import io.fabric8.kubernetes.api.model.ConfigMap;
 import io.fabric8.kubernetes.api.model.ConfigMapBuilder;
-import io.fabric8.kubernetes.api.model.GenericKubernetesResource;
 import io.fabric8.kubernetes.api.model.GenericKubernetesResourceList;
 import io.fabric8.kubernetes.api.model.Pod;
 import io.fabric8.kubernetes.client.KubernetesClient;
@@ -152,24 +152,17 @@ public final class KubernetesHelper {
     private static boolean isConnectedToOpenshift() {
         boolean ocp = false;
         try {
-            // set to openshift if there is 
clusterversions.config.openshift.io/version
-            ResourceDefinitionContext ocpVersion = new 
ResourceDefinitionContext.Builder()
-                    .withGroup("config.openshift.io")
-                    .withVersion("v1")
-                    .withKind("ClusterVersion")
-                    .withNamespaced(false)
-                    .build();
-            GenericKubernetesResource versioncr
-                    = 
getKubernetesClient().genericKubernetesResources(ocpVersion).withName("version").get();
-            ocp = versioncr != null;
+            APIGroup apiGroup = 
getKubernetesClient().getApiGroup("config.openshift.io");
+            ocp = apiGroup != null;
         } catch (RuntimeException e) {
-            // ignore it, since we try to discover the cluster and don't want 
the caller to handle any error
+            System.out.println("Failed to detect cluster: " + e.getMessage() + 
", default to kubernetes.");
         }
         return ocp;
     }
 
     private static boolean isConnectedToMinikube() {
         boolean minikube = false;
+        boolean minikubeEnv = false;
         try {
             ResourceDefinitionContext nodecrd = new 
ResourceDefinitionContext.Builder()
                     .withVersion("v1")
@@ -182,12 +175,16 @@ public final class KubernetesHelper {
             minikube = list.getItems().size() > 0;
             // thse env properties are set when running eval $(minikube 
docker-env) in the console
             // this is important for the docker builder to actually build the 
image in the exposed docker from the minikube registry
-            minikube = minikube && System.getenv("MINIKUBE_ACTIVE_DOCKERD") != 
null
+            minikubeEnv = System.getenv("MINIKUBE_ACTIVE_DOCKERD") != null
                     && System.getenv("DOCKER_TLS_VERIFY") != null;
+            if (minikube && !minikubeEnv) {
+                System.out.println(
+                        "It seems you have minikube running but forgot to run 
\"eval $(minikube docker-env)\", default cluster to kubernetes.");
+            }
         } catch (Exception e) {
             // ignore it, since we try to discover the cluster and don't want 
the caller to handle any error
         }
-        return minikube;
+        return minikube && minikubeEnv;
     }
 
     // when minikube is used with the registry addon exposed
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/test/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesRunCustomTest.java
 
b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/test/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesRunCustomTest.java
index d51d4f2b359..93ee09e34e4 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/test/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesRunCustomTest.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/test/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesRunCustomTest.java
@@ -24,6 +24,8 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 
+import io.fabric8.kubernetes.api.model.APIGroup;
+import io.fabric8.kubernetes.api.model.APIGroupBuilder;
 import io.fabric8.kubernetes.api.model.HasMetadata;
 import io.fabric8.kubernetes.api.model.Node;
 import io.fabric8.kubernetes.api.model.NodeBuilder;
@@ -34,8 +36,6 @@ import io.fabric8.kubernetes.api.model.apps.Deployment;
 import io.fabric8.kubernetes.client.KubernetesClient;
 import io.fabric8.kubernetes.client.server.mock.EnableKubernetesMockClient;
 import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer;
-import io.fabric8.openshift.api.model.config.v1.ClusterVersion;
-import io.fabric8.openshift.api.model.config.v1.ClusterVersionBuilder;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
 import 
org.apache.camel.dsl.jbang.core.commands.kubernetes.traits.ContainerTrait;
@@ -94,11 +94,12 @@ class KubernetesRunCustomTest {
         KubernetesHelper.setKubernetesClient(client);
         setupServerExpectsOpenshift();
         KubernetesRun command = createCommand(new String[] { 
"classpath:route.yaml" },
-                "--image-registry=quay.io", "--image-group=camel-test", 
"--output=yaml");
+                "--image-registry=quay.io", "--image-group=camel-test", 
"--output=yaml", "--verbose");
         int exit = command.doCall();
 
-        Assertions.assertEquals(0, exit);
-        Assertions.assertEquals(ClusterType.OPENSHIFT.name().toLowerCase(), 
command.clusterType.toLowerCase());
+        Assertions.assertEquals(0, exit, printer.getOutput());
+        Assertions.assertEquals(ClusterType.OPENSHIFT.name().toLowerCase(), 
command.clusterType.toLowerCase(),
+                printer.getOutput());
 
         var manifest = 
KubernetesBaseTest.getKubernetesManifestAsStream(printer.getOutput(), 
command.output);
         List<HasMetadata> resources = client.load(manifest).items();
@@ -210,18 +211,14 @@ class KubernetesRunCustomTest {
     }
 
     private void setupServerExpectsOpenshift() {
-        ClusterVersion versionCR = new ClusterVersionBuilder()
-                .withNewMetadata().withName("version").endMetadata()
-                .withNewStatus()
-                .withNewDesired()
-                .withVersion("4.14.5")
-                .endDesired()
-                .endStatus()
+        APIGroup apiGroup = new APIGroupBuilder()
+                .withApiVersion("v1")
+                .withName("config.openshift.io")
                 .build();
 
-        
server.expect().get().withPath("/apis/config.openshift.io/v1/clusterversions/version")
-                .andReturn(HttpURLConnection.HTTP_OK, versionCR)
-                .once();
+        server.expect().get().withPath("/apis/config.openshift.io")
+                .andReturn(HttpURLConnection.HTTP_OK, apiGroup)
+                .always();
     }
 
     private KubernetesRun createCommand(String[] files, String... args) {
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/test/resources/log4j2.properties
 
b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/test/resources/log4j2.properties
index b7f5b1e0437..020e0296bb5 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/test/resources/log4j2.properties
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/test/resources/log4j2.properties
@@ -25,5 +25,6 @@ appender.stdout.layout.pattern = %style{%d{yyyy-MM-dd 
HH:mm:ss.SSS}} %style{%c}{
 rootLogger = INFO,out
 # rootLogger.level = DEBUG
 
+# enable trace level to log k8s client http requests
 # logger.fabric8.name=io.fabric8
-# logger.fabric8.level=DEBUG
+# logger.fabric8.level=TRACE

Reply via email to