This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git

commit e4e245516451074c0ed405d1c588ab2528ed334d
Author: Andrea Cosentino <anco...@gmail.com>
AuthorDate: Thu Jul 30 15:07:16 2020 +0200

    CAMEL-15340 - create kubernetes job example
---
 .../src/main/docs/kubernetes-job-component.adoc    | 111 +++++++++++++++++++++
 1 file changed, 111 insertions(+)

diff --git 
a/components/camel-kubernetes/src/main/docs/kubernetes-job-component.adoc 
b/components/camel-kubernetes/src/main/docs/kubernetes-job-component.adoc
index b2f6b90..bb3aa85 100644
--- a/components/camel-kubernetes/src/main/docs/kubernetes-job-component.adoc
+++ b/components/camel-kubernetes/src/main/docs/kubernetes-job-component.adoc
@@ -136,5 +136,116 @@ from("direct:listByLabels").process(new Processor() {
 
 This operation return a List of Jobs from your cluster, using a label selector 
(with key1 and key2, with value value1 and value2)
 
+- createJob: This operation create a job on a Kubernetes Cluster
+
+We have a wonderful example of this operation thanks to 
https://github.com/Emmerson-Miranda[Emmerson Miranda] from this 
https://github.com/Emmerson-Miranda/camel/blob/master/camel3-cdi/cdi-k8s-pocs/src/main/java/edu/emmerson/camel/k8s/jobs/camel_k8s_jobs/KubernetesCreateJob.java[Java
 test]
+
+[source,java]
+--------------------------------------------------------------------------------
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.inject.Inject;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.cdi.Uri;
+import org.apache.camel.component.kubernetes.KubernetesConstants;
+import org.apache.camel.component.kubernetes.KubernetesOperations;
+
+import io.fabric8.kubernetes.api.model.Container;
+import io.fabric8.kubernetes.api.model.ObjectMeta;
+import io.fabric8.kubernetes.api.model.PodSpec;
+import io.fabric8.kubernetes.api.model.PodTemplateSpec;
+import io.fabric8.kubernetes.api.model.batch.JobSpec;
+
+/**
+ * 
+ */
+public class KubernetesCreateJob extends RouteBuilder {
+
+    @Inject
+    @Uri("timer:foo?delay=1000&repeatCount=1")
+    private Endpoint inputEndpoint;
+
+    @Inject
+    @Uri("log:output")
+    private Endpoint resultEndpoint;
+
+    @Override
+    public void configure() {
+        // you can configure the route rule with Java DSL here
+
+        from(inputEndpoint)
+               .routeId("kubernetes-jobcreate-client")
+               .process(exchange -> {
+                       
exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_JOB_NAME, 
"camel-job"); //DNS-1123 subdomain must consist of lower case alphanumeric 
characters, '-' or '.', and must start and end with an alphanumeric character 
(e.g. 'example.com', regex used for validation is 
'[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*')
+                
exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, 
"default");
+                
+                Map<String, String> joblabels = new HashMap<String, String>();
+                joblabels.put("jobLabelKey1", "value1");
+                joblabels.put("jobLabelKey2", "value2");
+                joblabels.put("app", "jobFromCamelApp");
+                
exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_JOB_LABELS, 
joblabels);
+
+                
exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_JOB_SPEC, 
generateJobSpec());
+               })
+               
.toF("kubernetes-job:///{{kubernetes-master-url}}?oauthToken={{kubernetes-oauth-token:}}&operation="
 + KubernetesOperations.CREATE_JOB_OPERATION)
+               .log("Job created:")
+               .process(exchange -> {
+                       System.out.println(exchange.getIn().getBody());
+               })
+            .to(resultEndpoint);
+    }
+
+    /**
+     * Create a new JobSpec
+     * @return
+     */
+       private JobSpec generateJobSpec() {
+               JobSpec js = new JobSpec();
+               
+               PodTemplateSpec pts = new PodTemplateSpec();
+               
+               PodSpec ps = new PodSpec();
+               ps.setRestartPolicy("Never");
+               ps.setContainers(generateContainers());
+               pts.setSpec(ps);
+               
+               ObjectMeta metadata = new ObjectMeta();
+               Map<String, String> annotations = new HashMap<String, String>();
+               annotations.put("jobMetadataAnnotation1", "random value");
+               metadata.setAnnotations(annotations);
+               
+               Map<String, String> podlabels = new HashMap<String, String>();
+               podlabels.put("podLabelKey1", "value1");
+               podlabels.put("podLabelKey2", "value2");
+               podlabels.put("app", "podFromCamelApp");
+               metadata.setLabels(podlabels);
+               
+               pts.setMetadata(metadata);
+               js.setTemplate(pts);
+               return js;
+       }
+
+       private List<Container> generateContainers() {
+               Container container = new Container();
+               container.setName("pi");
+               container.setImage("perl");
+               List<String> command = new ArrayList<String>();
+               command.add("echo");
+               command.add("Job created from Apache Camel code at " + (new 
Date()));
+               container.setCommand(command);
+               List<Container> containers = new ArrayList<Container>();
+               containers.add(container);
+               return containers;
+       }
+
+}
+--------------------------------------------------------------------------------
+
 
 include::camel-spring-boot::page$kubernetes-starter.adoc[]

Reply via email to