blob: c0f0ec6a23ba431585793051ba6aadd7893460f3 [file] [log] [blame]
= Camel K Modeline
Integration files can contain modeline hooks that allow to customize the way integrations are executed via command line.
For example:
.Hello.java
[source,java]
----
// camel-k: dependency=mvn:org.my:application:1.0 // <1>
import org.apache.camel.builder.RouteBuilder;
public class Hello extends RouteBuilder {
@Override
public void configure() throws Exception {
from("timer:java?period=1000")
.bean(org.my.BusinessLogic) // <2>
.log("${body}");
}
}
----
<1> Modeline import of Maven library
<2> Usage of a business logic class from the external library
When the integration code above is executed using the `kamel run` CLI command, the modeline options declared in the file are appended to
the list of arguments that are passed to the command.
The `kamel` CLI will alert you, printing the full command in the shell:
[source,console]
----
$ kamel run Hello.java
Modeline options have been loaded from source files
Full command: kamel run Hello.java --dependency mvn:org.my:application:1.0
----
Multiple options can be specified for an integration.
For example, the following modeline options enables 3scale and limits the integration container memory:
.ThreeSscaleRest.java
[source,java]
----
// camel-k: trait=3scale.enabled=true trait=container.limit-memory=256Mi // <1>
import org.apache.camel.builder.RouteBuilder;
public class ThreeScaleRest extends RouteBuilder {
@Override
public void configure() throws Exception {
rest().get("/")
.route()
.setBody().constant("Hello");
}
}
----
<1> Enables both the _container_ and _3scale_ traits, to expose the route via 3scale and limit the container memory.
All options that are available for the `kamel run` command can be specified as modeline options.
The following is a partial list of useful options:
.Useful Modeline Options
[cols="1m,2v"]
|===
|Option | Description
|dependency
|An external library that should be included, e.g. for Maven dependencies `dependency=mvn:org.my:app:1.0`
|env
|Set an environment variable in the integration container, e.g. `env=MY_VAR=my-value`
|label
|Add a label to the integration pod, e.g., `label=my.company=hello`
|name
|The integration name
|open-api
|Add an OpenAPI v2 spec (file path)
|profile
|Trait profile used for deployment
|property
|Add a camel property
|property-file
|Bind a property file to the integration, e.g. `property-file=integration.properties`
|resource
|Add a resource
|trait
|Configure a trait, e.g. `trait=service.enabled=false`
|===