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/09/16 10:41:04 UTC
(camel) branch main updated: CAMEL-21107 - Camel-Kubernetes: Add ability to add annotation to create resources operation - Cron Job (#15574)
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 cd1f0ffab44 CAMEL-21107 - Camel-Kubernetes: Add ability to add annotation to create resources operation - Cron Job (#15574)
cd1f0ffab44 is described below
commit cd1f0ffab44051d94e38f9df5e5ccf03d50dfb60
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Mon Sep 16 12:40:58 2024 +0200
CAMEL-21107 - Camel-Kubernetes: Add ability to add annotation to create resources operation - Cron Job (#15574)
Signed-off-by: Andrea Cosentino <an...@gmail.com>
---
.../catalog/components/kubernetes-cronjob.json | 3 ++-
.../kubernetes/cronjob/kubernetes-cronjob.json | 3 ++-
.../component/kubernetes/KubernetesConstants.java | 3 +++
.../cronjob/KubernetesCronJobProducer.java | 15 ++++++++++---
.../producer/KubernetesCronJobProducerTest.java | 26 ++++++++++++++++++++++
.../KubernetesCronJobEndpointBuilderFactory.java | 12 ++++++++++
6 files changed, 57 insertions(+), 5 deletions(-)
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/kubernetes-cronjob.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/kubernetes-cronjob.json
index 4b9695842aa..6209834b5ba 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/kubernetes-cronjob.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/kubernetes-cronjob.json
@@ -32,7 +32,8 @@
"CamelKubernetesOperation": { "index": 0, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Producer operation", "constantName": "org.apache.camel.component.kubernetes.KubernetesConstants#KUBERNETES_OPERATION" },
"CamelKubernetesCronJobLabels": { "index": 1, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Map<String, String>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Cronjob labels.", "constantName": "org.apache.camel.component.kubernetes.KubernetesConstants#KUBERNETES_CRON_JOB_LABELS" },
"CamelKubernetesCronJobName": { "index": 2, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Cronjob name.", "constantName": "org.apache.camel.component.kubernetes.KubernetesConstants#KUBERNETES_CRON_JOB_NAME" },
- "CamelKubernetesCronJobSpec": { "index": 3, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "io.fabric8.kubernetes.api.model.batch.v1.CronJobSpec", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The spec for a Job.", "constantName": "org.apache.camel.component.kubernetes.KubernetesConstants#KUBERNETES_CRON_JOB_SPEC" }
+ "CamelKubernetesCronJobSpec": { "index": 3, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "io.fabric8.kubernetes.api.model.batch.v1.CronJobSpec", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The spec for a Job.", "constantName": "org.apache.camel.component.kubernetes.KubernetesConstants#KUBERNETES_CRON_JOB_SPEC" },
+ "CamelKubernetesCronJobAnnotations": { "index": 4, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Map<String, String>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Cron Job annotations.", "constantName": "org.apache.camel.component.kubernetes.KubernetesConstants#KUBERNETES_CRON_JOB_ANNOTATIONS" }
},
"properties": {
"masterUrl": { "index": 0, "kind": "path", "displayName": "Master Url", "group": "producer", "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 [...]
diff --git a/components/camel-kubernetes/src/generated/resources/META-INF/org/apache/camel/component/kubernetes/cronjob/kubernetes-cronjob.json b/components/camel-kubernetes/src/generated/resources/META-INF/org/apache/camel/component/kubernetes/cronjob/kubernetes-cronjob.json
index 4b9695842aa..6209834b5ba 100644
--- a/components/camel-kubernetes/src/generated/resources/META-INF/org/apache/camel/component/kubernetes/cronjob/kubernetes-cronjob.json
+++ b/components/camel-kubernetes/src/generated/resources/META-INF/org/apache/camel/component/kubernetes/cronjob/kubernetes-cronjob.json
@@ -32,7 +32,8 @@
"CamelKubernetesOperation": { "index": 0, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Producer operation", "constantName": "org.apache.camel.component.kubernetes.KubernetesConstants#KUBERNETES_OPERATION" },
"CamelKubernetesCronJobLabels": { "index": 1, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Map<String, String>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Cronjob labels.", "constantName": "org.apache.camel.component.kubernetes.KubernetesConstants#KUBERNETES_CRON_JOB_LABELS" },
"CamelKubernetesCronJobName": { "index": 2, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Cronjob name.", "constantName": "org.apache.camel.component.kubernetes.KubernetesConstants#KUBERNETES_CRON_JOB_NAME" },
- "CamelKubernetesCronJobSpec": { "index": 3, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "io.fabric8.kubernetes.api.model.batch.v1.CronJobSpec", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The spec for a Job.", "constantName": "org.apache.camel.component.kubernetes.KubernetesConstants#KUBERNETES_CRON_JOB_SPEC" }
+ "CamelKubernetesCronJobSpec": { "index": 3, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "io.fabric8.kubernetes.api.model.batch.v1.CronJobSpec", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The spec for a Job.", "constantName": "org.apache.camel.component.kubernetes.KubernetesConstants#KUBERNETES_CRON_JOB_SPEC" },
+ "CamelKubernetesCronJobAnnotations": { "index": 4, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Map<String, String>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Cron Job annotations.", "constantName": "org.apache.camel.component.kubernetes.KubernetesConstants#KUBERNETES_CRON_JOB_ANNOTATIONS" }
},
"properties": {
"masterUrl": { "index": 0, "kind": "path", "displayName": "Master Url", "group": "producer", "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 [...]
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 6822a3f9dc0..aa8fe4561af 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
@@ -278,6 +278,9 @@ public final class KubernetesConstants {
@Metadata(label = "producer", description = "The spec for a Job.",
javaType = "io.fabric8.kubernetes.api.model.batch.v1.CronJobSpec", applicableFor = SCHEME_CRON_JOB)
public static final String KUBERNETES_CRON_JOB_SPEC = "CamelKubernetesCronJobSpec";
+ @Metadata(label = "producer", description = "The Cron Job annotations.", javaType = "Map<String, String>",
+ applicableFor = SCHEME_CRON_JOB)
+ public static final String KUBERNETES_CRON_JOB_ANNOTATIONS = "CamelKubernetesCronJobAnnotations";
private KubernetesConstants() {
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/cronjob/KubernetesCronJobProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/cronjob/KubernetesCronJobProducer.java
index 025c452ba8c..87d62de04c0 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/cronjob/KubernetesCronJobProducer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/cronjob/KubernetesCronJobProducer.java
@@ -16,6 +16,7 @@
*/
package org.apache.camel.component.kubernetes.cronjob;
+import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;
@@ -136,6 +137,8 @@ public class KubernetesCronJobProducer extends DefaultProducer {
String cronjobName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_CRON_JOB_NAME, String.class);
String namespaceName = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, String.class);
CronJobSpec cronjobSpec = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_CRON_JOB_SPEC, CronJobSpec.class);
+ HashMap<String, String> annotations
+ = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_CRON_JOB_ANNOTATIONS, HashMap.class);
if (ObjectHelper.isEmpty(cronjobName)) {
throw new IllegalArgumentException(
String.format("%s a specific cronjob require specify a cronjob name", operationName));
@@ -149,11 +152,17 @@ public class KubernetesCronJobProducer extends DefaultProducer {
String.format("%s a specific cronjob require specify a cronjob spec bean", operationName));
}
Map<String, String> labels = exchange.getIn().getHeader(KubernetesConstants.KUBERNETES_CRON_JOB_LABELS, Map.class);
- CronJob cronjobCreating = new CronJobBuilder().withNewMetadata().withName(cronjobName).withLabels(labels).endMetadata()
- .withSpec(cronjobSpec).build();
+ CronJobBuilder cronJobBuilder = new CronJobBuilder();
+ if (ObjectHelper.isEmpty(annotations)) {
+ cronJobBuilder.withNewMetadata().withName(cronjobName).withLabels(labels).endMetadata()
+ .withSpec(cronjobSpec);
+ } else {
+ cronJobBuilder.withNewMetadata().withName(cronjobName).withLabels(labels).withAnnotations(annotations).endMetadata()
+ .withSpec(cronjobSpec);
+ }
Object cronJob = operation.apply(
getEndpoint().getKubernetesClient().batch().v1().cronjobs().inNamespace(namespaceName)
- .resource(cronjobCreating));
+ .resource(cronJobBuilder.build()));
prepareOutboundMessage(exchange, cronJob);
}
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesCronJobProducerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesCronJobProducerTest.java
index ea86704e6cf..8a6266c3e1f 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesCronJobProducerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesCronJobProducerTest.java
@@ -113,6 +113,32 @@ public class KubernetesCronJobProducerTest extends KubernetesTestSupport {
assertEquals(labels, result.getMetadata().getLabels());
}
+ @Test
+ void createJobWithAnnotationsTest() {
+ Map<String, String> labels = Map.of("my.label.key", "my.label.value");
+ Map<String, String> annotations = Map.of("my.annotation.key", "my.annotation.value");
+ CronJobSpec spec = new CronJobSpecBuilder().build();
+ CronJob j1 = new CronJobBuilder().withNewMetadata().withName("j1").withNamespace("test").withLabels(labels)
+ .withAnnotations(annotations).and()
+ .withSpec(spec).build();
+ server.expect().post().withPath("/apis/batch/v1/namespaces/test/cronjobs").andReturn(200, j1).once();
+
+ Exchange ex = template.request("direct:create", exchange -> {
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "test");
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CRON_JOB_LABELS, labels);
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CRON_JOB_ANNOTATIONS, annotations);
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CRON_JOB_NAME, "j1");
+ exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CRON_JOB_SPEC, spec);
+ });
+
+ CronJob result = ex.getMessage().getBody(CronJob.class);
+
+ assertEquals("test", result.getMetadata().getNamespace());
+ assertEquals("j1", result.getMetadata().getName());
+ assertEquals(labels, result.getMetadata().getLabels());
+ assertEquals(annotations, result.getMetadata().getAnnotations());
+ }
+
@Test
void updateJobTest() {
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/KubernetesCronJobEndpointBuilderFactory.java b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/KubernetesCronJobEndpointBuilderFactory.java
index 2a77bd9cd3c..29b8c42bbaa 100644
--- a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/KubernetesCronJobEndpointBuilderFactory.java
+++ b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/KubernetesCronJobEndpointBuilderFactory.java
@@ -560,6 +560,18 @@ public interface KubernetesCronJobEndpointBuilderFactory {
public String kubernetesCronJobSpec() {
return "CamelKubernetesCronJobSpec";
}
+ /**
+ * The Cron Job annotations.
+ *
+ * The option is a: {@code Map<String, String>} type.
+ *
+ * Group: producer
+ *
+ * @return the name of the header {@code KubernetesCronJobAnnotations}.
+ */
+ public String kubernetesCronJobAnnotations() {
+ return "CamelKubernetesCronJobAnnotations";
+ }
}
static KubernetesCronJobEndpointBuilder endpointBuilder(String componentName, String path) {
class KubernetesCronJobEndpointBuilderImpl extends AbstractEndpointBuilder implements KubernetesCronJobEndpointBuilder, AdvancedKubernetesCronJobEndpointBuilder {