= Jolokia Trait

// Start of autogenerated code - DO NOT EDIT! (description)
The Jolokia trait activates and configures the Jolokia Java agent.

See https://jolokia.org/reference/html/agents.html


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:
```
kamel run --trait jolokia.[key]=[value] --trait jolokia.[key2]=[value2] integration.groovy
```
The following configuration options are available:

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

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

| jolokia.ca-cert
| string
| The PEM encoded CA certification file path, used to verify client certificates,
applicable when `protocol` is `https` and `use-ssl-client-authentication` is `true`
(default `/var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt` for OpenShift).

| jolokia.client-principal
| []string
| The principal(s) which must be given in a client certificate to allow access to the Jolokia endpoint,
applicable when `protocol` is `https` and `use-ssl-client-authentication` is `true`
(default `clientPrincipal=cn=system:master-proxy`, `cn=hawtio-online.hawtio.svc` and `cn=fuse-console.fuse.svc` for OpenShift).

| jolokia.discovery-enabled
| bool
| Listen for multicast requests (default `false`)

| jolokia.extended-client-check
| bool
| Mandate the client certificate contains a client flag in the extended key usage section,
applicable when `protocol` is `https` and `use-ssl-client-authentication` is `true`
(default `true` for OpenShift).

| jolokia.host
| string
| The Host address to which the Jolokia agent should bind to. If `"\*"` or `"0.0.0.0"` is given,
the servers binds to every network interface (default `"*"`).

| jolokia.password
| string
| The password used for authentication, applicable when the `user` option is set.

| jolokia.port
| int
| The Jolokia endpoint port (default `8778`).

| jolokia.protocol
| string
| The protocol to use, either `http` or `https` (default `https` for OpenShift)

| jolokia.user
| string
| The user to be used for authentication

| jolokia.use-ssl-client-authentication
| bool
| Whether client certificates should be used for authentication (default `true` for OpenShift).

| jolokia.options
| []string
| A list of additional Jolokia options as defined
in https://jolokia.org/reference/html/agents.html#agent-jvm-config[JVM agent configuration options]

|===

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