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