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
// 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:

$ 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:

ThreeScaleRest.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:

Table 1. Useful Modeline Options
Option Description

build-property

Add a build time property or properties file (syntax: [my-key=my-value|file:/path/to/my-conf.properties]

config

Add a runtime configuration from a Configmap, Secret or file (syntax: [configmap|secret|file]:name[/key], where name represents the local file path or the configmap/secret name and key optionally represents the configmap/secret key to be filtered)

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 runtime property or properties file (syntax: [my-key=my-value|file:/path/to/my-conf.properties])

resource

Add a runtime resource from a Configmap, Secret or file (syntax: [configmap|secret|file]:name[/key][@path], where name represents the local file path or the configmap/secret name, key optionally represents the configmap/secret key to be filtered and path represents the destination path)

trait

Configure a trait, e.g. trait=service.enabled=false