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 <[email protected]>
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 <[email protected]>
---
.../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 {