= Master Trait

// Start of autogenerated code - DO NOT EDIT! (description)
The Master trait allows to configure the integration to automatically leverage Kubernetes resources for doing
leader election and starting *master* routes only on certain instances.

It's activated automatically when using the master endpoint in a route, e.g. `from("master:lockname:telegram:bots")...`.

NOTE: this trait adds special permissions to the integration service account in order to read/write configmaps and read pods.
It's recommended to use a different service account than "default" when running the integration.


This trait is available in the following profiles: **Kubernetes, Knative, OpenShift**.

// End of autogenerated code - DO NOT EDIT! (description)
// Start of autogenerated code - DO NOT EDIT! (configuration)
== Configuration

Trait properties can be specified when running any integration with the CLI:
[source,console]
----
$ kamel run --trait master.[key]=[value] --trait master.[key2]=[value2] integration.groovy
----
The following configuration options are available:

[cols="2m,1m,5a"]
|===
|Property | Type | Description

| master.enabled
| bool
| Can be used to enable or disable a trait. All traits share this common property.

| master.auto
| bool
| Enables automatic configuration of the trait.

| master.include-delegate-dependencies
| bool
| When this flag is active, the operator analyzes the source code to add dependencies required by delegate endpoints.
E.g. when using `master:lockname:timer`, then `camel:timer` is automatically added to the set of dependencies.
It's enabled by default.

| master.configmap
| string
| Name of the configmap that will be used to store the lock. Defaults to "<integration-name>-lock".
Deprecated: replaced by "resource-name".

| master.resource-name
| string
| Name of the configmap/lease resource that will be used to store the lock. Defaults to "<integration-name>-lock".

| master.resource-type
| string
| Type of Kubernetes resource to use for locking ("ConfigMap" or "Lease"). Defaults to "Lease".

| master.label-key
| string
| Label that will be used to identify all pods contending the lock. Defaults to "camel.apache.org/integration".

| master.label-value
| string
| Label value that will be used to identify all pods contending the lock. Defaults to the integration name.

|===

// End of autogenerated code - DO NOT EDIT! (configuration)
