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 <[email protected]>
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 <[email protected]>
* CAMEL-21105 - Camel-Kubernetes: Configmap creation should allow to add
annotations
Signed-off-by: Andrea Cosentino <[email protected]>
---------
Signed-off-by: Andrea Cosentino <[email protected]>
---
.../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.
*