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 <anco...@gmail.com>
AuthorDate: Mon Dec 2 14:06:36 2024 +0100

    CAMEL-21497 - Camel-Kubernetes: Add Configmap Dev Console (#16420)
    
    Signed-off-by: Andrea Cosentino <anco...@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);
+                                }
+                            }
                         }
                     }
                 });

Reply via email to