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/08/22 06:47:24 UTC
(camel) 01/02: CAMEL-21105 - Camel-Kubernetes: Configmap creation should allow to add annotations
This is an automated email from the ASF dual-hosted git repository.
acosentino pushed a commit to branch CAMEL-21105
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 291b54430a1a13d95f2c60f53a728e2f77d535f9
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Thu Aug 22 08:25:11 2024 +0200
CAMEL-21105 - Camel-Kubernetes: Configmap creation should allow to add annotations
Signed-off-by: Andrea Cosentino <an...@gmail.com>
---
.../config_maps/kubernetes-config-maps.json | 5 +++--
.../component/kubernetes/KubernetesConstants.java | 3 +++
.../config_maps/KubernetesConfigMapsProducer.java | 14 +++++++++---
.../producer/KubernetesConfigMapsProducerTest.java | 26 ++++++++++++++++++++++
4 files changed, 43 insertions(+), 5 deletions(-)
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");