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 1429b990f3a CAMEL-21105 - Camel-Kubernetes: Configmap creation should 
allow to add annotations (#15267)
1429b990f3a is described below

commit 1429b990f3ae95761b26d5342208f04f68f63c54
Author: Andrea Cosentino <anco...@gmail.com>
AuthorDate: Thu Aug 22 09:16:12 2024 +0200

    CAMEL-21105 - Camel-Kubernetes: Configmap creation should allow to add 
annotations (#15267)
    
    * CAMEL-21105 - Camel-Kubernetes: Configmap creation should allow to add 
annotations
    
    Signed-off-by: Andrea Cosentino <anco...@gmail.com>
    
    * CAMEL-21105 - Camel-Kubernetes: Configmap creation should allow to add 
annotations
    
    Signed-off-by: Andrea Cosentino <anco...@gmail.com>
    
    ---------
    
    Signed-off-by: Andrea Cosentino <anco...@gmail.com>
---
 .../catalog/components/kubernetes-config-maps.json |  5 +++--
 .../config_maps/kubernetes-config-maps.json        |  5 +++--
 .../component/kubernetes/KubernetesConstants.java  |  3 +++
 .../config_maps/KubernetesConfigMapsProducer.java  | 14 +++++++++---
 .../producer/KubernetesConfigMapsProducerTest.java | 26 ++++++++++++++++++++++
 ...KubernetesConfigMapsEndpointBuilderFactory.java | 13 +++++++++++
 6 files changed, 59 insertions(+), 7 deletions(-)

diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/kubernetes-config-maps.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/kubernetes-config-maps.json
index 9964bd1522d..b182140317a 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/kubernetes-config-maps.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/kubernetes-config-maps.json
@@ -34,8 +34,9 @@
     "CamelKubernetesConfigMapsLabels": { "index": 2, "kind": "header", 
"displayName": "", "group": "producer", "label": "producer", "required": false, 
"javaType": "Map<String, String>", "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "description": "The ConfigMap labels", 
"constantName": 
"org.apache.camel.component.kubernetes.KubernetesConstants#KUBERNETES_CONFIGMAPS_LABELS"
 },
     "CamelKubernetesConfigMapName": { "index": 3, "kind": "header", 
"displayName": "", "group": "producer", "label": "producer", "required": false, 
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "The ConfigMap name", "constantName": 
"org.apache.camel.component.kubernetes.KubernetesConstants#KUBERNETES_CONFIGMAP_NAME"
 },
     "CamelKubernetesConfigData": { "index": 4, "kind": "header", 
"displayName": "", "group": "producer", "label": "producer", "required": false, 
"javaType": "Map<String, String>", "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "description": "The ConfigMap Data", 
"constantName": 
"org.apache.camel.component.kubernetes.KubernetesConstants#KUBERNETES_CONFIGMAP_DATA"
 },
-    "CamelKubernetesEventAction": { "index": 5, "kind": "header", 
"displayName": "", "group": "consumer", "label": "consumer", "required": false, 
"javaType": "io.fabric8.kubernetes.client.Watcher.Action", "enum": [ "ADDED", 
"MODIFIED", "DELETED", "ERROR", "BOOKMARK" ], "deprecated": false, 
"deprecationNote": "", "autowired": false, "secret": false, "description": 
"Action watched by the consumer", "constantName": 
"org.apache.camel.component.kubernetes.KubernetesConstants#KUBERNETES_EVENT_ 
[...]
-    "CamelKubernetesEventTimestamp": { "index": 6, "kind": "header", 
"displayName": "", "group": "consumer", "label": "consumer", "required": false, 
"javaType": "long", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "Timestamp of the action watched by the 
consumer", "constantName": 
"org.apache.camel.component.kubernetes.KubernetesConstants#KUBERNETES_EVENT_TIMESTAMP"
 }
+    "CamelKubernetesConfigMapsAnnotations": { "index": 5, "kind": "header", 
"displayName": "", "group": "producer", "label": "producer", "required": false, 
"javaType": "Map<String, String>", "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "description": "The ConfigMap 
annotations", "constantName": 
"org.apache.camel.component.kubernetes.KubernetesConstants#KUBERNETES_CONFIGMAPS_ANNOTATIONS"
 },
+    "CamelKubernetesEventAction": { "index": 6, "kind": "header", 
"displayName": "", "group": "consumer", "label": "consumer", "required": false, 
"javaType": "io.fabric8.kubernetes.client.Watcher.Action", "enum": [ "ADDED", 
"MODIFIED", "DELETED", "ERROR", "BOOKMARK" ], "deprecated": false, 
"deprecationNote": "", "autowired": false, "secret": false, "description": 
"Action watched by the consumer", "constantName": 
"org.apache.camel.component.kubernetes.KubernetesConstants#KUBERNETES_EVENT_ 
[...]
+    "CamelKubernetesEventTimestamp": { "index": 7, "kind": "header", 
"displayName": "", "group": "consumer", "label": "consumer", "required": false, 
"javaType": "long", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "Timestamp of the action watched by the 
consumer", "constantName": 
"org.apache.camel.component.kubernetes.KubernetesConstants#KUBERNETES_EVENT_TIMESTAMP"
 }
   },
   "properties": {
     "masterUrl": { "index": 0, "kind": "path", "displayName": "Master Url", 
"group": "common", "label": "", "required": true, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.kubernetes.KubernetesConfiguration", 
"configurationField": "configuration", "description": "URL to a remote 
Kubernetes API server. This should only be used when your Camel application i 
[...]
diff --git 
a/components/camel-kubernetes/src/generated/resources/META-INF/org/apache/camel/component/kubernetes/config_maps/kubernetes-config-maps.json
 
b/components/camel-kubernetes/src/generated/resources/META-INF/org/apache/camel/component/kubernetes/config_maps/kubernetes-config-maps.json
index 9964bd1522d..b182140317a 100644
--- 
a/components/camel-kubernetes/src/generated/resources/META-INF/org/apache/camel/component/kubernetes/config_maps/kubernetes-config-maps.json
+++ 
b/components/camel-kubernetes/src/generated/resources/META-INF/org/apache/camel/component/kubernetes/config_maps/kubernetes-config-maps.json
@@ -34,8 +34,9 @@
     "CamelKubernetesConfigMapsLabels": { "index": 2, "kind": "header", 
"displayName": "", "group": "producer", "label": "producer", "required": false, 
"javaType": "Map<String, String>", "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "description": "The ConfigMap labels", 
"constantName": 
"org.apache.camel.component.kubernetes.KubernetesConstants#KUBERNETES_CONFIGMAPS_LABELS"
 },
     "CamelKubernetesConfigMapName": { "index": 3, "kind": "header", 
"displayName": "", "group": "producer", "label": "producer", "required": false, 
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "The ConfigMap name", "constantName": 
"org.apache.camel.component.kubernetes.KubernetesConstants#KUBERNETES_CONFIGMAP_NAME"
 },
     "CamelKubernetesConfigData": { "index": 4, "kind": "header", 
"displayName": "", "group": "producer", "label": "producer", "required": false, 
"javaType": "Map<String, String>", "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "description": "The ConfigMap Data", 
"constantName": 
"org.apache.camel.component.kubernetes.KubernetesConstants#KUBERNETES_CONFIGMAP_DATA"
 },
-    "CamelKubernetesEventAction": { "index": 5, "kind": "header", 
"displayName": "", "group": "consumer", "label": "consumer", "required": false, 
"javaType": "io.fabric8.kubernetes.client.Watcher.Action", "enum": [ "ADDED", 
"MODIFIED", "DELETED", "ERROR", "BOOKMARK" ], "deprecated": false, 
"deprecationNote": "", "autowired": false, "secret": false, "description": 
"Action watched by the consumer", "constantName": 
"org.apache.camel.component.kubernetes.KubernetesConstants#KUBERNETES_EVENT_ 
[...]
-    "CamelKubernetesEventTimestamp": { "index": 6, "kind": "header", 
"displayName": "", "group": "consumer", "label": "consumer", "required": false, 
"javaType": "long", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "Timestamp of the action watched by the 
consumer", "constantName": 
"org.apache.camel.component.kubernetes.KubernetesConstants#KUBERNETES_EVENT_TIMESTAMP"
 }
+    "CamelKubernetesConfigMapsAnnotations": { "index": 5, "kind": "header", 
"displayName": "", "group": "producer", "label": "producer", "required": false, 
"javaType": "Map<String, String>", "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "description": "The ConfigMap 
annotations", "constantName": 
"org.apache.camel.component.kubernetes.KubernetesConstants#KUBERNETES_CONFIGMAPS_ANNOTATIONS"
 },
+    "CamelKubernetesEventAction": { "index": 6, "kind": "header", 
"displayName": "", "group": "consumer", "label": "consumer", "required": false, 
"javaType": "io.fabric8.kubernetes.client.Watcher.Action", "enum": [ "ADDED", 
"MODIFIED", "DELETED", "ERROR", "BOOKMARK" ], "deprecated": false, 
"deprecationNote": "", "autowired": false, "secret": false, "description": 
"Action watched by the consumer", "constantName": 
"org.apache.camel.component.kubernetes.KubernetesConstants#KUBERNETES_EVENT_ 
[...]
+    "CamelKubernetesEventTimestamp": { "index": 7, "kind": "header", 
"displayName": "", "group": "consumer", "label": "consumer", "required": false, 
"javaType": "long", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "Timestamp of the action watched by the 
consumer", "constantName": 
"org.apache.camel.component.kubernetes.KubernetesConstants#KUBERNETES_EVENT_TIMESTAMP"
 }
   },
   "properties": {
     "masterUrl": { "index": 0, "kind": "path", "displayName": "Master Url", 
"group": "common", "label": "", "required": true, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.kubernetes.KubernetesConfiguration", 
"configurationField": "configuration", "description": "URL to a remote 
Kubernetes API server. This should only be used when your Camel application i 
[...]
diff --git 
a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/KubernetesConstants.java
 
b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/KubernetesConstants.java
index c8967e066b1..dad4a517e7b 100644
--- 
a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/KubernetesConstants.java
+++ 
b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/KubernetesConstants.java
@@ -178,6 +178,9 @@ public final class KubernetesConstants {
     @Metadata(label = "producer", description = "The ConfigMap Data", javaType 
= "Map<String, String>",
               applicableFor = SCHEME_CONFIG_MAPS)
     public static final String KUBERNETES_CONFIGMAP_DATA = 
"CamelKubernetesConfigData";
+    @Metadata(label = "producer", description = "The ConfigMap annotations", 
javaType = "Map<String, String>",
+              applicableFor = SCHEME_CONFIG_MAPS)
+    public static final String KUBERNETES_CONFIGMAPS_ANNOTATIONS = 
"CamelKubernetesConfigMapsAnnotations";
     @Metadata(label = "producer", description = "The Openshift build labels", 
javaType = "Map<String, String>",
               applicableFor = SCHEME_BUILDS)
     public static final String KUBERNETES_BUILDS_LABELS = 
"CamelKubernetesBuildsLabels";
diff --git 
a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/config_maps/KubernetesConfigMapsProducer.java
 
b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/config_maps/KubernetesConfigMapsProducer.java
index 267d9c3fe91..1e94bc08546 100644
--- 
a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/config_maps/KubernetesConfigMapsProducer.java
+++ 
b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/config_maps/KubernetesConfigMapsProducer.java
@@ -134,6 +134,8 @@ public class KubernetesConfigMapsProducer extends 
DefaultProducer {
         String namespaceName = 
exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, 
String.class);
         HashMap<String, String> configMapData
                 = 
exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_CONFIGMAP_DATA, 
HashMap.class);
+        HashMap<String, String> configMapAnnotations
+                = 
exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_CONFIGMAPS_ANNOTATIONS,
 HashMap.class);
         if (ObjectHelper.isEmpty(cfMapName)) {
             LOG.error("{} a specific configMap require specify a configMap 
name", operationName);
             throw new IllegalArgumentException(
@@ -150,11 +152,17 @@ public class KubernetesConfigMapsProducer extends 
DefaultProducer {
                     String.format("%s a specific configMap require specify a 
data map", operationName));
         }
         Map<String, String> labels = 
exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_CONFIGMAPS_LABELS, 
Map.class);
-        ConfigMap cfMapCreating = new 
ConfigMapBuilder().withNewMetadata().withName(cfMapName).withLabels(labels).endMetadata()
-                .withData(configMapData).build();
+        ConfigMapBuilder cfMapCreating = new ConfigMapBuilder();
+        if (ObjectHelper.isEmpty(configMapAnnotations)) {
+            
cfMapCreating.withNewMetadata().withName(cfMapName).withLabels(labels).endMetadata().withData(configMapData);
+        } else {
+            
cfMapCreating.withNewMetadata().withName(cfMapName).withLabels(labels).withAnnotations(configMapAnnotations)
+                    .endMetadata().withData(configMapData);
+        }
         ConfigMap configMap
                 = operation.apply(
-                        
getEndpoint().getKubernetesClient().configMaps().inNamespace(namespaceName).resource(cfMapCreating));
+                        
getEndpoint().getKubernetesClient().configMaps().inNamespace(namespaceName)
+                                .resource(cfMapCreating.build()));
 
         prepareOutboundMessage(exchange, configMap);
     }
diff --git 
a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesConfigMapsProducerTest.java
 
b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesConfigMapsProducerTest.java
index fed8b6fab74..a7278043cbc 100644
--- 
a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesConfigMapsProducerTest.java
+++ 
b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesConfigMapsProducerTest.java
@@ -131,6 +131,32 @@ public class KubernetesConfigMapsProducerTest extends 
KubernetesTestSupport {
         assertEquals(labels, result.getMetadata().getLabels());
     }
 
+    @Test
+    void createConfigMapWithAnnotations() {
+        Map<String, String> labels = Map.of("my.label.key", "my.label.value");
+        Map<String, String> annotations = Map.of("my.annotation.key", 
"my.annotation.value");
+        Map<String, String> data = Map.of("my.data.key", "my.data.value");
+        ConfigMap cm1 = new 
ConfigMapBuilder().withNewMetadata().withName("cmAnnotated").withNamespace("test")
+                .withLabels(labels).withAnnotations(annotations).and()
+                .withData(data).build();
+        
server.expect().post().withPath("/api/v1/namespaces/test/configmaps").andReturn(200,
 cm1).once();
+
+        Exchange ex = template.request("direct:createConfigMap", exchange -> {
+            
exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, 
"test");
+            
exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CONFIGMAPS_LABELS, 
labels);
+            
exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CONFIGMAP_NAME, 
"cmAnnotated");
+            
exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CONFIGMAP_DATA, data);
+            
exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CONFIGMAPS_ANNOTATIONS,
 annotations);
+        });
+
+        ConfigMap result = ex.getMessage().getBody(ConfigMap.class);
+
+        assertEquals("test", result.getMetadata().getNamespace());
+        assertEquals("cmAnnotated", result.getMetadata().getName());
+        assertEquals(labels, result.getMetadata().getLabels());
+        assertEquals(annotations, result.getMetadata().getAnnotations());
+    }
+
     @Test
     void updateConfigMap() {
         Map<String, String> labels = Map.of("my.label.key", "my.label.value");
diff --git 
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/KubernetesConfigMapsEndpointBuilderFactory.java
 
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/KubernetesConfigMapsEndpointBuilderFactory.java
index 968b3c5d989..3f664fc184d 100644
--- 
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/KubernetesConfigMapsEndpointBuilderFactory.java
+++ 
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/KubernetesConfigMapsEndpointBuilderFactory.java
@@ -1510,6 +1510,19 @@ public interface 
KubernetesConfigMapsEndpointBuilderFactory {
         public String kubernetesConfigData() {
             return "CamelKubernetesConfigData";
         }
+        /**
+         * The ConfigMap annotations.
+         * 
+         * The option is a: {@code Map<String, String>} type.
+         * 
+         * Group: producer
+         * 
+         * @return the name of the header {@code
+         * KubernetesConfigMapsAnnotations}.
+         */
+        public String kubernetesConfigMapsAnnotations() {
+            return "CamelKubernetesConfigMapsAnnotations";
+        }
         /**
          * Action watched by the consumer.
          * 

Reply via email to