You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2022/04/14 09:28:27 UTC
[camel] 01/02: CAMEL-17967: camel-jbang - Init command like camel-k
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 4dba2a17bf53b1a0c0a09bf142451105fcb11477
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Apr 14 10:45:02 2022 +0200
CAMEL-17967: camel-jbang - Init command like camel-k
---
.../jbang/core/commands/AbstractInitKamelet.java | 1 +
.../dsl/jbang/core/commands/AbstractSearch.java | 1 +
.../dsl/jbang/core/commands/CamelJBangMain.java | 4 +-
.../apache/camel/dsl/jbang/core/commands/Init.java | 22 +++-
.../camel/dsl/jbang/core/commands/InitBinding.java | 76 -------------
.../camel/dsl/jbang/core/commands/InitKamelet.java | 120 ---------------------
.../camel/dsl/jbang/core/commands/Search.java | 1 +
.../dsl/jbang/core/commands/SearchComponents.java | 1 +
.../dsl/jbang/core/commands/SearchKamelets.java | 1 +
.../dsl/jbang/core/commands/SearchLanguages.java | 1 +
.../dsl/jbang/core/commands/SearchOthers.java | 1 +
.../src/main/resources/templates/groovy.tmpl | 8 ++
.../src/main/resources/templates/java.tmpl | 16 +++
.../src/main/resources/templates/js.tmpl | 8 ++
.../src/main/resources/templates/kamelet.yaml.tmpl | 37 +++++++
.../src/main/resources/templates/kts.tmpl | 8 ++
.../src/main/resources/templates/xml.tmpl | 19 ++++
.../src/main/resources/templates/yaml.tmpl | 11 ++
18 files changed, 135 insertions(+), 201 deletions(-)
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/AbstractInitKamelet.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/AbstractInitKamelet.java
index 2502c141f4d..23daa6c64a0 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/AbstractInitKamelet.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/AbstractInitKamelet.java
@@ -31,6 +31,7 @@ import org.apache.commons.io.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+@Deprecated
public abstract class AbstractInitKamelet {
private static final Logger LOG = LoggerFactory.getLogger(AbstractInitKamelet.class);
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/AbstractSearch.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/AbstractSearch.java
index 2d9a2bc12b2..43f4f903bb2 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/AbstractSearch.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/AbstractSearch.java
@@ -31,6 +31,7 @@ import org.apache.camel.main.KameletMain;
import org.apache.camel.spi.Resource;
import org.apache.commons.io.IOUtils;
+@Deprecated
public abstract class AbstractSearch {
private String resourceLocation;
private String branch;
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelJBangMain.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelJBangMain.java
index 760eb60fb57..d38e39889c4 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelJBangMain.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelJBangMain.java
@@ -29,14 +29,12 @@ public class CamelJBangMain implements Callable<Integer> {
public static void run(String... args) {
commandLine = new CommandLine(new CamelJBangMain())
.addSubcommand("run", new Run())
+ .addSubcommand("init", new CommandLine(new Init()))
.addSubcommand("search", new CommandLine(new Search())
.addSubcommand("kamelets", new SearchKamelets())
.addSubcommand("components", new SearchComponents())
.addSubcommand("languages", new SearchLanguages())
.addSubcommand("others", new SearchOthers()))
- .addSubcommand("init", new CommandLine(new Init())
- .addSubcommand("kamelet", new InitKamelet())
- .addSubcommand("binding", new InitBinding()))
.addSubcommand("create", new CommandLine(new Create())
.addSubcommand("project", new Project()));
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Init.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Init.java
index dc4ba5d364b..01d1859ec9c 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Init.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Init.java
@@ -16,14 +16,22 @@
*/
package org.apache.camel.dsl.jbang.core.commands;
+import java.io.FileOutputStream;
+import java.io.InputStream;
import java.util.concurrent.Callable;
+import org.apache.camel.util.FileUtil;
+import org.apache.camel.util.IOHelper;
import picocli.CommandLine;
import picocli.CommandLine.Command;
import picocli.CommandLine.Option;
-@Command(name = "init", description = "Creates Kamelets (use --help)")
+@Command(name = "init", description = "Initialize empty Camel integrations")
class Init implements Callable<Integer> {
+
+ @CommandLine.Parameters(description = "Name of integration file", arity = "1")
+ private String file;
+
//CHECKSTYLE:OFF
@Option(names = { "-h", "--help" }, usageHelp = true, description = "Display the help and sub-commands")
private boolean helpRequested = false;
@@ -31,8 +39,18 @@ class Init implements Callable<Integer> {
@Override
public Integer call() throws Exception {
- new CommandLine(this).execute("--help");
+ String ext = FileUtil.onlyExt(file, false);
+ String name = FileUtil.onlyName(file, false);
+ InputStream is = Init.class.getClassLoader().getResourceAsStream("templates/" + ext + ".tmpl");
+ if (is == null) {
+ System.out.println("Error: unsupported file type: " + ext);
+ return 1;
+ }
+ String context = IOHelper.loadText(is);
+ IOHelper.close(is);
+ context = context.replaceFirst("\\{\\{ \\.Name }}", name);
+ IOHelper.writeText(context, new FileOutputStream(file, false));
return 0;
}
}
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/InitBinding.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/InitBinding.java
deleted file mode 100644
index 45651b68dce..00000000000
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/InitBinding.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.dsl.jbang.core.commands;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.concurrent.Callable;
-
-import org.apache.camel.CamelException;
-import org.apache.camel.dsl.jbang.core.common.exceptions.ResourceAlreadyExists;
-import picocli.CommandLine.Command;
-import picocli.CommandLine.Option;
-
-@Command(name = "binding", description = "Create a new Kamelet Binding")
-class InitBinding extends AbstractInitKamelet implements Callable<Integer> {
- //CHECKSTYLE:OFF
- @Option(names = { "-h", "--help" }, usageHelp = true, description = "Display the help and sub-commands")
- private boolean helpRequested = false;
- //CHECKSTYLE:ON
-
- @Option(names = { "--base-resource-location" }, defaultValue = "github:apache", hidden = true,
- description = "Where to download the resources from (used for development/testing)")
- private String baseResourceLocation;
-
- @Option(names = { "--branch" }, defaultValue = "main", hidden = true,
- description = "The branch to use when downloading resources from (used for development/testing)")
- private String branch;
-
- @Option(names = { "--destination" }, defaultValue = "work",
- description = "The destination directory where to download the files")
- private String destination;
-
- @Option(names = { "--kamelet" }, defaultValue = "",
- description = "The kamelet to create a binding for")
- private String kamelet;
-
- @Option(names = { "--project" }, defaultValue = "camel-k",
- description = "The project to create a binding for (either camel-k or core)")
- private String project;
-
- private int downloadSample() throws IOException, CamelException {
- setBranch(branch);
-
- String resourcePath = String.format("camel-kamelets:templates/bindings/%s/%s-binding.yaml", project, kamelet);
-
- setResourceLocation(baseResourceLocation, resourcePath);
-
- try {
- resolveResource(new File(destination));
- } catch (ResourceAlreadyExists e) {
- System.err.println(e.getMessage());
- return 1;
- }
-
- return 0;
- }
-
- @Override
- public Integer call() throws Exception {
- return downloadSample();
- }
-}
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/InitKamelet.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/InitKamelet.java
deleted file mode 100644
index edb61f431ed..00000000000
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/InitKamelet.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.dsl.jbang.core.commands;
-
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.util.concurrent.Callable;
-
-import org.apache.camel.CamelException;
-import org.apache.camel.dsl.jbang.core.common.exceptions.ResourceAlreadyExists;
-import org.apache.camel.dsl.jbang.core.templates.VelocityTemplateParser;
-import picocli.CommandLine;
-import picocli.CommandLine.Command;
-import picocli.CommandLine.Option;
-
-@Command(name = "kamelet", description = "Create a new Kamelet")
-class InitKamelet extends AbstractInitKamelet implements Callable<Integer> {
- //CHECKSTYLE:OFF
- @Option(names = { "-h", "--help" }, usageHelp = true, description = "Display the help and sub-commands")
- private boolean helpRequested = false;
- //CHECKSTYLE:ON
-
- @CommandLine.ArgGroup(exclusive = true, multiplicity = "1")
- private ProcessOptions processOptions;
-
- static class ProcessOptions {
- //CHECKSTYLE:OFF
- @Option(names = { "--bootstrap" },
- description = "Bootstrap the Kamelet template generator - download the properties file for editing")
- private boolean bootstrap = false;
- //CHECKSTYLE:ON
-
- @Option(names = { "--properties-path" }, defaultValue = "", description = "Kamelet name")
- private String propertiesPath;
- }
-
- @Option(names = { "--base-resource-location" }, defaultValue = "github:apache", hidden = true,
- description = "Where to download the resources from (used for development/testing)")
- private String baseResourceLocation;
-
- @Option(names = { "--branch" }, defaultValue = "main", hidden = true,
- description = "The branch to use when downloading resources from (used for development/testing)")
- private String branch;
-
- @Option(names = { "--destination" }, defaultValue = "work",
- description = "The destination directory where to download the files")
- private String destination;
-
- @Override
- public Integer call() throws Exception {
- if (processOptions.bootstrap) {
- bootstrap();
- } else {
- generateTemplate();
- }
-
- return 0;
- }
-
- private int generateTemplate() throws IOException, CamelException {
- setBranch(branch);
- setResourceLocation(baseResourceLocation, "camel-kamelets:templates/init-template.kamelet.yaml.vm");
-
- File workDirectory = new File(destination);
-
- File localTemplateFile;
- try {
- localTemplateFile = resolveResource(workDirectory);
- } catch (ResourceAlreadyExists e) {
- System.err.println(e.getMessage());
- return 1;
- }
- localTemplateFile.deleteOnExit();
-
- VelocityTemplateParser templateParser = new VelocityTemplateParser(
- localTemplateFile.getParentFile(),
- processOptions.propertiesPath);
-
- File outputFile;
- try {
- outputFile = templateParser.getOutputFile(workDirectory);
- } catch (ResourceAlreadyExists e) {
- System.err.println(e.getMessage());
- return 1;
- }
-
- try (FileWriter fw = new FileWriter(outputFile)) {
- templateParser.parse(localTemplateFile.getName(), fw);
- System.out.println("Template file was written to " + outputFile);
- }
-
- return 0;
- }
-
- private int bootstrap() throws IOException, CamelException {
- try {
- super.bootstrap(branch, baseResourceLocation, destination);
- return 0;
- } catch (ResourceAlreadyExists e) {
- System.err.println(e.getMessage());
-
- return 1;
- }
- }
-}
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Search.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Search.java
index 78598d57e1a..3974a5a7912 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Search.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Search.java
@@ -23,6 +23,7 @@ import picocli.CommandLine.Command;
import picocli.CommandLine.Option;
@Command(name = "search", description = "Search for Kamelets, components and patterns (use --help)")
+@Deprecated
class Search extends AbstractSearch implements Callable<Integer> {
//CHECKSTYLE:OFF
@Option(names = { "-h", "--help" }, usageHelp = true, description = "Display the help and sub-commands")
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/SearchComponents.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/SearchComponents.java
index 53d4ccef594..6bcafb7bc71 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/SearchComponents.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/SearchComponents.java
@@ -29,6 +29,7 @@ import picocli.CommandLine.Command;
import picocli.CommandLine.Option;
@Command(name = "components", description = "Search for Camel components")
+@Deprecated
class SearchComponents extends AbstractSearch implements Callable<Integer> {
/*
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/SearchKamelets.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/SearchKamelets.java
index 12d33d116af..11e167ff25b 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/SearchKamelets.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/SearchKamelets.java
@@ -28,6 +28,7 @@ import picocli.CommandLine.Command;
import picocli.CommandLine.Option;
@Command(name = "kamelets", description = "Search for a Kamelet in the Kamelet catalog")
+@Deprecated
class SearchKamelets extends AbstractSearch implements Callable<Integer> {
/*
* Matches the following line. Separate them into groups and pick the last
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/SearchLanguages.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/SearchLanguages.java
index 952f205a07f..007e4e32dae 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/SearchLanguages.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/SearchLanguages.java
@@ -29,6 +29,7 @@ import picocli.CommandLine.Command;
import picocli.CommandLine.Option;
@Command(name = "languages", description = "Search for Camel expression languages")
+@Deprecated
class SearchLanguages extends AbstractSearch implements Callable<Integer> {
/*
* Matches the following line. Separate them into groups and pick the last
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/SearchOthers.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/SearchOthers.java
index 1dd647a2081..47b483bb953 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/SearchOthers.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/SearchOthers.java
@@ -29,6 +29,7 @@ import picocli.CommandLine.Command;
import picocli.CommandLine.Option;
@Command(name = "others", description = "Search for Camel miscellaneous components")
+@Deprecated
class SearchOthers extends AbstractSearch implements Callable<Integer> {
/*
* Matches the following line. Separate them into groups and pick the last
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/groovy.tmpl b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/groovy.tmpl
new file mode 100644
index 00000000000..41985ab27fc
--- /dev/null
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/groovy.tmpl
@@ -0,0 +1,8 @@
+// camel-k: language=groovy
+
+// Write your routes here, for example:
+from('timer:groovy?period=1000')
+ .routeId('groovy')
+ .setBody()
+ .simple('Hello Camel K from ${routeId}')
+ .log('${body}')
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/java.tmpl b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/java.tmpl
new file mode 100644
index 00000000000..1c1d4fd97a8
--- /dev/null
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/java.tmpl
@@ -0,0 +1,16 @@
+// camel-k: language=java
+
+import org.apache.camel.builder.RouteBuilder;
+
+public class {{ .Name }} extends RouteBuilder {
+
+ @Override
+ public void configure() throws Exception {
+
+ // Write your routes here, for example:
+ from("timer:java?period=1000").routeId("java")
+ .setBody()
+ .simple("Hello Camel K from ${routeId}")
+ .log("${body}");
+ }
+}
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/js.tmpl b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/js.tmpl
new file mode 100644
index 00000000000..79ba4ce25da
--- /dev/null
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/js.tmpl
@@ -0,0 +1,8 @@
+// camel-k: language=js
+
+// Write your routes here, for example:
+from('timer:js?period=1000')
+ .routeId('js')
+ .setBody()
+ .simple('Hello Camel K from ${routeId}')
+ .log('${body}')
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/kamelet.yaml.tmpl b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/kamelet.yaml.tmpl
new file mode 100644
index 00000000000..f89270bec31
--- /dev/null
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/kamelet.yaml.tmpl
@@ -0,0 +1,37 @@
+apiVersion: camel.apache.org/v1alpha1
+kind: Kamelet
+metadata:
+ name: {{ .Name }}
+ labels:
+ camel.apache.org/kamelet.type: "source"
+spec:
+ definition:
+ title: "Timer Example"
+ description: "Produces periodic events with a custom payload"
+ required:
+ - message
+ properties:
+ period:
+ title: Period
+ description: The time interval between two events
+ type: integer
+ default: 1000
+ message:
+ title: Message
+ description: The message to generate
+ type: string
+ types:
+ out:
+ mediaType: text/plain
+ template:
+ from:
+ uri: timer:tick
+ parameters:
+ period: "{{period}}"
+ steps:
+ - setBody:
+ constant: "{{message}}"
+ - setHeader:
+ name: "Content-Type"
+ constant: "text/plain"
+ - to: "kamelet:sink"
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/kts.tmpl b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/kts.tmpl
new file mode 100644
index 00000000000..97727259a15
--- /dev/null
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/kts.tmpl
@@ -0,0 +1,8 @@
+// camel-k: language=kotlin
+
+// Write your routes here, for example:
+from("timer:kotlin?period=1000")
+ .routeId("kotlin")
+ .setBody()
+ .simple("Hello Camel K from \${routeId}")
+ .log("\${body}")
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/xml.tmpl b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/xml.tmpl
new file mode 100644
index 00000000000..04f4f069461
--- /dev/null
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/xml.tmpl
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- camel-k: language=xml -->
+
+<routes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns="http://camel.apache.org/schema/spring"
+ xsi:schemaLocation="
+ http://camel.apache.org/schema/spring
+ https://camel.apache.org/schema/spring/camel-spring.xsd">
+
+ <!-- Write your routes here, for example: -->
+ <route id="xml">
+ <from uri="timer:xml?period=1000"/>
+ <setBody>
+ <simple>Hello Camel K from ${routeId}</simple>
+ </setBody>
+ <log message="${body}"/>
+ </route>
+
+</routes>
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/yaml.tmpl b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/yaml.tmpl
new file mode 100644
index 00000000000..2c31e18ccfd
--- /dev/null
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/yaml.tmpl
@@ -0,0 +1,11 @@
+# camel-k: language=yaml
+
+# Write your routes here, for example:
+- from:
+ uri: "timer:yaml"
+ parameters:
+ period: "1000"
+ steps:
+ - setBody:
+ constant: "Hello Camel K from yaml"
+ - log: "${body}"