| [[traits]] |
| = 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.groovy |
| ``` |
| |
| 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. |
| |
| All 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. The `auto` property is enabled by default. |
| |
| NOTE: Some traits are applicable only to specific platforms (see "profiles" in the table). |
| |
| A trait may have additional properties that can be configured by the end user. |
| |
| E.g. the following command configures the container `port` that should be exposed by the service: |
| |
| ``` |
| kamel run --trait service.enabled=true --trait service.port=8081 file.groovy |
| ``` |
| |
| Or the equivalent command (assuming that the service trait is enabled by auto-detection): |
| |
| ``` |
| kamel run -t service.port=8081 file.groovy |
| ``` |
| |
| NOTE: Enabling a trait does not force the trait to be activated, especially if the trait specific preconditions do not hold. |
| E.g. enabling the `route` trait while the `service` trait is disabled does not produce automatically a route, since a service is needed |
| for the `route` trait to work. |
| |
| == Common Traits |
| |
| The following is a list of common traits that can be configured by the end users: |
| |
| [options="header",cols="1m,2,3a"] |
| |======================= |
| | Trait | Profiles | Description |
| |
| | dependencies |
| | Kubernetes, OpenShift |
| | Automatically adds dependencies required by the Camel routes by inspecting the user code. |
| + |
| + |
| It's enabled by default. |
| |
| | deployment |
| | Kubernetes, OpenShift |
| | Creates a standard Kubernetes deployment for running the integration. |
| + |
| + |
| It's enabled by default on vanilla Kubernetes/Openshift profiles. |
| |
| | knative |
| | Knative (Kubernetes, Openshift) |
| | Creates Knative resources to run the integration instead of the standard Kubernetes resources. |
| + |
| + |
| It's enabled by default when the Knative profile is active. |
| |
| [cols="m,"] |
| !=== |
| |
| ! knative.sources |
| ! Configures a (comma-separated) list of channels to which the Knative service must be subscribed (to receive cloudevents from a channel). |
| |
| !=== |
| |
| | istio |
| | Knative (Kubernetes, Openshift) |
| | Allows to configure outbound traffic for Istio. |
| + |
| + |
| It's enabled by default when the Knative profile is active. |
| |
| [cols="m,"] |
| !=== |
| |
| ! istio.allow |
| ! Configures a (comma-separated) list of CIDR subnets that should not be intercepted by the Istio proxy (`10.0.0.0/8,172.16.0.0/12,192.168.0.0/16` by default). |
| |
| !=== |
| |
| | service |
| | All (Knative in deployment mode) |
| | Exposes the integration with a Service resource so that it can be accessed by other applications (or integrations) in the same namespace. |
| + |
| + |
| It's enabled by default if the integration depends on a Camel component that can expose a HTTP endpoint. |
| |
| [cols="m,"] |
| !=== |
| |
| ! service.port |
| ! To configure a different port exposed by the container (default `8080`). |
| |
| !=== |
| |
| | route |
| | OpenShift |
| | Exposes the service associated with the integration to the outside world with a OpenShift Route. |
| + |
| + |
| It's enabled by default whenever a Service is added to the integration (through the `service` trait). |
| |
| [cols="m,"] |
| !=== |
| |
| ! route.host |
| ! To configure the host exposed by the route. |
| |
| !=== |
| |
| | ingress |
| | Kubernetes |
| | Exposes the service associated with the integration to the outside world with a Kubernetes Ingress. |
| + |
| + |
| It's enabled by default whenever a Service is added to the integration (through the `service` trait). |
| |
| [cols="m,"] |
| !=== |
| |
| ! ingress.host |
| ! **Required**. To configure the host exposed by the ingress. |
| |
| !=== |
| |
| | debug |
| | All |
| | Run the integration in debug mode (you can port-forward to port 5005 to connect) |
| + |
| + |
| It's disabled by default. |
| |
| |======================= |
| |
| |
| == Platform Traits (Advanced) |
| |
| There are also platform traits that **normally should not be configured** by the end user. So change them **only if you know what you're doing**. |
| |
| [options="header",cols="m,,"] |
| |======================= |
| | Trait | Profiles | Description |
| | owner | Kubernetes, OpenShift | Makes sure that every resource created by the traits belongs to the integration custom resource (so they are deleted when the integration is deleted). |
| |======================= |