Traits

Traits are high level named features of Camel K that can be enabled/disabled or configured to customize the behavior of the final integration.

Camel K provide sensible defaults for all such traits, taking into account the details of the target platform where the integration is going to run into. However, it’s possible for a expert user to configure them in order to obtain a different behavior.

Configuration

Each trait has a unique ID that can be used to configure it using the command line tool.

E.g. in order to disable the creation of a Service for a integration, a user can execute:

kamel run --trait service.enabled=false file.yaml

The flag --trait can be also abbreviated with -t.

The enabled property is available on all traits and can be used to enable/disable them. All traits have their own internal logic to determine if they need to be enabled when the user does not activate them explicitly.

Some traits share also a auto property that can be used to enable/disable auto-configuration of the trait based on the environment. The auto-configuration mechanism is able to enable/disable the trait when the enabled property is not explicitly set by the user and also change the trait configuration.

Some traits are applicable only to specific platforms (see the "profiles" in the trait description page).

A trait may have additional properties that can be configured by the end user.

Configure the Integration spec

Let’s use a further example to show how to configure a trait in an Integration. If you want to set an additional JVM classpath pointing to a known dependency, we can use the CLI as we’ve seen above:

$ kamel run --trait jvm.classpath=/path/to/my.jar MyIntegration.java

The command is creating an Integration with the configuration below:

apiVersion: camel.apache.org/v1
kind: Integration
metadata:
  name: my-integration
spec:
  traits:
    jvm:
      configuration:
        classpath: /path/to/my.jar
...

The .spec.traits holds an array of traits, identified by their id (jvm, in this case). Then, the .jvm.configuration.classpath is the property we want to set. If you need to set a trait directly in the Integration spec, then, you should proceed in the way illustrated above.