This is an automated email from the ASF dual-hosted git repository.
acosentino 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 19bcb44fdb7 CAMEL-21497 - Camel-Kubernetes: Add Configmap Dev Console
(#16420)
19bcb44fdb7 is described below
commit 19bcb44fdb7e05e691574ce87a6f632955ae9113
Author: Andrea Cosentino <[email protected]>
AuthorDate: Mon Dec 2 14:06:36 2024 +0100
CAMEL-21497 - Camel-Kubernetes: Add Configmap Dev Console (#16420)
Signed-off-by: Andrea Cosentino <[email protected]>
---
.../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);
+ }
+ }
}
}
});