You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2024/12/02 11:35:11 UTC
(camel) branch CAMEL-21497 created (now 3a8674e0a27)
This is an automated email from the ASF dual-hosted git repository.
acosentino pushed a change to branch CAMEL-21497
in repository https://gitbox.apache.org/repos/asf/camel.git
at 3a8674e0a27 CAMEL-21497 - Camel-Kubernetes: Add Configmap Dev Console
This branch includes the following new commits:
new 3a8674e0a27 CAMEL-21497 - Camel-Kubernetes: Add Configmap Dev Console
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
(camel) 01/01: CAMEL-21497 - Camel-Kubernetes: Add Configmap Dev Console
Posted by ac...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
acosentino pushed a commit to branch CAMEL-21497
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 3a8674e0a275a5ce6dd37f184dc50c27d69bce70
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Mon Dec 2 12:34:45 2024 +0100
CAMEL-21497 - Camel-Kubernetes: Add Configmap Dev Console
Signed-off-by: Andrea Cosentino <an...@gmail.com>
---
.../apache/camel/catalog/dev-consoles.properties | 1 +
.../dev-consoles/kubernetes-configmaps.json | 15 +++
.../camel/dev-console/kubernetes-configmaps.json | 15 +++
.../apache/camel/dev-console/kubernetes-configmaps | 2 +
.../org/apache/camel/dev-consoles.properties | 2 +-
.../config_maps/vault/ConfigmapsDevConsole.java | 131 +++++++++++++++++++++
.../camel/cli/connector/LocalCliConnector.java | 10 ++
.../dsl/jbang/core/commands/process/ListVault.java | 18 +++
8 files changed, 193 insertions(+), 1 deletion(-)
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/dev-consoles.properties b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/dev-consoles.properties
index 280b182c430..a586f018ed8 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/dev-consoles.properties
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/dev-consoles.properties
@@ -20,6 +20,7 @@ inflight
java-security
jvm
kafka
+kubernetes-configmaps
kubernetes-secrets
log
main-configuration
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/dev-consoles/kubernetes-configmaps.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/dev-consoles/kubernetes-configmaps.json
new file mode 100644
index 00000000000..d2055d7d2ff
--- /dev/null
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/dev-consoles/kubernetes-configmaps.json
@@ -0,0 +1,15 @@
+{
+ "console": {
+ "kind": "console",
+ "group": "camel",
+ "name": "kubernetes-configmaps",
+ "title": "Kubernetes Config Maps",
+ "description": "Kubernetes Cluster Config Maps",
+ "deprecated": false,
+ "javaType": "org.apache.camel.component.kubernetes.config_maps.vault.ConfigmapsDevConsole",
+ "groupId": "org.apache.camel",
+ "artifactId": "camel-kubernetes",
+ "version": "4.9.0-SNAPSHOT"
+ }
+}
+
diff --git a/components/camel-kubernetes/src/generated/resources/META-INF/org/apache/camel/dev-console/kubernetes-configmaps.json b/components/camel-kubernetes/src/generated/resources/META-INF/org/apache/camel/dev-console/kubernetes-configmaps.json
new file mode 100644
index 00000000000..d2055d7d2ff
--- /dev/null
+++ b/components/camel-kubernetes/src/generated/resources/META-INF/org/apache/camel/dev-console/kubernetes-configmaps.json
@@ -0,0 +1,15 @@
+{
+ "console": {
+ "kind": "console",
+ "group": "camel",
+ "name": "kubernetes-configmaps",
+ "title": "Kubernetes Config Maps",
+ "description": "Kubernetes Cluster Config Maps",
+ "deprecated": false,
+ "javaType": "org.apache.camel.component.kubernetes.config_maps.vault.ConfigmapsDevConsole",
+ "groupId": "org.apache.camel",
+ "artifactId": "camel-kubernetes",
+ "version": "4.9.0-SNAPSHOT"
+ }
+}
+
diff --git a/components/camel-kubernetes/src/generated/resources/META-INF/services/org/apache/camel/dev-console/kubernetes-configmaps b/components/camel-kubernetes/src/generated/resources/META-INF/services/org/apache/camel/dev-console/kubernetes-configmaps
new file mode 100644
index 00000000000..db765140ed3
--- /dev/null
+++ b/components/camel-kubernetes/src/generated/resources/META-INF/services/org/apache/camel/dev-console/kubernetes-configmaps
@@ -0,0 +1,2 @@
+# Generated by camel build tools - do NOT edit this file!
+class=org.apache.camel.component.kubernetes.config_maps.vault.ConfigmapsDevConsole
diff --git a/components/camel-kubernetes/src/generated/resources/META-INF/services/org/apache/camel/dev-consoles.properties b/components/camel-kubernetes/src/generated/resources/META-INF/services/org/apache/camel/dev-consoles.properties
index 781f4c1bca8..18e9d1637f8 100644
--- a/components/camel-kubernetes/src/generated/resources/META-INF/services/org/apache/camel/dev-consoles.properties
+++ b/components/camel-kubernetes/src/generated/resources/META-INF/services/org/apache/camel/dev-consoles.properties
@@ -1,5 +1,5 @@
# Generated by camel build tools - do NOT edit this file!
-dev-consoles=kubernetes-secrets
+dev-consoles=kubernetes-configmaps kubernetes-secrets
groupId=org.apache.camel
artifactId=camel-kubernetes
version=4.9.0-SNAPSHOT
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/config_maps/vault/ConfigmapsDevConsole.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/config_maps/vault/ConfigmapsDevConsole.java
new file mode 100644
index 00000000000..c4a573660d5
--- /dev/null
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/config_maps/vault/ConfigmapsDevConsole.java
@@ -0,0 +1,131 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.kubernetes.config_maps.vault;
+
+import java.time.Instant;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.camel.component.kubernetes.properties.ConfigMapPropertiesFunction;
+import org.apache.camel.spi.PeriodTaskScheduler;
+import org.apache.camel.spi.PropertiesFunction;
+import org.apache.camel.spi.annotations.DevConsole;
+import org.apache.camel.support.PluginHelper;
+import org.apache.camel.support.console.AbstractDevConsole;
+import org.apache.camel.util.TimeUtils;
+import org.apache.camel.util.json.JsonArray;
+import org.apache.camel.util.json.JsonObject;
+import org.apache.camel.vault.KubernetesConfigMapVaultConfiguration;
+import org.apache.camel.vault.KubernetesVaultConfiguration;
+
+@DevConsole(name = "kubernetes-configmaps", displayName = "Kubernetes Config Maps",
+ description = "Kubernetes Cluster Config Maps")
+public class ConfigmapsDevConsole extends AbstractDevConsole {
+
+ private ConfigMapPropertiesFunction propertiesFunction;
+ private ConfigmapsReloadTriggerTask cmRefreshTask;
+
+ public ConfigmapsDevConsole() {
+ super("camel", "kubernetes-configmaps", "Kubernetes Config Maps", "Kubernetes Cluster Config Maps");
+ }
+
+ @Override
+ protected void doStart() throws Exception {
+ super.doStart();
+
+ if (getCamelContext().getPropertiesComponent().hasPropertiesFunction("configmap")) {
+ PropertiesFunction pf = getCamelContext().getPropertiesComponent().getPropertiesFunction("configmap");
+ if (pf instanceof ConfigMapPropertiesFunction) {
+ propertiesFunction = (ConfigMapPropertiesFunction) pf;
+ }
+ }
+ KubernetesConfigMapVaultConfiguration kubernetes
+ = getCamelContext().getVaultConfiguration().getKubernetesConfigMapVaultConfiguration();
+ if (kubernetes != null && kubernetes.isRefreshEnabled()) {
+ PeriodTaskScheduler scheduler = PluginHelper.getPeriodTaskScheduler(getCamelContext());
+ cmRefreshTask = scheduler.getTaskByType(ConfigmapsReloadTriggerTask.class);
+ }
+ }
+
+ @Override
+ protected String doCallText(Map<String, Object> options) {
+ StringBuilder sb = new StringBuilder();
+
+ if (propertiesFunction != null) {
+ sb.append("Kubernetes Config maps Cluster:");
+ sb.append(String.format("\n Master Url: %s", propertiesFunction.getClient().getMasterUrl()));
+ sb.append("\n Login: OAuth Token");
+ KubernetesVaultConfiguration kubernetes
+ = getCamelContext().getVaultConfiguration().getKubernetesVaultConfiguration();
+ if (kubernetes != null) {
+ sb.append(String.format("\n Refresh Enabled: %s", kubernetes.isRefreshEnabled()));
+ }
+ if (cmRefreshTask != null) {
+ Instant start = cmRefreshTask.getStartingTime();
+ String s = start != null ? TimeUtils.printSince(start.toEpochMilli()) : "none";
+ sb.append(String.format("\n Running Since: %s", s));
+ }
+ List<String> sorted = new ArrayList<>();
+ if (kubernetes != null) {
+ sb.append("\n\nSecrets in use:");
+
+ sorted = new ArrayList<>(List.of(kubernetes.getSecrets().split(",")));
+ Collections.sort(sorted);
+ }
+
+ for (String sec : sorted) {
+ sb.append(String.format("\n %s", sec));
+ }
+ }
+
+ return sb.toString();
+ }
+
+ @Override
+ protected JsonObject doCallJson(Map<String, Object> options) {
+ JsonObject root = new JsonObject();
+ if (propertiesFunction != null) {
+ root.put("masterUrl", propertiesFunction.getClient().getMasterUrl().toString());
+ root.put("login", "OAuth Token");
+ }
+ KubernetesVaultConfiguration kubernetes = getCamelContext().getVaultConfiguration().getKubernetesVaultConfiguration();
+ if (kubernetes != null) {
+ root.put("refreshEnabled", kubernetes.isRefreshEnabled());
+ }
+ if (cmRefreshTask != null) {
+ Instant start = cmRefreshTask.getStartingTime();
+ if (start != null) {
+ long timestamp = start.toEpochMilli();
+ root.put("startCheckTimestamp", timestamp);
+ }
+ }
+ JsonArray arr = new JsonArray();
+ root.put("configmaps", arr);
+
+ List<String> sorted = new ArrayList<>(List.of(kubernetes.getSecrets().split(",")));
+ Collections.sort(sorted);
+
+ for (String sec : sorted) {
+ JsonObject jo = new JsonObject();
+ jo.put("name", sec);
+ arr.add(jo);
+ }
+ return root;
+ }
+}
diff --git a/dsl/camel-cli-connector/src/main/java/org/apache/camel/cli/connector/LocalCliConnector.java b/dsl/camel-cli-connector/src/main/java/org/apache/camel/cli/connector/LocalCliConnector.java
index 365996552e9..33271493389 100644
--- a/dsl/camel-cli-connector/src/main/java/org/apache/camel/cli/connector/LocalCliConnector.java
+++ b/dsl/camel-cli-connector/src/main/java/org/apache/camel/cli/connector/LocalCliConnector.java
@@ -1370,6 +1370,16 @@ public class LocalCliConnector extends ServiceSupport implements CliConnector, C
root.put("hashicorp-secrets", json);
}
}
+
+ // kubernetes-configmaps is optional
+ Optional<DevConsole> cmcKubernetes
+ = PluginHelper.getDevConsoleResolver(camelContext).lookupDevConsole("kubernetes-configmaps");
+ if (cmcKubernetes.isPresent()) {
+ JsonObject json = (JsonObject) cmcKubernetes.get().call(DevConsole.MediaType.JSON);
+ if (json != null) {
+ root.put("kubernetes-configmaps", json);
+ }
+ }
return root;
}
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListVault.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListVault.java
index 0b7bcceb3f6..9ebb40d83dc 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListVault.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListVault.java
@@ -161,6 +161,24 @@ public class ListVault extends ProcessWatchCommand {
row.lastReload = hashicorp.getLongOrDefault("lastReloadTimestamp", 0);
rows.add(row);
}
+
+ JsonObject cmKubernetes = (JsonObject) vaults.get("kubernetes-configmaps");
+ if (cmKubernetes != null) {
+ row.vault = "Kubernetes-cm";
+ row.lastCheck = cmKubernetes.getLongOrDefault("startCheckTimestamp", 0);
+ row.lastReload = cmKubernetes.getLongOrDefault("lastReloadTimestamp", 0);
+ JsonArray arr = (JsonArray) cmKubernetes.get("configmap");
+ for (int i = 0; i < arr.size(); i++) {
+ if (i > 0) {
+ // create a copy for 2+ configmap
+ row = row.copy();
+ }
+ JsonObject jo = (JsonObject) arr.get(i);
+ row.secret = jo.getString("name");
+ row.timestamp = jo.getLongOrDefault("timestamp", 0);
+ rows.add(row);
+ }
+ }
}
}
});