You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by pc...@apache.org on 2025/10/03 10:58:55 UTC
(camel-k) branch main updated: feat(api): Pipe traits configuration
This is an automated email from the ASF dual-hosted git repository.
pcongiusti pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-k.git
The following commit(s) were added to refs/heads/main by this push:
new b4769b1ff feat(api): Pipe traits configuration
b4769b1ff is described below
commit b4769b1fff35288d3f7405b94a9e2c39e3f57e72
Author: Pasquale Congiusti <pa...@gmail.com>
AuthorDate: Fri Oct 3 08:26:04 2025 +0200
feat(api): Pipe traits configuration
Closes #6309
---
docs/modules/ROOT/partials/apis/camel-k-crds.adoc | 8 +
helm/camel-k/crds/camel-k-crds.yaml | 1797 ++++++++++++++++++++
pkg/apis/camel/v1/pipe_types.go | 2 +
pkg/apis/camel/v1/zz_generated.deepcopy.go | 5 +
.../camel/applyconfiguration/camel/v1/pipespec.go | 9 +
pkg/controller/pipe/integration.go | 10 +-
pkg/controller/pipe/integration_test.go | 22 +
pkg/controller/pipe/monitor.go | 24 +
.../config/crd/bases/camel.apache.org_pipes.yaml | 1797 ++++++++++++++++++++
pkg/trait/util.go | 8 +
10 files changed, 3679 insertions(+), 3 deletions(-)
diff --git a/docs/modules/ROOT/partials/apis/camel-k-crds.adoc b/docs/modules/ROOT/partials/apis/camel-k-crds.adoc
index 3930c1ce0..b414cfda6 100644
--- a/docs/modules/ROOT/partials/apis/camel-k-crds.adoc
+++ b/docs/modules/ROOT/partials/apis/camel-k-crds.adoc
@@ -4816,6 +4816,13 @@ Sink is the destination of the integration defined by this Pipe
ErrorHandler is an optional handler called upon an error occurring in the integration
+|`traits` +
+*xref:#_camel_apache_org_v1_Traits[Traits]*
+|
+
+
+the traits needed to customize the depending Integration
+
|`steps` +
*xref:#_camel_apache_org_v1_Endpoint[[\]Endpoint]*
|
@@ -5911,6 +5918,7 @@ TraitConfiguration parameters configuration
* <<#_camel_apache_org_v1_IntegrationProfileSpec, IntegrationProfileSpec>>
* <<#_camel_apache_org_v1_IntegrationSpec, IntegrationSpec>>
* <<#_camel_apache_org_v1_IntegrationStatus, IntegrationStatus>>
+* <<#_camel_apache_org_v1_PipeSpec, PipeSpec>>
Traits represents the collection of trait configurations.
diff --git a/helm/camel-k/crds/camel-k-crds.yaml b/helm/camel-k/crds/camel-k-crds.yaml
index 6242e78e1..c057eddf8 100644
--- a/helm/camel-k/crds/camel-k-crds.yaml
+++ b/helm/camel-k/crds/camel-k-crds.yaml
@@ -33784,6 +33784,1803 @@ spec:
type: string
type: object
type: array
+ traits:
+ description: the traits needed to customize the depending Integration
+ properties:
+ 3scale:
+ description: 'Deprecated: for backward compatibility.'
+ properties:
+ configuration:
+ description: TraitConfiguration parameters configuration
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ required:
+ - configuration
+ type: object
+ addons:
+ additionalProperties:
+ description: AddonTrait represents the configuration of an addon
+ trait.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ description: The extension point with addon traits
+ type: object
+ affinity:
+ description: The configuration of Affinity trait
+ properties:
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: Can be used to enable or disable a trait. All
+ traits share this common property.
+ type: boolean
+ nodeAffinityLabels:
+ description: Defines a set of nodes the integration pod(s)
+ are eligible to be scheduled on, based on labels on the
+ node.
+ items:
+ type: string
+ type: array
+ podAffinity:
+ description: Always co-locates multiple replicas of the integration
+ in the same node (default `false`).
+ type: boolean
+ podAffinityLabels:
+ description: |-
+ Defines a set of pods (namely those matching the label selector, relative to the given namespace) that the
+ integration pod(s) should be co-located with.
+ items:
+ type: string
+ type: array
+ podAntiAffinity:
+ description: Never co-locates multiple replicas of the integration
+ in the same node (default `false`).
+ type: boolean
+ podAntiAffinityLabels:
+ description: |-
+ Defines a set of pods (namely those matching the label selector, relative to the given namespace) that the
+ integration pod(s) should not be co-located with.
+ items:
+ type: string
+ type: array
+ type: object
+ builder:
+ description: The configuration of Builder trait
+ properties:
+ annotations:
+ additionalProperties:
+ type: string
+ description: When using `pod` strategy, annotation to use
+ for the builder pod.
+ type: object
+ baseImage:
+ description: |-
+ Specify a base image. In order to have the application working properly it must be a container image which has a Java JDK
+ installed and ready to use on path (ie `/usr/bin/java`).
+ type: string
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: 'Deprecated: no longer in use.'
+ type: boolean
+ incrementalImageBuild:
+ description: Use the incremental image build option, to reuse
+ existing containers (default `true`)
+ type: boolean
+ limitCPU:
+ description: |-
+ When using `pod` strategy, the maximum amount of CPU required by the pod builder.
+ Deprecated: use TasksRequestCPU instead with task name `builder`.
+ type: string
+ limitMemory:
+ description: |-
+ When using `pod` strategy, the maximum amount of memory required by the pod builder.
+ Deprecated: use TasksRequestCPU instead with task name `builder`.
+ type: string
+ mavenProfiles:
+ description: |-
+ A list of references pointing to configmaps/secrets that contains a maven profile.
+ This configmap/secret is a resource of the IntegrationKit created, therefore it needs to be present in the namespace where the operator is going to create the IntegrationKit.
+ The content of the maven profile is expected to be a text containing a valid maven profile starting with `<profile>` and ending with `</profile>` that will be integrated as an inline profile in the POM.
+ Syntax: [configmap|secret]:name[/key], where name represents the resource name, key optionally represents the resource key to be filtered (default key value = profile.xml).
+ items:
+ type: string
+ type: array
+ nodeSelector:
+ additionalProperties:
+ type: string
+ description: Defines a set of nodes the builder pod is eligible
+ to be scheduled on, based on labels on the node.
+ type: object
+ orderStrategy:
+ description: The build order strategy to use, either `dependencies`,
+ `fifo` or `sequential` (default is the platform default)
+ enum:
+ - dependencies
+ - fifo
+ - sequential
+ type: string
+ platforms:
+ description: The list of manifest platforms to use to build
+ a container image (default `linux/amd64`).
+ items:
+ type: string
+ type: array
+ properties:
+ description: A list of properties to be provided to the build
+ task
+ items:
+ type: string
+ type: array
+ requestCPU:
+ description: |-
+ When using `pod` strategy, the minimum amount of CPU required by the pod builder.
+ Deprecated: use TasksRequestCPU instead with task name `builder`.
+ type: string
+ requestMemory:
+ description: |-
+ When using `pod` strategy, the minimum amount of memory required by the pod builder.
+ Deprecated: use TasksRequestCPU instead with task name `builder`.
+ type: string
+ strategy:
+ description: The strategy to use, either `pod` or `routine`
+ (default `routine`)
+ enum:
+ - pod
+ - routine
+ type: string
+ tasks:
+ description: A list of tasks to be executed (available only
+ when using `pod` strategy) with format `<name>;<container-image>;<container-command>`.
+ items:
+ type: string
+ type: array
+ tasksFilter:
+ description: |-
+ A list of tasks sorted by the order of execution in a csv format, ie, `<taskName1>,<taskName2>,...`.
+ Mind that you must include also the operator tasks (`builder`, `quarkus-native`, `package`, `jib`, `s2i`)
+ if you need to execute them. Useful only with `pod` strategy.
+ type: string
+ tasksLimitCPU:
+ description: A list of limit cpu configuration for the specific
+ task with format `<task-name>:<limit-cpu-conf>`.
+ items:
+ type: string
+ type: array
+ tasksLimitMemory:
+ description: A list of limit memory configuration for the
+ specific task with format `<task-name>:<limit-memory-conf>`.
+ items:
+ type: string
+ type: array
+ tasksRequestCPU:
+ description: A list of request cpu configuration for the specific
+ task with format `<task-name>:<request-cpu-conf>`.
+ items:
+ type: string
+ type: array
+ tasksRequestMemory:
+ description: A list of request memory configuration for the
+ specific task with format `<task-name>:<request-memory-conf>`.
+ items:
+ type: string
+ type: array
+ verbose:
+ description: |-
+ Enable verbose logging on build components that support it (e.g. Kaniko build pod).
+ Deprecated no longer in use
+ type: boolean
+ type: object
+ camel:
+ description: The configuration of Camel trait
+ properties:
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: 'Deprecated: no longer in use.'
+ type: boolean
+ properties:
+ description: A list of properties to be provided to the Integration
+ runtime
+ items:
+ type: string
+ type: array
+ runtimeProvider:
+ description: The runtime provider to use for the integration.
+ (Default, Camel K Runtime).
+ enum:
+ - quarkus
+ - plain-quarkus
+ type: string
+ runtimeVersion:
+ description: |-
+ The runtime version to use for the integration. It overrides the default version set in the Integration Platform.
+ You can use a fixed version (for example "3.2.3") or a semantic version (for example "3.x") which will try to resolve
+ to the best matching Catalog existing on the cluster (Default, the one provided by the operator version).
+ type: string
+ type: object
+ container:
+ description: The configuration of Container trait
+ properties:
+ allowPrivilegeEscalation:
+ description: Security Context AllowPrivilegeEscalation configuration
+ (default false).
+ type: boolean
+ auto:
+ description: To automatically enable the trait
+ type: boolean
+ capabilitiesAdd:
+ description: Security Context Capabilities Add configuration
+ (default none).
+ items:
+ description: Capability represent POSIX capabilities type
+ type: string
+ type: array
+ capabilitiesDrop:
+ description: Security Context Capabilities Drop configuration
+ (default ALL).
+ items:
+ description: Capability represent POSIX capabilities type
+ type: string
+ type: array
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: 'Deprecated: no longer in use.'
+ type: boolean
+ expose:
+ description: Can be used to enable/disable http exposure via
+ kubernetes Service.
+ type: boolean
+ image:
+ description: |-
+ The main container image to use for the Integration. When using this parameter the operator will create a synthetic IntegrationKit which
+ won't be able to execute traits requiring CamelCatalog. If the container image you're using is coming from an IntegrationKit, use instead
+ Integration `.spec.integrationKit` parameter. If you're moving the Integration across environments, you will also need to create an "external" IntegrationKit.
+ type: string
+ imagePullPolicy:
+ description: 'The pull policy: Always|Never|IfNotPresent'
+ enum:
+ - Always
+ - Never
+ - IfNotPresent
+ type: string
+ limitCPU:
+ description: The maximum amount of CPU to be provided (default
+ 500 millicores).
+ type: string
+ limitMemory:
+ description: The maximum amount of memory to be provided (default
+ 512 Mi).
+ type: string
+ name:
+ description: The main container name. It's named `integration`
+ by default.
+ type: string
+ port:
+ description: To configure a different http port exposed by
+ the container (default `8080`).
+ format: int32
+ type: integer
+ portName:
+ description: |-
+ To configure a different http port name for the port exposed by the container.
+ It defaults to `http` only when the `expose` parameter is true.
+ type: string
+ ports:
+ description: |-
+ List of container ports available in the container (syntax: <port-name>;<port-number>[;port-protocol]).
+ When omitted, `port-protocol` (admitted values `TCP`, `UDP` or `SCTP`) is `TCP`.
+ Don't use this for the primary http managed port (for which case you need to use `portName` and `port`).
+ Don't use in Knative based environments.
+ items:
+ type: string
+ type: array
+ requestCPU:
+ description: The minimum amount of CPU required (default 125
+ millicores).
+ type: string
+ requestMemory:
+ description: The minimum amount of memory required (default
+ 128 Mi).
+ type: string
+ runAsNonRoot:
+ description: Security Context RunAsNonRoot configuration (default
+ false).
+ type: boolean
+ runAsUser:
+ description: 'Security Context RunAsUser configuration (default
+ none): this value is automatically retrieved in Openshift
+ clusters when not explicitly set.'
+ format: int64
+ type: integer
+ seccompProfileType:
+ description: Security Context SeccompProfileType configuration
+ (default RuntimeDefault).
+ enum:
+ - Unconfined
+ - RuntimeDefault
+ type: string
+ servicePort:
+ description: To configure under which service port the http
+ container port is to be exposed (default `80`).
+ format: int32
+ type: integer
+ servicePortName:
+ description: To configure under which service port name the
+ http container port is to be exposed (default `http`).
+ type: string
+ type: object
+ cron:
+ description: The configuration of Cron trait
+ properties:
+ activeDeadlineSeconds:
+ description: |-
+ Specifies the duration in seconds, relative to the start time, that the job
+ may be continuously active before it is considered to be failed.
+ It defaults to 60s.
+ format: int64
+ type: integer
+ auto:
+ description: |-
+ Automatically deploy the integration as CronJob when all routes are
+ either starting from a periodic consumer (only `cron`, `timer` and `quartz` are supported) or a passive consumer (e.g. `direct` is a passive consumer).
+
+ It's required that all periodic consumers have the same period, and it can be expressed as cron schedule (e.g. `1m` can be expressed as `0/1 * * * *`,
+ while `35m` or `50s` cannot).
+ type: boolean
+ backoffLimit:
+ description: |-
+ Specifies the number of retries before marking the job failed.
+ It defaults to 2.
+ format: int32
+ type: integer
+ components:
+ description: |-
+ A comma separated list of the Camel components that need to be customized in order for them to work when the schedule is triggered externally by Kubernetes.
+ Supported components are currently: `cron`, `timer` and `quartz`.
+ type: string
+ concurrencyPolicy:
+ description: |-
+ Specifies how to treat concurrent executions of a Job.
+ Valid values are:
+ - "Allow": allows CronJobs to run concurrently;
+ - "Forbid" (default): forbids concurrent runs, skipping next run if previous run hasn't finished yet;
+ - "Replace": cancels currently running job and replaces it with a new one
+ enum:
+ - Allow
+ - Forbid
+ - Replace
+ type: string
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: Can be used to enable or disable a trait. All
+ traits share this common property.
+ type: boolean
+ fallback:
+ description: |-
+ Use the default Camel implementation of the `cron` endpoint (`quartz`) instead of trying to materialize the integration
+ as Kubernetes CronJob.
+ type: boolean
+ schedule:
+ description: |-
+ The CronJob schedule for the whole integration. If multiple routes are declared, they must have the same schedule for this
+ mechanism to work correctly.
+ type: string
+ startingDeadlineSeconds:
+ description: |-
+ Optional deadline in seconds for starting the job if it misses scheduled
+ time for any reason. Missed jobs executions will be counted as failed ones.
+ format: int64
+ type: integer
+ timeZone:
+ description: The timezone that the CronJob will run on
+ type: string
+ type: object
+ dependencies:
+ description: The configuration of Dependencies trait
+ properties:
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: 'Deprecated: no longer in use.'
+ type: boolean
+ type: object
+ deployer:
+ description: The configuration of Deployer trait
+ properties:
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: 'Deprecated: no longer in use.'
+ type: boolean
+ kind:
+ description: Allows to explicitly select the desired deployment
+ kind between `deployment`, `cron-job` or `knative-service`
+ when creating the resources for running the integration.
+ enum:
+ - deployment
+ - cron-job
+ - knative-service
+ type: string
+ useSSA:
+ description: |-
+ Deprecated: won't be able to enforce client side update in the future.
+ Use server-side apply to update the owned resources (default `true`).
+ Note that it automatically falls back to client-side patching, if SSA is not available, e.g., on old Kubernetes clusters.
+ type: boolean
+ type: object
+ deployment:
+ description: The configuration of Deployment trait
+ properties:
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: 'Deprecated: no longer in use.'
+ type: boolean
+ progressDeadlineSeconds:
+ description: |-
+ The maximum time in seconds for the deployment to make progress before it
+ is considered to be failed. It defaults to `60s`.
+ format: int32
+ type: integer
+ rollingUpdateMaxSurge:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ The maximum number of pods that can be scheduled above the desired number of
+ pods.
+ Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%).
+ This can not be 0 if MaxUnavailable is 0.
+ Absolute number is calculated from percentage by rounding up.
+ Defaults to `25%`.
+ x-kubernetes-int-or-string: true
+ rollingUpdateMaxUnavailable:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ The maximum number of pods that can be unavailable during the update.
+ Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%).
+ Absolute number is calculated from percentage by rounding down.
+ This can not be 0 if MaxSurge is 0.
+ Defaults to `25%`.
+ x-kubernetes-int-or-string: true
+ strategy:
+ description: The deployment strategy to use to replace existing
+ pods with new ones.
+ enum:
+ - Recreate
+ - RollingUpdate
+ type: string
+ type: object
+ environment:
+ description: The configuration of Environment trait
+ properties:
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ containerMeta:
+ description: Enables injection of `NAMESPACE` and `POD_NAME`
+ environment variables (default `true`)
+ type: boolean
+ enabled:
+ description: 'Deprecated: no longer in use.'
+ type: boolean
+ httpProxy:
+ description: Propagates the `HTTP_PROXY`, `HTTPS_PROXY` and
+ `NO_PROXY` environment variables (default `true`)
+ type: boolean
+ vars:
+ description: |-
+ A list of environment variables to be added to the integration container.
+ The syntax is either VAR=VALUE or VAR=[configmap|secret]:name/key, where name represents the resource name,
+ and key represents the resource key to be mapped as and environment variable.
+ These take precedence over any previously defined environment variables.
+ items:
+ type: string
+ type: array
+ type: object
+ error-handler:
+ description: |-
+ The configuration of Error Handler trait
+ Deprecated: no longer in use.
+ properties:
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: 'Deprecated: no longer in use.'
+ type: boolean
+ ref:
+ description: The error handler ref name provided or found
+ in application properties
+ type: string
+ type: object
+ gc:
+ description: The configuration of GC trait
+ properties:
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ discoveryCache:
+ description: |-
+ Discovery client cache to be used, either `disabled`, `disk` or `memory` (default `memory`).
+ Deprecated: no longer in use.
+ enum:
+ - disabled
+ - disk
+ - memory
+ type: string
+ enabled:
+ description: Can be used to enable or disable a trait. All
+ traits share this common property.
+ type: boolean
+ type: object
+ health:
+ description: The configuration of Health trait
+ properties:
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: Can be used to enable or disable a trait. All
+ traits share this common property.
+ type: boolean
+ livenessFailureThreshold:
+ description: Minimum consecutive failures for the liveness
+ probe to be considered failed after having succeeded.
+ format: int32
+ type: integer
+ livenessInitialDelay:
+ description: Number of seconds after the container has started
+ before the liveness probe is initiated.
+ format: int32
+ type: integer
+ livenessPeriod:
+ description: How often to perform the liveness probe.
+ format: int32
+ type: integer
+ livenessPort:
+ description: The liveness port to use (default 8080).
+ format: int32
+ type: integer
+ livenessProbe:
+ description: The liveness probe path to use (default provided
+ by the Catalog runtime used).
+ type: string
+ livenessProbeEnabled:
+ description: Configures the liveness probe for the integration
+ container (default `false`).
+ type: boolean
+ livenessScheme:
+ description: Scheme to use when connecting to the liveness
+ probe (default `HTTP`).
+ type: string
+ livenessSuccessThreshold:
+ description: Minimum consecutive successes for the liveness
+ probe to be considered successful after having failed.
+ format: int32
+ type: integer
+ livenessTimeout:
+ description: Number of seconds after which the liveness probe
+ times out.
+ format: int32
+ type: integer
+ readinessFailureThreshold:
+ description: Minimum consecutive failures for the readiness
+ probe to be considered failed after having succeeded.
+ format: int32
+ type: integer
+ readinessInitialDelay:
+ description: Number of seconds after the container has started
+ before the readiness probe is initiated.
+ format: int32
+ type: integer
+ readinessPeriod:
+ description: How often to perform the readiness probe.
+ format: int32
+ type: integer
+ readinessPort:
+ description: The readiness port to use (default 8080).
+ format: int32
+ type: integer
+ readinessProbe:
+ description: The readiness probe path to use (default provided
+ by the Catalog runtime used).
+ type: string
+ readinessProbeEnabled:
+ description: Configures the readiness probe for the integration
+ container (default `true`).
+ type: boolean
+ readinessScheme:
+ description: Scheme to use when connecting to the readiness
+ probe (default `HTTP`).
+ type: string
+ readinessSuccessThreshold:
+ description: Minimum consecutive successes for the readiness
+ probe to be considered successful after having failed.
+ format: int32
+ type: integer
+ readinessTimeout:
+ description: Number of seconds after which the readiness probe
+ times out.
+ format: int32
+ type: integer
+ startupFailureThreshold:
+ description: Minimum consecutive failures for the startup
+ probe to be considered failed after having succeeded.
+ format: int32
+ type: integer
+ startupInitialDelay:
+ description: Number of seconds after the container has started
+ before the startup probe is initiated.
+ format: int32
+ type: integer
+ startupPeriod:
+ description: How often to perform the startup probe.
+ format: int32
+ type: integer
+ startupPort:
+ description: The startup port to use (default 8080).
+ format: int32
+ type: integer
+ startupProbe:
+ description: The startup probe path to use (default provided
+ by the Catalog runtime used).
+ type: string
+ startupProbeEnabled:
+ description: Configures the startup probe for the integration
+ container (default `false`).
+ type: boolean
+ startupScheme:
+ description: Scheme to use when connecting to the startup
+ probe (default `HTTP`).
+ type: string
+ startupSuccessThreshold:
+ description: Minimum consecutive successes for the startup
+ probe to be considered successful after having failed.
+ format: int32
+ type: integer
+ startupTimeout:
+ description: Number of seconds after which the startup probe
+ times out.
+ format: int32
+ type: integer
+ type: object
+ ingress:
+ description: The configuration of Ingress trait
+ properties:
+ annotations:
+ additionalProperties:
+ type: string
+ description: |-
+ The annotations added to the ingress.
+ This can be used to set controller specific annotations, e.g., when using the NGINX Ingress controller:
+ See https://github.com/kubernetes/ingress-nginx/blob/main/docs/user-guide/nginx-configuration/annotations.md
+ type: object
+ auto:
+ description: To automatically add an ingress whenever the
+ integration uses an HTTP endpoint consumer.
+ type: boolean
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: Can be used to enable or disable a trait. All
+ traits share this common property.
+ type: boolean
+ host:
+ description: To configure the host exposed by the ingress.
+ type: string
+ ingressClassName:
+ description: |-
+ The Ingress class name as defined by the Ingress spec
+ See https://kubernetes.io/docs/concepts/services-networking/ingress/
+ type: string
+ path:
+ description: |-
+ To configure the path exposed by the ingress (default `/`).
+ Deprecated: In favor of `paths` - left for backward compatibility.
+ type: string
+ pathType:
+ description: |-
+ To configure the path type exposed by the ingress.
+ One of `Exact`, `Prefix`, `ImplementationSpecific` (default to `Prefix`).
+ enum:
+ - Exact
+ - Prefix
+ - ImplementationSpecific
+ type: string
+ paths:
+ description: To configure the paths exposed by the ingress
+ (default `['/']`).
+ items:
+ type: string
+ type: array
+ tlsHosts:
+ description: To configure tls hosts
+ items:
+ type: string
+ type: array
+ tlsSecretName:
+ description: To configure tls secret name
+ type: string
+ type: object
+ init-containers:
+ description: The configuration of Init Containers trait
+ properties:
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: Can be used to enable or disable a trait. All
+ traits share this common property.
+ type: boolean
+ initTasks:
+ description: A list of init tasks to be executed with format
+ `<name>;<container-image>;<container-command>`.
+ items:
+ type: string
+ type: array
+ sideCarTasks:
+ description: A list of sidecar tasks to be executed with format
+ `<name>;<container-image>;<container-command>`.
+ items:
+ type: string
+ type: array
+ type: object
+ istio:
+ description: The configuration of Istio trait
+ properties:
+ allow:
+ description: 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).
+ type: string
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: Can be used to enable or disable a trait. All
+ traits share this common property.
+ type: boolean
+ inject:
+ description: Forces the value for labels `sidecar.istio.io/inject`.
+ By default the label is set to `true` on deployment and
+ not set on Knative Service.
+ type: boolean
+ type: object
+ jolokia:
+ description: The configuration of Jolokia trait
+ properties:
+ CACert:
+ description: |-
+ 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).
+ type: string
+ clientPrincipal:
+ description: |-
+ 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).
+ items:
+ type: string
+ type: array
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ discoveryEnabled:
+ description: Listen for multicast requests (default `false`)
+ type: boolean
+ enabled:
+ description: Can be used to enable or disable a trait. All
+ traits share this common property.
+ type: boolean
+ extendedClientCheck:
+ description: |-
+ 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).
+ type: boolean
+ host:
+ description: |-
+ 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 `"*"`).
+ type: string
+ options:
+ description: |-
+ A list of additional Jolokia options as defined
+ in https://jolokia.org/reference/html/agents.html#agent-jvm-config[JVM agent configuration options]
+ items:
+ type: string
+ type: array
+ password:
+ description: The password used for authentication, applicable
+ when the `user` option is set.
+ type: string
+ port:
+ description: The Jolokia endpoint port (default `8778`).
+ format: int32
+ type: integer
+ protocol:
+ description: The protocol to use, either `http` or `https`
+ (default `https` for OpenShift)
+ type: string
+ useSSLClientAuthentication:
+ description: Whether client certificates should be used for
+ authentication (default `true` for OpenShift).
+ type: boolean
+ user:
+ description: The user to be used for authentication
+ type: string
+ type: object
+ jvm:
+ description: The configuration of JVM trait
+ properties:
+ agents:
+ description: A list of JVM agents to download and execute
+ with format `<agent-name>;<agent-url>[;<jvm-agent-options>]`.
+ items:
+ type: string
+ type: array
+ classpath:
+ description: Additional JVM classpath (use `Linux` classpath
+ separator)
+ type: string
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ debug:
+ description: Activates remote debugging, so that a debugger
+ can be attached to the JVM, e.g., using port-forwarding
+ type: boolean
+ debugAddress:
+ description: Transport address at which to listen for the
+ newly launched JVM (default `*:5005`)
+ type: string
+ debugSuspend:
+ description: Suspends the target JVM immediately before the
+ main class is loaded
+ type: boolean
+ enabled:
+ description: Can be used to enable or disable a trait. All
+ traits share this common property.
+ type: boolean
+ jar:
+ description: The Jar dependency which will run the application.
+ Leave it empty for managed Integrations.
+ type: string
+ options:
+ description: A list of JVM options
+ items:
+ type: string
+ type: array
+ printCommand:
+ description: |-
+ Prints the command used the start the JVM in the container logs (default `true`)
+ Deprecated: no longer in use.
+ type: boolean
+ type: object
+ kamelets:
+ description: The configuration of Kamelets trait
+ properties:
+ auto:
+ description: Automatically inject all referenced Kamelets
+ and their default configuration (enabled by default)
+ type: boolean
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: Can be used to enable or disable a trait. All
+ traits share this common property.
+ type: boolean
+ list:
+ description: Comma separated list of Kamelet names to load
+ into the current integration
+ type: string
+ mountPoint:
+ description: The directory where the application mounts and
+ reads Kamelet spec (default `/etc/camel/kamelets`)
+ type: string
+ type: object
+ keda:
+ description: 'Deprecated: for backward compatibility.'
+ properties:
+ configuration:
+ description: TraitConfiguration parameters configuration
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ required:
+ - configuration
+ type: object
+ knative:
+ description: The configuration of Knative trait
+ properties:
+ auto:
+ description: Enable automatic discovery of all trait properties.
+ type: boolean
+ channelSinks:
+ description: |-
+ List of channels used as destination of integration routes.
+ Can contain simple channel names or full Camel URIs.
+ items:
+ type: string
+ type: array
+ channelSources:
+ description: |-
+ List of channels used as source of integration routes.
+ Can contain simple channel names or full Camel URIs.
+ items:
+ type: string
+ type: array
+ config:
+ description: Can be used to inject a Knative complete configuration
+ in JSON format.
+ type: string
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: Can be used to enable or disable a trait. All
+ traits share this common property.
+ type: boolean
+ endpointSinks:
+ description: |-
+ List of endpoints used as destination of integration routes.
+ Can contain simple endpoint names or full Camel URIs.
+ items:
+ type: string
+ type: array
+ endpointSources:
+ description: List of channels used as source of integration
+ routes.
+ items:
+ type: string
+ type: array
+ eventSinks:
+ description: |-
+ List of event types that the integration will produce.
+ Can contain simple event types or full Camel URIs (to use a specific broker).
+ items:
+ type: string
+ type: array
+ eventSources:
+ description: |-
+ List of event types that the integration will be subscribed to.
+ Can contain simple event types or full Camel URIs (to use a specific broker different from "default").
+ items:
+ type: string
+ type: array
+ filterEventType:
+ description: |-
+ Enables the default filtering for the Knative trigger using the event type
+ If this is true, the created Knative trigger uses the event type as a filter on the event stream when no other filter criteria is given. (default: true)
+ type: boolean
+ filterSourceChannels:
+ description: |-
+ Enables filtering on events based on the header "ce-knativehistory". Since this header has been removed in newer versions of
+ Knative, filtering is disabled by default.
+ type: boolean
+ filters:
+ description: |-
+ Sets filter attributes on the event stream (such as event type, source, subject and so on).
+ A list of key-value pairs that represent filter attributes and its values.
+ The syntax is KEY=VALUE, e.g., `source="my.source"`.
+ Filter attributes get set on the Knative trigger that is being created as part of this integration.
+ items:
+ type: string
+ type: array
+ namespaceLabel:
+ description: |-
+ Enables the camel-k-operator to set the "bindings.knative.dev/include=true" label to the namespace
+ As Knative requires this label to perform injection of K_SINK URL into the service.
+ If this is false, the integration pod may start and fail, read the SinkBinding Knative documentation. (default: true)
+ type: boolean
+ sinkBinding:
+ description: |-
+ Allows binding the integration to a sink via a Knative SinkBinding resource.
+ This can be used when the integration targets a single sink.
+ It's enabled by default when the integration targets a single sink
+ (except when the integration is owned by a Knative source).
+ type: boolean
+ type: object
+ knative-service:
+ description: The configuration of Knative Service trait
+ properties:
+ annotations:
+ additionalProperties:
+ type: string
+ description: |-
+ The annotations added to route.
+ This can be used to set knative service specific annotations
+ CLI usage example: -t "knative-service.annotations.'haproxy.router.openshift.io/balance'=true"
+ type: object
+ auto:
+ description: |-
+ Automatically deploy the integration as Knative service when all conditions hold:
+
+ * Integration is using the Knative profile
+ * All routes are either starting from an HTTP based consumer or a passive consumer (e.g. `direct` is a passive consumer)
+ type: boolean
+ autoscalingMetric:
+ description: |-
+ Configures the Knative autoscaling metric property (e.g. to set `concurrency` based or `cpu` based autoscaling).
+
+ Refer to the Knative documentation for more information.
+ type: string
+ autoscalingTarget:
+ description: |-
+ Sets the allowed concurrency level or CPU percentage (depending on the autoscaling metric) for each Pod.
+
+ Refer to the Knative documentation for more information.
+ type: integer
+ class:
+ description: |-
+ Configures the Knative autoscaling class property (e.g. to set `hpa.autoscaling.knative.dev` or `kpa.autoscaling.knative.dev` autoscaling).
+
+ Refer to the Knative documentation for more information.
+ enum:
+ - kpa.autoscaling.knative.dev
+ - hpa.autoscaling.knative.dev
+ type: string
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: Can be used to enable or disable a trait. All
+ traits share this common property.
+ type: boolean
+ maxScale:
+ description: |-
+ An upper bound for the number of Pods that can be running in parallel for the integration.
+ Knative has its own cap value that depends on the installation.
+
+ Refer to the Knative documentation for more information.
+ type: integer
+ minScale:
+ description: |-
+ The minimum number of Pods that should be running at any time for the integration. It's **zero** by default, meaning that
+ the integration is scaled down to zero when not used for a configured amount of time.
+
+ Refer to the Knative documentation for more information.
+ type: integer
+ rolloutDuration:
+ description: |-
+ Enables to gradually shift traffic to the latest Revision and sets the rollout duration.
+ It's disabled by default and must be expressed as a Golang `time.Duration` string representation,
+ rounded to a second precision.
+ type: string
+ timeoutSeconds:
+ description: |-
+ The maximum duration in seconds that the request instance is allowed to respond to a request.
+ This field propagates to the integration pod's terminationGracePeriodSeconds
+
+ Refer to the Knative documentation for more information.
+ format: int64
+ type: integer
+ visibility:
+ description: |-
+ Setting `cluster-local`, Knative service becomes a private service.
+ Specifically, this option applies the `networking.knative.dev/visibility` label to Knative service.
+
+ Refer to the Knative documentation for more information.
+ enum:
+ - cluster-local
+ type: string
+ type: object
+ logging:
+ description: The configuration of Logging trait
+ properties:
+ color:
+ description: Colorize the log output
+ type: boolean
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: Can be used to enable or disable a trait. All
+ traits share this common property.
+ type: boolean
+ format:
+ description: Logs message format
+ type: string
+ json:
+ description: Output the logs in JSON
+ type: boolean
+ jsonPrettyPrint:
+ description: Enable "pretty printing" of the JSON logs
+ type: boolean
+ level:
+ description: Adjust the logging level (defaults to `INFO`)
+ enum:
+ - FATAL
+ - WARN
+ - INFO
+ - DEBUG
+ - TRACE
+ type: string
+ type: object
+ master:
+ description: The configuration of Master trait
+ properties:
+ auto:
+ description: Enables automatic configuration of the trait.
+ type: boolean
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: Can be used to enable or disable a trait. All
+ traits share this common property.
+ type: boolean
+ includeDelegateDependencies:
+ description: |-
+ 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.
+ type: boolean
+ labelKey:
+ description: Label that will be used to identify all pods
+ contending the lock. Defaults to "camel.apache.org/integration".
+ type: string
+ labelValue:
+ description: Label value that will be used to identify all
+ pods contending the lock. Defaults to the integration name.
+ type: string
+ resourceName:
+ description: |-
+ Name of the configmap that will be used to store the lock. Defaults to "<integration-name>-lock".
+ Name of the configmap/lease resource that will be used to store the lock. Defaults to "<integration-name>-lock".
+ type: string
+ resourceType:
+ description: Type of Kubernetes resource to use for locking
+ ("ConfigMap" or "Lease"). Defaults to "Lease".
+ type: string
+ type: object
+ mount:
+ description: The configuration of Mount trait
+ properties:
+ configs:
+ description: |-
+ A list of configuration pointing to configmap/secret.
+ The configuration are expected to be UTF-8 resources as they are processed by runtime Camel Context and tried to be parsed as property files.
+ They are also made available on the classpath in order to ease their usage directly from the Route.
+ Syntax: [configmap|secret]:name[/key], where name represents the resource name and key optionally represents the resource key to be filtered
+ items:
+ type: string
+ type: array
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ emptyDirs:
+ description: |-
+ A list of EmptyDir volumes to be mounted. An optional size limit may be configured (default 500Mi).
+ Syntax: name:/container/path[:sizeLimit]
+ items:
+ type: string
+ type: array
+ enabled:
+ description: 'Deprecated: no longer in use.'
+ type: boolean
+ hotReload:
+ description: |-
+ Enable "hot reload" when a secret/configmap mounted is edited (default `false`). The configmap/secret must be
+ marked with `camel.apache.org/integration` label to be taken in account. The resource will be watched for any kind change, also for
+ changes in metadata.
+ type: boolean
+ resources:
+ description: |-
+ A list of resources (text or binary content) pointing to configmap/secret.
+ The resources are expected to be any resource type (text or binary content).
+ The destination path can be either a default location or any path specified by the user.
+ Syntax: [configmap|secret]:name[/key][@path], where name represents the resource name, key optionally represents the resource key to be filtered and path represents the destination path
+ items:
+ type: string
+ type: array
+ scanKameletsImplicitLabelSecrets:
+ description: 'Deprecated: no longer available since version
+ 2.5.'
+ type: boolean
+ volumes:
+ description: |-
+ A list of Persistent Volume Claims to be mounted. Syntax: [pvcname:/container/path]. If the PVC is not found, the Integration fails.
+ You can use the syntax [pvcname:/container/path:size:accessMode<:storageClass>] to create a dynamic PVC based on the Storage Class provided
+ or the default cluster Storage Class. However, if the PVC exists, the operator would mount it.
+ items:
+ type: string
+ type: array
+ type: object
+ openapi:
+ description: The configuration of OpenAPI trait
+ properties:
+ configmaps:
+ description: The configmaps holding the spec of the OpenAPI
+ (compatible with > 3.0 spec only).
+ items:
+ type: string
+ type: array
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: 'Deprecated: no longer in use.'
+ type: boolean
+ type: object
+ owner:
+ description: The configuration of Owner trait
+ properties:
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: Can be used to enable or disable a trait. All
+ traits share this common property.
+ type: boolean
+ targetAnnotations:
+ description: The set of annotations to be transferred
+ items:
+ type: string
+ type: array
+ targetLabels:
+ description: The set of labels to be transferred
+ items:
+ type: string
+ type: array
+ type: object
+ pdb:
+ description: The configuration of PDB trait
+ properties:
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: Can be used to enable or disable a trait. All
+ traits share this common property.
+ type: boolean
+ maxUnavailable:
+ description: |-
+ The number of pods for the Integration that can be unavailable after an eviction.
+ It can be either an absolute number or a percentage (default `1` if `min-available` is also not set).
+ Only one of `max-unavailable` and `min-available` can be specified.
+ type: string
+ minAvailable:
+ description: |-
+ The number of pods for the Integration that must still be available after an eviction.
+ It can be either an absolute number or a percentage.
+ Only one of `min-available` and `max-unavailable` can be specified.
+ type: string
+ type: object
+ platform:
+ description: The configuration of Platform trait
+ properties:
+ auto:
+ description: |-
+ To automatically detect from the environment if a default platform can be created (it will be created on OpenShift or when a registry address is set).
+ Deprecated: Platform is auto generated by the operator install procedure - maintained for backward compatibility
+ type: boolean
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ createDefault:
+ description: |-
+ To create a default (empty) platform when the platform is missing.
+ Deprecated: Platform is auto generated by the operator install procedure - maintained for backward compatibility
+ type: boolean
+ enabled:
+ description: 'Deprecated: no longer in use.'
+ type: boolean
+ global:
+ description: |-
+ Indicates if the platform should be created globally in the case of global operator (default true).
+ Deprecated: Platform is auto generated by the operator install procedure - maintained for backward compatibility
+ type: boolean
+ type: object
+ pod:
+ description: The configuration of Pod trait
+ properties:
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: Can be used to enable or disable a trait. All
+ traits share this common property.
+ type: boolean
+ type: object
+ prometheus:
+ description: The configuration of Prometheus trait
+ properties:
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: Can be used to enable or disable a trait. All
+ traits share this common property.
+ type: boolean
+ podMonitor:
+ description: Whether a `PodMonitor` resource is created (default
+ `true`).
+ type: boolean
+ podMonitorLabels:
+ description: The `PodMonitor` resource labels, applicable
+ when `pod-monitor` is `true`.
+ items:
+ type: string
+ type: array
+ type: object
+ pull-secret:
+ description: The configuration of Pull Secret trait
+ properties:
+ auto:
+ description: Automatically configures the platform registry
+ secret on the pod if it is of type `kubernetes.io/dockerconfigjson`.
+ type: boolean
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: Can be used to enable or disable a trait. All
+ traits share this common property.
+ type: boolean
+ imagePullerDelegation:
+ description: When using a global operator with a shared platform,
+ this enables delegation of the `system:image-puller` cluster
+ role on the operator namespace to the integration service
+ account.
+ type: boolean
+ secretName:
+ description: The pull secret name to set on the Pod. If left
+ empty this is automatically taken from the `IntegrationPlatform`
+ registry configuration.
+ type: string
+ type: object
+ quarkus:
+ description: The configuration of Quarkus trait
+ properties:
+ buildMode:
+ description: |-
+ The Quarkus mode to run: either `jvm` or `native` (default `jvm`).
+ In case both `jvm` and `native` are specified, two `IntegrationKit` resources are created,
+ with the `native` kit having precedence over the `jvm` one once ready.
+ items:
+ description: QuarkusMode is the type of Quarkus build packaging.
+ enum:
+ - jvm
+ - native
+ type: string
+ type: array
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: 'Deprecated: no longer in use.'
+ type: boolean
+ nativeBaseImage:
+ description: The base image to use when running a native build
+ (default `quay.io/quarkus/quarkus-micro-image:2.0`)
+ type: string
+ nativeBuilderImage:
+ description: The image containing the tooling required for
+ a native build (by default it will use the one provided
+ in the runtime catalog)
+ type: string
+ packageTypes:
+ description: |-
+ The Quarkus package types, `fast-jar` or `native` (default `fast-jar`).
+ In case both `fast-jar` and `native` are specified, two `IntegrationKit` resources are created,
+ with the native kit having precedence over the `fast-jar` one once ready.
+ The order influences the resolution of the current kit for the integration.
+ The kit corresponding to the first package type will be assigned to the
+ integration in case no existing kit that matches the integration exists.
+ Deprecated: use `build-mode` instead.
+ items:
+ description: |-
+ QuarkusPackageType is the type of Quarkus build packaging.
+ Deprecated: use `QuarkusMode` instead.
+ enum:
+ - fast-jar
+ - native
+ type: string
+ type: array
+ type: object
+ registry:
+ description: |-
+ The configuration of Registry trait (support removed since version 2.5.0).
+ Deprecated: use jvm trait or read documentation.
+ properties:
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: Can be used to enable or disable a trait. All
+ traits share this common property.
+ type: boolean
+ type: object
+ route:
+ description: The configuration of Route trait
+ properties:
+ annotations:
+ additionalProperties:
+ type: string
+ description: |-
+ The annotations added to route.
+ This can be used to set route specific annotations
+ For annotations options see https://docs.openshift.com/container-platform/3.11/architecture/networking/routes.html#route-specific-annotations
+ CLI usage example: -t "route.annotations.'haproxy.router.openshift.io/balance'=true"
+ type: object
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: Can be used to enable or disable a trait. All
+ traits share this common property.
+ type: boolean
+ host:
+ description: To configure the host exposed by the route.
+ type: string
+ tlsCACertificate:
+ description: |-
+ The TLS CA certificate contents.
+
+ Refer to the OpenShift route documentation for additional information.
+ type: string
+ tlsCACertificateSecret:
+ description: |-
+ The secret name and key reference to the TLS CA certificate. The format is "secret-name[/key-name]", the value represents the secret name, if there is only one key in the secret it will be read, otherwise you can set a key name separated with a "/".
+
+ Refer to the OpenShift route documentation for additional information.
+ type: string
+ tlsCertificate:
+ description: |-
+ The TLS certificate contents.
+
+ Refer to the OpenShift route documentation for additional information.
+ type: string
+ tlsCertificateSecret:
+ description: |-
+ The secret name and key reference to the TLS certificate. The format is "secret-name[/key-name]", the value represents the secret name, if there is only one key in the secret it will be read, otherwise you can set a key name separated with a "/".
+
+ Refer to the OpenShift route documentation for additional information.
+ type: string
+ tlsDestinationCACertificate:
+ description: |-
+ The destination CA certificate provides the contents of the ca certificate of the final destination. When using reencrypt
+ termination this file should be provided in order to have routers use it for health checks on the secure connection.
+ If this field is not specified, the router may provide its own destination CA and perform hostname validation using
+ the short service name (service.namespace.svc), which allows infrastructure generated certificates to automatically
+ verify.
+
+ Refer to the OpenShift route documentation for additional information.
+ type: string
+ tlsDestinationCACertificateSecret:
+ description: |-
+ The secret name and key reference to the destination CA certificate. The format is "secret-name[/key-name]", the value represents the secret name, if there is only one key in the secret it will be read, otherwise you can set a key name separated with a "/".
+
+ Refer to the OpenShift route documentation for additional information.
+ type: string
+ tlsInsecureEdgeTerminationPolicy:
+ description: |-
+ To configure how to deal with insecure traffic, e.g. `Allow`, `Disable` or `Redirect` traffic.
+
+ Refer to the OpenShift route documentation for additional information.
+ enum:
+ - None
+ - Allow
+ - Redirect
+ type: string
+ tlsKey:
+ description: |-
+ The TLS certificate key contents.
+
+ Refer to the OpenShift route documentation for additional information.
+ type: string
+ tlsKeySecret:
+ description: |-
+ The secret name and key reference to the TLS certificate key. The format is "secret-name[/key-name]", the value represents the secret name, if there is only one key in the secret it will be read, otherwise you can set a key name separated with a "/".
+
+ Refer to the OpenShift route documentation for additional information.
+ type: string
+ tlsTermination:
+ description: |-
+ The TLS termination type, like `edge`, `passthrough` or `reencrypt`.
+
+ Refer to the OpenShift route documentation for additional information.
+ enum:
+ - edge
+ - reencrypt
+ - passthrough
+ type: string
+ type: object
+ security-context:
+ description: The configuration of Security Context trait
+ properties:
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: 'Deprecated: no longer in use.'
+ type: boolean
+ runAsNonRoot:
+ description: Security Context RunAsNonRoot configuration (default
+ false).
+ type: boolean
+ runAsUser:
+ description: 'Security Context RunAsUser configuration (default
+ none): this value is automatically retrieved in Openshift
+ clusters when not explicitly set.'
+ format: int64
+ type: integer
+ seccompProfileType:
+ description: Security Context SeccompProfileType configuration
+ (default RuntimeDefault).
+ enum:
+ - Unconfined
+ - RuntimeDefault
+ type: string
+ type: object
+ service:
+ description: The configuration of Service trait
+ properties:
+ annotations:
+ additionalProperties:
+ type: string
+ description: The annotations added to the Service object.
+ type: object
+ auto:
+ description: To automatically detect from the code if a Service
+ needs to be created.
+ type: boolean
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: Can be used to enable or disable a trait. All
+ traits share this common property.
+ type: boolean
+ labels:
+ additionalProperties:
+ type: string
+ description: The labels added to the Service object.
+ type: object
+ nodePort:
+ description: |-
+ Enable Service to be exposed as NodePort (default `false`).
+ Deprecated: Use service type instead.
+ type: boolean
+ ports:
+ description: |-
+ List of container ports available in the container to expose
+ (syntax: <port-name>;<port-number>;<container-port-number>[;<port-protocol]).
+ When omitted, `port-protocol` (admitted values `TCP`, `UDP` or `SCTP`) is `TCP`.
+ Don't use this for the primary http managed port (which is managed by container trait).
+ Don't use in Knative based environments.
+ items:
+ type: string
+ type: array
+ type:
+ description: The type of service to be used, either 'ClusterIP',
+ 'NodePort' or 'LoadBalancer'.
+ enum:
+ - ClusterIP
+ - NodePort
+ - LoadBalancer
+ type: string
+ type: object
+ service-binding:
+ description: |-
+ The configuration of Service Binding trait
+ Deprecated: no longer in use.
+ properties:
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: Can be used to enable or disable a trait. All
+ traits share this common property.
+ type: boolean
+ services:
+ description: List of Services in the form [[apigroup/]version:]kind:[namespace/]name
+ items:
+ type: string
+ type: array
+ type: object
+ strimzi:
+ description: 'Deprecated: for backward compatibility.'
+ properties:
+ configuration:
+ description: TraitConfiguration parameters configuration
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ required:
+ - configuration
+ type: object
+ telemetry:
+ description: The configuration of Telemetry trait
+ properties:
+ auto:
+ description: Enables automatic configuration of the trait,
+ including automatic discovery of the telemetry endpoint.
+ type: boolean
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: Can be used to enable or disable a trait. All
+ traits share this common property.
+ type: boolean
+ endpoint:
+ description: The target endpoint of the Telemetry service
+ (automatically discovered by default)
+ type: string
+ sampler:
+ description: The sampler of the telemetry used for tracing
+ (default "on")
+ type: string
+ sampler-parent-based:
+ description: The sampler of the telemetry used for tracing
+ is parent based (default "true")
+ type: boolean
+ sampler-ratio:
+ description: The sampler ratio of the telemetry used for tracing
+ type: string
+ serviceName:
+ description: The name of the service that publishes telemetry
+ data (defaults to the integration name)
+ type: string
+ type: object
+ toleration:
+ description: The configuration of Toleration trait
+ properties:
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: Can be used to enable or disable a trait. All
+ traits share this common property.
+ type: boolean
+ taints:
+ description: The list of taints to tolerate, in the form `Key[=Value]:Effect[:Seconds]`
+ items:
+ type: string
+ type: array
+ type: object
+ tracing:
+ description: 'Deprecated: for backward compatibility.'
+ properties:
+ configuration:
+ description: TraitConfiguration parameters configuration
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ required:
+ - configuration
+ type: object
+ type: object
type: object
status:
description: the status of a Pipe
diff --git a/pkg/apis/camel/v1/pipe_types.go b/pkg/apis/camel/v1/pipe_types.go
index c50531d47..b658a2988 100644
--- a/pkg/apis/camel/v1/pipe_types.go
+++ b/pkg/apis/camel/v1/pipe_types.go
@@ -54,6 +54,8 @@ type PipeSpec struct {
Sink Endpoint `json:"sink,omitempty"`
// ErrorHandler is an optional handler called upon an error occurring in the integration
ErrorHandler *ErrorHandlerSpec `json:"errorHandler,omitempty"`
+ // the traits needed to customize the depending Integration
+ Traits *Traits `json:"traits,omitempty"`
// Steps contains an optional list of intermediate steps that are executed between the Source and the Sink
Steps []Endpoint `json:"steps,omitempty"`
// Replicas is the number of desired replicas for the Pipe
diff --git a/pkg/apis/camel/v1/zz_generated.deepcopy.go b/pkg/apis/camel/v1/zz_generated.deepcopy.go
index 165c3972f..21769c1c8 100644
--- a/pkg/apis/camel/v1/zz_generated.deepcopy.go
+++ b/pkg/apis/camel/v1/zz_generated.deepcopy.go
@@ -2553,6 +2553,11 @@ func (in *PipeSpec) DeepCopyInto(out *PipeSpec) {
*out = new(ErrorHandlerSpec)
(*in).DeepCopyInto(*out)
}
+ if in.Traits != nil {
+ in, out := &in.Traits, &out.Traits
+ *out = new(Traits)
+ (*in).DeepCopyInto(*out)
+ }
if in.Steps != nil {
in, out := &in.Steps, &out.Steps
*out = make([]Endpoint, len(*in))
diff --git a/pkg/client/camel/applyconfiguration/camel/v1/pipespec.go b/pkg/client/camel/applyconfiguration/camel/v1/pipespec.go
index dc9497977..8b5c220d5 100644
--- a/pkg/client/camel/applyconfiguration/camel/v1/pipespec.go
+++ b/pkg/client/camel/applyconfiguration/camel/v1/pipespec.go
@@ -26,6 +26,7 @@ type PipeSpecApplyConfiguration struct {
Source *EndpointApplyConfiguration `json:"source,omitempty"`
Sink *EndpointApplyConfiguration `json:"sink,omitempty"`
ErrorHandler *ErrorHandlerSpecApplyConfiguration `json:"errorHandler,omitempty"`
+ Traits *TraitsApplyConfiguration `json:"traits,omitempty"`
Steps []EndpointApplyConfiguration `json:"steps,omitempty"`
Replicas *int32 `json:"replicas,omitempty"`
ServiceAccountName *string `json:"serviceAccountName,omitempty"`
@@ -70,6 +71,14 @@ func (b *PipeSpecApplyConfiguration) WithErrorHandler(value *ErrorHandlerSpecApp
return b
}
+// WithTraits sets the Traits field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Traits field is set to the value of the last call.
+func (b *PipeSpecApplyConfiguration) WithTraits(value *TraitsApplyConfiguration) *PipeSpecApplyConfiguration {
+ b.Traits = value
+ return b
+}
+
// WithSteps adds the given value to the Steps field in the declarative configuration
// and returns the receiver, so that objects can be build by chaining "With" function invocations.
// If called multiple times, values provided by each call will be appended to the Steps field.
diff --git a/pkg/controller/pipe/integration.go b/pkg/controller/pipe/integration.go
index e263eca36..e55cd9a1e 100644
--- a/pkg/controller/pipe/integration.go
+++ b/pkg/controller/pipe/integration.go
@@ -50,9 +50,13 @@ func CreateIntegrationFor(ctx context.Context, c client.Client, pipe *v1.Pipe) (
annotations := util.CopyMap(pipe.Annotations)
// avoid propagating the icon to the integration as it's heavyweight and not needed
delete(annotations, v1.AnnotationIcon)
- traits, err := extractAndDeleteTraits(c, annotations)
- if err != nil {
- return nil, fmt.Errorf("could not marshal trait annotations %w", err)
+ traits := pipe.Spec.Traits
+ if traits == nil {
+ var err error
+ traits, err = extractAndDeleteTraits(c, annotations)
+ if err != nil {
+ return nil, fmt.Errorf("could not marshal trait annotations %w", err)
+ }
}
it := v1.Integration{
diff --git a/pkg/controller/pipe/integration_test.go b/pkg/controller/pipe/integration_test.go
index fe7868b22..7dc50710f 100644
--- a/pkg/controller/pipe/integration_test.go
+++ b/pkg/controller/pipe/integration_test.go
@@ -22,6 +22,7 @@ import (
"testing"
v1 "github.com/apache/camel-k/v2/pkg/apis/camel/v1"
+ "github.com/apache/camel-k/v2/pkg/apis/camel/v1/trait"
"github.com/apache/camel-k/v2/pkg/internal"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
@@ -335,3 +336,24 @@ func TestCreateIntegrationTraitsForPipeWithTraitAnnotations(t *testing.T) {
}, it.Annotations)
assert.Equal(t, ptr.To(true), it.Spec.Traits.Service.Enabled)
}
+
+func TestCreateIntegrationTraitsForPipeWithTraitSpec(t *testing.T) {
+ client, err := internal.NewFakeClient()
+ require.NoError(t, err)
+
+ pipe := nominalPipe("my-pipe")
+ pipe.Annotations[v1.TraitAnnotationPrefix+"service.enabled"] = "true"
+ pipe.Spec.Traits = &v1.Traits{
+ Affinity: &trait.AffinityTrait{
+ PodAffinityLabels: []string{"my-test-affinity"},
+ },
+ }
+
+ it, err := CreateIntegrationFor(context.TODO(), client, &pipe)
+ require.NoError(t, err)
+ assert.Equal(t, "my-pipe", it.Name)
+ assert.Equal(t, "default", it.Namespace)
+ // We don't allow both annotations based and spec based traits
+ assert.Nil(t, it.Spec.Traits.Service)
+ assert.Equal(t, []string{"my-test-affinity"}, it.Spec.Traits.Affinity.PodAffinityLabels)
+}
diff --git a/pkg/controller/pipe/monitor.go b/pkg/controller/pipe/monitor.go
index 10f909f48..a4f055916 100644
--- a/pkg/controller/pipe/monitor.go
+++ b/pkg/controller/pipe/monitor.go
@@ -20,6 +20,7 @@ package pipe
import (
"context"
"fmt"
+ "strings"
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/equality"
@@ -149,6 +150,8 @@ func (action *monitorAction) Handle(ctx context.Context, pipe *v1.Pipe) (*v1.Pip
target.Status.Replicas = it.Status.Replicas
target.Status.Selector = it.Status.Selector
+ action.checkTraitAnnotationsDeprecatedNotice(target)
+
return target, nil
}
@@ -182,3 +185,24 @@ func setPipeReadyCondition(kb *v1.Pipe, it *v1.Integration) {
)
}
}
+
+// Deprecated: to be removed in future versions, when we won't support any longer trait annotations into Pipes.
+func (action *monitorAction) checkTraitAnnotationsDeprecatedNotice(pipe *v1.Pipe) {
+ if pipe.Annotations != nil {
+ for k := range pipe.Annotations {
+ if strings.HasPrefix(k, v1.TraitAnnotationPrefix) {
+ pipe.Status.SetCondition(
+ v1.PipeConditionType("AnnotationTraitsDeprecated"),
+ corev1.ConditionTrue,
+ "DeprecationNotice",
+ "Annotation traits configuration is deprecated and will be removed soon. Use .spec.traits configuration instead.",
+ )
+ action.L.Infof(
+ "WARN: annotation traits configuration is deprecated and will be removed soon. Use .spec.traits configuration for %s pipe instead.",
+ pipe.Name,
+ )
+ return
+ }
+ }
+ }
+}
diff --git a/pkg/resources/config/crd/bases/camel.apache.org_pipes.yaml b/pkg/resources/config/crd/bases/camel.apache.org_pipes.yaml
index 250ec57cb..cd3ade270 100644
--- a/pkg/resources/config/crd/bases/camel.apache.org_pipes.yaml
+++ b/pkg/resources/config/crd/bases/camel.apache.org_pipes.yaml
@@ -9275,6 +9275,1803 @@ spec:
type: string
type: object
type: array
+ traits:
+ description: the traits needed to customize the depending Integration
+ properties:
+ 3scale:
+ description: 'Deprecated: for backward compatibility.'
+ properties:
+ configuration:
+ description: TraitConfiguration parameters configuration
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ required:
+ - configuration
+ type: object
+ addons:
+ additionalProperties:
+ description: AddonTrait represents the configuration of an addon
+ trait.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ description: The extension point with addon traits
+ type: object
+ affinity:
+ description: The configuration of Affinity trait
+ properties:
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: Can be used to enable or disable a trait. All
+ traits share this common property.
+ type: boolean
+ nodeAffinityLabels:
+ description: Defines a set of nodes the integration pod(s)
+ are eligible to be scheduled on, based on labels on the
+ node.
+ items:
+ type: string
+ type: array
+ podAffinity:
+ description: Always co-locates multiple replicas of the integration
+ in the same node (default `false`).
+ type: boolean
+ podAffinityLabels:
+ description: |-
+ Defines a set of pods (namely those matching the label selector, relative to the given namespace) that the
+ integration pod(s) should be co-located with.
+ items:
+ type: string
+ type: array
+ podAntiAffinity:
+ description: Never co-locates multiple replicas of the integration
+ in the same node (default `false`).
+ type: boolean
+ podAntiAffinityLabels:
+ description: |-
+ Defines a set of pods (namely those matching the label selector, relative to the given namespace) that the
+ integration pod(s) should not be co-located with.
+ items:
+ type: string
+ type: array
+ type: object
+ builder:
+ description: The configuration of Builder trait
+ properties:
+ annotations:
+ additionalProperties:
+ type: string
+ description: When using `pod` strategy, annotation to use
+ for the builder pod.
+ type: object
+ baseImage:
+ description: |-
+ Specify a base image. In order to have the application working properly it must be a container image which has a Java JDK
+ installed and ready to use on path (ie `/usr/bin/java`).
+ type: string
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: 'Deprecated: no longer in use.'
+ type: boolean
+ incrementalImageBuild:
+ description: Use the incremental image build option, to reuse
+ existing containers (default `true`)
+ type: boolean
+ limitCPU:
+ description: |-
+ When using `pod` strategy, the maximum amount of CPU required by the pod builder.
+ Deprecated: use TasksRequestCPU instead with task name `builder`.
+ type: string
+ limitMemory:
+ description: |-
+ When using `pod` strategy, the maximum amount of memory required by the pod builder.
+ Deprecated: use TasksRequestCPU instead with task name `builder`.
+ type: string
+ mavenProfiles:
+ description: |-
+ A list of references pointing to configmaps/secrets that contains a maven profile.
+ This configmap/secret is a resource of the IntegrationKit created, therefore it needs to be present in the namespace where the operator is going to create the IntegrationKit.
+ The content of the maven profile is expected to be a text containing a valid maven profile starting with `<profile>` and ending with `</profile>` that will be integrated as an inline profile in the POM.
+ Syntax: [configmap|secret]:name[/key], where name represents the resource name, key optionally represents the resource key to be filtered (default key value = profile.xml).
+ items:
+ type: string
+ type: array
+ nodeSelector:
+ additionalProperties:
+ type: string
+ description: Defines a set of nodes the builder pod is eligible
+ to be scheduled on, based on labels on the node.
+ type: object
+ orderStrategy:
+ description: The build order strategy to use, either `dependencies`,
+ `fifo` or `sequential` (default is the platform default)
+ enum:
+ - dependencies
+ - fifo
+ - sequential
+ type: string
+ platforms:
+ description: The list of manifest platforms to use to build
+ a container image (default `linux/amd64`).
+ items:
+ type: string
+ type: array
+ properties:
+ description: A list of properties to be provided to the build
+ task
+ items:
+ type: string
+ type: array
+ requestCPU:
+ description: |-
+ When using `pod` strategy, the minimum amount of CPU required by the pod builder.
+ Deprecated: use TasksRequestCPU instead with task name `builder`.
+ type: string
+ requestMemory:
+ description: |-
+ When using `pod` strategy, the minimum amount of memory required by the pod builder.
+ Deprecated: use TasksRequestCPU instead with task name `builder`.
+ type: string
+ strategy:
+ description: The strategy to use, either `pod` or `routine`
+ (default `routine`)
+ enum:
+ - pod
+ - routine
+ type: string
+ tasks:
+ description: A list of tasks to be executed (available only
+ when using `pod` strategy) with format `<name>;<container-image>;<container-command>`.
+ items:
+ type: string
+ type: array
+ tasksFilter:
+ description: |-
+ A list of tasks sorted by the order of execution in a csv format, ie, `<taskName1>,<taskName2>,...`.
+ Mind that you must include also the operator tasks (`builder`, `quarkus-native`, `package`, `jib`, `s2i`)
+ if you need to execute them. Useful only with `pod` strategy.
+ type: string
+ tasksLimitCPU:
+ description: A list of limit cpu configuration for the specific
+ task with format `<task-name>:<limit-cpu-conf>`.
+ items:
+ type: string
+ type: array
+ tasksLimitMemory:
+ description: A list of limit memory configuration for the
+ specific task with format `<task-name>:<limit-memory-conf>`.
+ items:
+ type: string
+ type: array
+ tasksRequestCPU:
+ description: A list of request cpu configuration for the specific
+ task with format `<task-name>:<request-cpu-conf>`.
+ items:
+ type: string
+ type: array
+ tasksRequestMemory:
+ description: A list of request memory configuration for the
+ specific task with format `<task-name>:<request-memory-conf>`.
+ items:
+ type: string
+ type: array
+ verbose:
+ description: |-
+ Enable verbose logging on build components that support it (e.g. Kaniko build pod).
+ Deprecated no longer in use
+ type: boolean
+ type: object
+ camel:
+ description: The configuration of Camel trait
+ properties:
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: 'Deprecated: no longer in use.'
+ type: boolean
+ properties:
+ description: A list of properties to be provided to the Integration
+ runtime
+ items:
+ type: string
+ type: array
+ runtimeProvider:
+ description: The runtime provider to use for the integration.
+ (Default, Camel K Runtime).
+ enum:
+ - quarkus
+ - plain-quarkus
+ type: string
+ runtimeVersion:
+ description: |-
+ The runtime version to use for the integration. It overrides the default version set in the Integration Platform.
+ You can use a fixed version (for example "3.2.3") or a semantic version (for example "3.x") which will try to resolve
+ to the best matching Catalog existing on the cluster (Default, the one provided by the operator version).
+ type: string
+ type: object
+ container:
+ description: The configuration of Container trait
+ properties:
+ allowPrivilegeEscalation:
+ description: Security Context AllowPrivilegeEscalation configuration
+ (default false).
+ type: boolean
+ auto:
+ description: To automatically enable the trait
+ type: boolean
+ capabilitiesAdd:
+ description: Security Context Capabilities Add configuration
+ (default none).
+ items:
+ description: Capability represent POSIX capabilities type
+ type: string
+ type: array
+ capabilitiesDrop:
+ description: Security Context Capabilities Drop configuration
+ (default ALL).
+ items:
+ description: Capability represent POSIX capabilities type
+ type: string
+ type: array
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: 'Deprecated: no longer in use.'
+ type: boolean
+ expose:
+ description: Can be used to enable/disable http exposure via
+ kubernetes Service.
+ type: boolean
+ image:
+ description: |-
+ The main container image to use for the Integration. When using this parameter the operator will create a synthetic IntegrationKit which
+ won't be able to execute traits requiring CamelCatalog. If the container image you're using is coming from an IntegrationKit, use instead
+ Integration `.spec.integrationKit` parameter. If you're moving the Integration across environments, you will also need to create an "external" IntegrationKit.
+ type: string
+ imagePullPolicy:
+ description: 'The pull policy: Always|Never|IfNotPresent'
+ enum:
+ - Always
+ - Never
+ - IfNotPresent
+ type: string
+ limitCPU:
+ description: The maximum amount of CPU to be provided (default
+ 500 millicores).
+ type: string
+ limitMemory:
+ description: The maximum amount of memory to be provided (default
+ 512 Mi).
+ type: string
+ name:
+ description: The main container name. It's named `integration`
+ by default.
+ type: string
+ port:
+ description: To configure a different http port exposed by
+ the container (default `8080`).
+ format: int32
+ type: integer
+ portName:
+ description: |-
+ To configure a different http port name for the port exposed by the container.
+ It defaults to `http` only when the `expose` parameter is true.
+ type: string
+ ports:
+ description: |-
+ List of container ports available in the container (syntax: <port-name>;<port-number>[;port-protocol]).
+ When omitted, `port-protocol` (admitted values `TCP`, `UDP` or `SCTP`) is `TCP`.
+ Don't use this for the primary http managed port (for which case you need to use `portName` and `port`).
+ Don't use in Knative based environments.
+ items:
+ type: string
+ type: array
+ requestCPU:
+ description: The minimum amount of CPU required (default 125
+ millicores).
+ type: string
+ requestMemory:
+ description: The minimum amount of memory required (default
+ 128 Mi).
+ type: string
+ runAsNonRoot:
+ description: Security Context RunAsNonRoot configuration (default
+ false).
+ type: boolean
+ runAsUser:
+ description: 'Security Context RunAsUser configuration (default
+ none): this value is automatically retrieved in Openshift
+ clusters when not explicitly set.'
+ format: int64
+ type: integer
+ seccompProfileType:
+ description: Security Context SeccompProfileType configuration
+ (default RuntimeDefault).
+ enum:
+ - Unconfined
+ - RuntimeDefault
+ type: string
+ servicePort:
+ description: To configure under which service port the http
+ container port is to be exposed (default `80`).
+ format: int32
+ type: integer
+ servicePortName:
+ description: To configure under which service port name the
+ http container port is to be exposed (default `http`).
+ type: string
+ type: object
+ cron:
+ description: The configuration of Cron trait
+ properties:
+ activeDeadlineSeconds:
+ description: |-
+ Specifies the duration in seconds, relative to the start time, that the job
+ may be continuously active before it is considered to be failed.
+ It defaults to 60s.
+ format: int64
+ type: integer
+ auto:
+ description: |-
+ Automatically deploy the integration as CronJob when all routes are
+ either starting from a periodic consumer (only `cron`, `timer` and `quartz` are supported) or a passive consumer (e.g. `direct` is a passive consumer).
+
+ It's required that all periodic consumers have the same period, and it can be expressed as cron schedule (e.g. `1m` can be expressed as `0/1 * * * *`,
+ while `35m` or `50s` cannot).
+ type: boolean
+ backoffLimit:
+ description: |-
+ Specifies the number of retries before marking the job failed.
+ It defaults to 2.
+ format: int32
+ type: integer
+ components:
+ description: |-
+ A comma separated list of the Camel components that need to be customized in order for them to work when the schedule is triggered externally by Kubernetes.
+ Supported components are currently: `cron`, `timer` and `quartz`.
+ type: string
+ concurrencyPolicy:
+ description: |-
+ Specifies how to treat concurrent executions of a Job.
+ Valid values are:
+ - "Allow": allows CronJobs to run concurrently;
+ - "Forbid" (default): forbids concurrent runs, skipping next run if previous run hasn't finished yet;
+ - "Replace": cancels currently running job and replaces it with a new one
+ enum:
+ - Allow
+ - Forbid
+ - Replace
+ type: string
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: Can be used to enable or disable a trait. All
+ traits share this common property.
+ type: boolean
+ fallback:
+ description: |-
+ Use the default Camel implementation of the `cron` endpoint (`quartz`) instead of trying to materialize the integration
+ as Kubernetes CronJob.
+ type: boolean
+ schedule:
+ description: |-
+ The CronJob schedule for the whole integration. If multiple routes are declared, they must have the same schedule for this
+ mechanism to work correctly.
+ type: string
+ startingDeadlineSeconds:
+ description: |-
+ Optional deadline in seconds for starting the job if it misses scheduled
+ time for any reason. Missed jobs executions will be counted as failed ones.
+ format: int64
+ type: integer
+ timeZone:
+ description: The timezone that the CronJob will run on
+ type: string
+ type: object
+ dependencies:
+ description: The configuration of Dependencies trait
+ properties:
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: 'Deprecated: no longer in use.'
+ type: boolean
+ type: object
+ deployer:
+ description: The configuration of Deployer trait
+ properties:
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: 'Deprecated: no longer in use.'
+ type: boolean
+ kind:
+ description: Allows to explicitly select the desired deployment
+ kind between `deployment`, `cron-job` or `knative-service`
+ when creating the resources for running the integration.
+ enum:
+ - deployment
+ - cron-job
+ - knative-service
+ type: string
+ useSSA:
+ description: |-
+ Deprecated: won't be able to enforce client side update in the future.
+ Use server-side apply to update the owned resources (default `true`).
+ Note that it automatically falls back to client-side patching, if SSA is not available, e.g., on old Kubernetes clusters.
+ type: boolean
+ type: object
+ deployment:
+ description: The configuration of Deployment trait
+ properties:
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: 'Deprecated: no longer in use.'
+ type: boolean
+ progressDeadlineSeconds:
+ description: |-
+ The maximum time in seconds for the deployment to make progress before it
+ is considered to be failed. It defaults to `60s`.
+ format: int32
+ type: integer
+ rollingUpdateMaxSurge:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ The maximum number of pods that can be scheduled above the desired number of
+ pods.
+ Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%).
+ This can not be 0 if MaxUnavailable is 0.
+ Absolute number is calculated from percentage by rounding up.
+ Defaults to `25%`.
+ x-kubernetes-int-or-string: true
+ rollingUpdateMaxUnavailable:
+ anyOf:
+ - type: integer
+ - type: string
+ description: |-
+ The maximum number of pods that can be unavailable during the update.
+ Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%).
+ Absolute number is calculated from percentage by rounding down.
+ This can not be 0 if MaxSurge is 0.
+ Defaults to `25%`.
+ x-kubernetes-int-or-string: true
+ strategy:
+ description: The deployment strategy to use to replace existing
+ pods with new ones.
+ enum:
+ - Recreate
+ - RollingUpdate
+ type: string
+ type: object
+ environment:
+ description: The configuration of Environment trait
+ properties:
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ containerMeta:
+ description: Enables injection of `NAMESPACE` and `POD_NAME`
+ environment variables (default `true`)
+ type: boolean
+ enabled:
+ description: 'Deprecated: no longer in use.'
+ type: boolean
+ httpProxy:
+ description: Propagates the `HTTP_PROXY`, `HTTPS_PROXY` and
+ `NO_PROXY` environment variables (default `true`)
+ type: boolean
+ vars:
+ description: |-
+ A list of environment variables to be added to the integration container.
+ The syntax is either VAR=VALUE or VAR=[configmap|secret]:name/key, where name represents the resource name,
+ and key represents the resource key to be mapped as and environment variable.
+ These take precedence over any previously defined environment variables.
+ items:
+ type: string
+ type: array
+ type: object
+ error-handler:
+ description: |-
+ The configuration of Error Handler trait
+ Deprecated: no longer in use.
+ properties:
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: 'Deprecated: no longer in use.'
+ type: boolean
+ ref:
+ description: The error handler ref name provided or found
+ in application properties
+ type: string
+ type: object
+ gc:
+ description: The configuration of GC trait
+ properties:
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ discoveryCache:
+ description: |-
+ Discovery client cache to be used, either `disabled`, `disk` or `memory` (default `memory`).
+ Deprecated: no longer in use.
+ enum:
+ - disabled
+ - disk
+ - memory
+ type: string
+ enabled:
+ description: Can be used to enable or disable a trait. All
+ traits share this common property.
+ type: boolean
+ type: object
+ health:
+ description: The configuration of Health trait
+ properties:
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: Can be used to enable or disable a trait. All
+ traits share this common property.
+ type: boolean
+ livenessFailureThreshold:
+ description: Minimum consecutive failures for the liveness
+ probe to be considered failed after having succeeded.
+ format: int32
+ type: integer
+ livenessInitialDelay:
+ description: Number of seconds after the container has started
+ before the liveness probe is initiated.
+ format: int32
+ type: integer
+ livenessPeriod:
+ description: How often to perform the liveness probe.
+ format: int32
+ type: integer
+ livenessPort:
+ description: The liveness port to use (default 8080).
+ format: int32
+ type: integer
+ livenessProbe:
+ description: The liveness probe path to use (default provided
+ by the Catalog runtime used).
+ type: string
+ livenessProbeEnabled:
+ description: Configures the liveness probe for the integration
+ container (default `false`).
+ type: boolean
+ livenessScheme:
+ description: Scheme to use when connecting to the liveness
+ probe (default `HTTP`).
+ type: string
+ livenessSuccessThreshold:
+ description: Minimum consecutive successes for the liveness
+ probe to be considered successful after having failed.
+ format: int32
+ type: integer
+ livenessTimeout:
+ description: Number of seconds after which the liveness probe
+ times out.
+ format: int32
+ type: integer
+ readinessFailureThreshold:
+ description: Minimum consecutive failures for the readiness
+ probe to be considered failed after having succeeded.
+ format: int32
+ type: integer
+ readinessInitialDelay:
+ description: Number of seconds after the container has started
+ before the readiness probe is initiated.
+ format: int32
+ type: integer
+ readinessPeriod:
+ description: How often to perform the readiness probe.
+ format: int32
+ type: integer
+ readinessPort:
+ description: The readiness port to use (default 8080).
+ format: int32
+ type: integer
+ readinessProbe:
+ description: The readiness probe path to use (default provided
+ by the Catalog runtime used).
+ type: string
+ readinessProbeEnabled:
+ description: Configures the readiness probe for the integration
+ container (default `true`).
+ type: boolean
+ readinessScheme:
+ description: Scheme to use when connecting to the readiness
+ probe (default `HTTP`).
+ type: string
+ readinessSuccessThreshold:
+ description: Minimum consecutive successes for the readiness
+ probe to be considered successful after having failed.
+ format: int32
+ type: integer
+ readinessTimeout:
+ description: Number of seconds after which the readiness probe
+ times out.
+ format: int32
+ type: integer
+ startupFailureThreshold:
+ description: Minimum consecutive failures for the startup
+ probe to be considered failed after having succeeded.
+ format: int32
+ type: integer
+ startupInitialDelay:
+ description: Number of seconds after the container has started
+ before the startup probe is initiated.
+ format: int32
+ type: integer
+ startupPeriod:
+ description: How often to perform the startup probe.
+ format: int32
+ type: integer
+ startupPort:
+ description: The startup port to use (default 8080).
+ format: int32
+ type: integer
+ startupProbe:
+ description: The startup probe path to use (default provided
+ by the Catalog runtime used).
+ type: string
+ startupProbeEnabled:
+ description: Configures the startup probe for the integration
+ container (default `false`).
+ type: boolean
+ startupScheme:
+ description: Scheme to use when connecting to the startup
+ probe (default `HTTP`).
+ type: string
+ startupSuccessThreshold:
+ description: Minimum consecutive successes for the startup
+ probe to be considered successful after having failed.
+ format: int32
+ type: integer
+ startupTimeout:
+ description: Number of seconds after which the startup probe
+ times out.
+ format: int32
+ type: integer
+ type: object
+ ingress:
+ description: The configuration of Ingress trait
+ properties:
+ annotations:
+ additionalProperties:
+ type: string
+ description: |-
+ The annotations added to the ingress.
+ This can be used to set controller specific annotations, e.g., when using the NGINX Ingress controller:
+ See https://github.com/kubernetes/ingress-nginx/blob/main/docs/user-guide/nginx-configuration/annotations.md
+ type: object
+ auto:
+ description: To automatically add an ingress whenever the
+ integration uses an HTTP endpoint consumer.
+ type: boolean
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: Can be used to enable or disable a trait. All
+ traits share this common property.
+ type: boolean
+ host:
+ description: To configure the host exposed by the ingress.
+ type: string
+ ingressClassName:
+ description: |-
+ The Ingress class name as defined by the Ingress spec
+ See https://kubernetes.io/docs/concepts/services-networking/ingress/
+ type: string
+ path:
+ description: |-
+ To configure the path exposed by the ingress (default `/`).
+ Deprecated: In favor of `paths` - left for backward compatibility.
+ type: string
+ pathType:
+ description: |-
+ To configure the path type exposed by the ingress.
+ One of `Exact`, `Prefix`, `ImplementationSpecific` (default to `Prefix`).
+ enum:
+ - Exact
+ - Prefix
+ - ImplementationSpecific
+ type: string
+ paths:
+ description: To configure the paths exposed by the ingress
+ (default `['/']`).
+ items:
+ type: string
+ type: array
+ tlsHosts:
+ description: To configure tls hosts
+ items:
+ type: string
+ type: array
+ tlsSecretName:
+ description: To configure tls secret name
+ type: string
+ type: object
+ init-containers:
+ description: The configuration of Init Containers trait
+ properties:
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: Can be used to enable or disable a trait. All
+ traits share this common property.
+ type: boolean
+ initTasks:
+ description: A list of init tasks to be executed with format
+ `<name>;<container-image>;<container-command>`.
+ items:
+ type: string
+ type: array
+ sideCarTasks:
+ description: A list of sidecar tasks to be executed with format
+ `<name>;<container-image>;<container-command>`.
+ items:
+ type: string
+ type: array
+ type: object
+ istio:
+ description: The configuration of Istio trait
+ properties:
+ allow:
+ description: 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).
+ type: string
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: Can be used to enable or disable a trait. All
+ traits share this common property.
+ type: boolean
+ inject:
+ description: Forces the value for labels `sidecar.istio.io/inject`.
+ By default the label is set to `true` on deployment and
+ not set on Knative Service.
+ type: boolean
+ type: object
+ jolokia:
+ description: The configuration of Jolokia trait
+ properties:
+ CACert:
+ description: |-
+ 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).
+ type: string
+ clientPrincipal:
+ description: |-
+ 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).
+ items:
+ type: string
+ type: array
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ discoveryEnabled:
+ description: Listen for multicast requests (default `false`)
+ type: boolean
+ enabled:
+ description: Can be used to enable or disable a trait. All
+ traits share this common property.
+ type: boolean
+ extendedClientCheck:
+ description: |-
+ 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).
+ type: boolean
+ host:
+ description: |-
+ 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 `"*"`).
+ type: string
+ options:
+ description: |-
+ A list of additional Jolokia options as defined
+ in https://jolokia.org/reference/html/agents.html#agent-jvm-config[JVM agent configuration options]
+ items:
+ type: string
+ type: array
+ password:
+ description: The password used for authentication, applicable
+ when the `user` option is set.
+ type: string
+ port:
+ description: The Jolokia endpoint port (default `8778`).
+ format: int32
+ type: integer
+ protocol:
+ description: The protocol to use, either `http` or `https`
+ (default `https` for OpenShift)
+ type: string
+ useSSLClientAuthentication:
+ description: Whether client certificates should be used for
+ authentication (default `true` for OpenShift).
+ type: boolean
+ user:
+ description: The user to be used for authentication
+ type: string
+ type: object
+ jvm:
+ description: The configuration of JVM trait
+ properties:
+ agents:
+ description: A list of JVM agents to download and execute
+ with format `<agent-name>;<agent-url>[;<jvm-agent-options>]`.
+ items:
+ type: string
+ type: array
+ classpath:
+ description: Additional JVM classpath (use `Linux` classpath
+ separator)
+ type: string
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ debug:
+ description: Activates remote debugging, so that a debugger
+ can be attached to the JVM, e.g., using port-forwarding
+ type: boolean
+ debugAddress:
+ description: Transport address at which to listen for the
+ newly launched JVM (default `*:5005`)
+ type: string
+ debugSuspend:
+ description: Suspends the target JVM immediately before the
+ main class is loaded
+ type: boolean
+ enabled:
+ description: Can be used to enable or disable a trait. All
+ traits share this common property.
+ type: boolean
+ jar:
+ description: The Jar dependency which will run the application.
+ Leave it empty for managed Integrations.
+ type: string
+ options:
+ description: A list of JVM options
+ items:
+ type: string
+ type: array
+ printCommand:
+ description: |-
+ Prints the command used the start the JVM in the container logs (default `true`)
+ Deprecated: no longer in use.
+ type: boolean
+ type: object
+ kamelets:
+ description: The configuration of Kamelets trait
+ properties:
+ auto:
+ description: Automatically inject all referenced Kamelets
+ and their default configuration (enabled by default)
+ type: boolean
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: Can be used to enable or disable a trait. All
+ traits share this common property.
+ type: boolean
+ list:
+ description: Comma separated list of Kamelet names to load
+ into the current integration
+ type: string
+ mountPoint:
+ description: The directory where the application mounts and
+ reads Kamelet spec (default `/etc/camel/kamelets`)
+ type: string
+ type: object
+ keda:
+ description: 'Deprecated: for backward compatibility.'
+ properties:
+ configuration:
+ description: TraitConfiguration parameters configuration
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ required:
+ - configuration
+ type: object
+ knative:
+ description: The configuration of Knative trait
+ properties:
+ auto:
+ description: Enable automatic discovery of all trait properties.
+ type: boolean
+ channelSinks:
+ description: |-
+ List of channels used as destination of integration routes.
+ Can contain simple channel names or full Camel URIs.
+ items:
+ type: string
+ type: array
+ channelSources:
+ description: |-
+ List of channels used as source of integration routes.
+ Can contain simple channel names or full Camel URIs.
+ items:
+ type: string
+ type: array
+ config:
+ description: Can be used to inject a Knative complete configuration
+ in JSON format.
+ type: string
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: Can be used to enable or disable a trait. All
+ traits share this common property.
+ type: boolean
+ endpointSinks:
+ description: |-
+ List of endpoints used as destination of integration routes.
+ Can contain simple endpoint names or full Camel URIs.
+ items:
+ type: string
+ type: array
+ endpointSources:
+ description: List of channels used as source of integration
+ routes.
+ items:
+ type: string
+ type: array
+ eventSinks:
+ description: |-
+ List of event types that the integration will produce.
+ Can contain simple event types or full Camel URIs (to use a specific broker).
+ items:
+ type: string
+ type: array
+ eventSources:
+ description: |-
+ List of event types that the integration will be subscribed to.
+ Can contain simple event types or full Camel URIs (to use a specific broker different from "default").
+ items:
+ type: string
+ type: array
+ filterEventType:
+ description: |-
+ Enables the default filtering for the Knative trigger using the event type
+ If this is true, the created Knative trigger uses the event type as a filter on the event stream when no other filter criteria is given. (default: true)
+ type: boolean
+ filterSourceChannels:
+ description: |-
+ Enables filtering on events based on the header "ce-knativehistory". Since this header has been removed in newer versions of
+ Knative, filtering is disabled by default.
+ type: boolean
+ filters:
+ description: |-
+ Sets filter attributes on the event stream (such as event type, source, subject and so on).
+ A list of key-value pairs that represent filter attributes and its values.
+ The syntax is KEY=VALUE, e.g., `source="my.source"`.
+ Filter attributes get set on the Knative trigger that is being created as part of this integration.
+ items:
+ type: string
+ type: array
+ namespaceLabel:
+ description: |-
+ Enables the camel-k-operator to set the "bindings.knative.dev/include=true" label to the namespace
+ As Knative requires this label to perform injection of K_SINK URL into the service.
+ If this is false, the integration pod may start and fail, read the SinkBinding Knative documentation. (default: true)
+ type: boolean
+ sinkBinding:
+ description: |-
+ Allows binding the integration to a sink via a Knative SinkBinding resource.
+ This can be used when the integration targets a single sink.
+ It's enabled by default when the integration targets a single sink
+ (except when the integration is owned by a Knative source).
+ type: boolean
+ type: object
+ knative-service:
+ description: The configuration of Knative Service trait
+ properties:
+ annotations:
+ additionalProperties:
+ type: string
+ description: |-
+ The annotations added to route.
+ This can be used to set knative service specific annotations
+ CLI usage example: -t "knative-service.annotations.'haproxy.router.openshift.io/balance'=true"
+ type: object
+ auto:
+ description: |-
+ Automatically deploy the integration as Knative service when all conditions hold:
+
+ * Integration is using the Knative profile
+ * All routes are either starting from an HTTP based consumer or a passive consumer (e.g. `direct` is a passive consumer)
+ type: boolean
+ autoscalingMetric:
+ description: |-
+ Configures the Knative autoscaling metric property (e.g. to set `concurrency` based or `cpu` based autoscaling).
+
+ Refer to the Knative documentation for more information.
+ type: string
+ autoscalingTarget:
+ description: |-
+ Sets the allowed concurrency level or CPU percentage (depending on the autoscaling metric) for each Pod.
+
+ Refer to the Knative documentation for more information.
+ type: integer
+ class:
+ description: |-
+ Configures the Knative autoscaling class property (e.g. to set `hpa.autoscaling.knative.dev` or `kpa.autoscaling.knative.dev` autoscaling).
+
+ Refer to the Knative documentation for more information.
+ enum:
+ - kpa.autoscaling.knative.dev
+ - hpa.autoscaling.knative.dev
+ type: string
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: Can be used to enable or disable a trait. All
+ traits share this common property.
+ type: boolean
+ maxScale:
+ description: |-
+ An upper bound for the number of Pods that can be running in parallel for the integration.
+ Knative has its own cap value that depends on the installation.
+
+ Refer to the Knative documentation for more information.
+ type: integer
+ minScale:
+ description: |-
+ The minimum number of Pods that should be running at any time for the integration. It's **zero** by default, meaning that
+ the integration is scaled down to zero when not used for a configured amount of time.
+
+ Refer to the Knative documentation for more information.
+ type: integer
+ rolloutDuration:
+ description: |-
+ Enables to gradually shift traffic to the latest Revision and sets the rollout duration.
+ It's disabled by default and must be expressed as a Golang `time.Duration` string representation,
+ rounded to a second precision.
+ type: string
+ timeoutSeconds:
+ description: |-
+ The maximum duration in seconds that the request instance is allowed to respond to a request.
+ This field propagates to the integration pod's terminationGracePeriodSeconds
+
+ Refer to the Knative documentation for more information.
+ format: int64
+ type: integer
+ visibility:
+ description: |-
+ Setting `cluster-local`, Knative service becomes a private service.
+ Specifically, this option applies the `networking.knative.dev/visibility` label to Knative service.
+
+ Refer to the Knative documentation for more information.
+ enum:
+ - cluster-local
+ type: string
+ type: object
+ logging:
+ description: The configuration of Logging trait
+ properties:
+ color:
+ description: Colorize the log output
+ type: boolean
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: Can be used to enable or disable a trait. All
+ traits share this common property.
+ type: boolean
+ format:
+ description: Logs message format
+ type: string
+ json:
+ description: Output the logs in JSON
+ type: boolean
+ jsonPrettyPrint:
+ description: Enable "pretty printing" of the JSON logs
+ type: boolean
+ level:
+ description: Adjust the logging level (defaults to `INFO`)
+ enum:
+ - FATAL
+ - WARN
+ - INFO
+ - DEBUG
+ - TRACE
+ type: string
+ type: object
+ master:
+ description: The configuration of Master trait
+ properties:
+ auto:
+ description: Enables automatic configuration of the trait.
+ type: boolean
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: Can be used to enable or disable a trait. All
+ traits share this common property.
+ type: boolean
+ includeDelegateDependencies:
+ description: |-
+ 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.
+ type: boolean
+ labelKey:
+ description: Label that will be used to identify all pods
+ contending the lock. Defaults to "camel.apache.org/integration".
+ type: string
+ labelValue:
+ description: Label value that will be used to identify all
+ pods contending the lock. Defaults to the integration name.
+ type: string
+ resourceName:
+ description: |-
+ Name of the configmap that will be used to store the lock. Defaults to "<integration-name>-lock".
+ Name of the configmap/lease resource that will be used to store the lock. Defaults to "<integration-name>-lock".
+ type: string
+ resourceType:
+ description: Type of Kubernetes resource to use for locking
+ ("ConfigMap" or "Lease"). Defaults to "Lease".
+ type: string
+ type: object
+ mount:
+ description: The configuration of Mount trait
+ properties:
+ configs:
+ description: |-
+ A list of configuration pointing to configmap/secret.
+ The configuration are expected to be UTF-8 resources as they are processed by runtime Camel Context and tried to be parsed as property files.
+ They are also made available on the classpath in order to ease their usage directly from the Route.
+ Syntax: [configmap|secret]:name[/key], where name represents the resource name and key optionally represents the resource key to be filtered
+ items:
+ type: string
+ type: array
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ emptyDirs:
+ description: |-
+ A list of EmptyDir volumes to be mounted. An optional size limit may be configured (default 500Mi).
+ Syntax: name:/container/path[:sizeLimit]
+ items:
+ type: string
+ type: array
+ enabled:
+ description: 'Deprecated: no longer in use.'
+ type: boolean
+ hotReload:
+ description: |-
+ Enable "hot reload" when a secret/configmap mounted is edited (default `false`). The configmap/secret must be
+ marked with `camel.apache.org/integration` label to be taken in account. The resource will be watched for any kind change, also for
+ changes in metadata.
+ type: boolean
+ resources:
+ description: |-
+ A list of resources (text or binary content) pointing to configmap/secret.
+ The resources are expected to be any resource type (text or binary content).
+ The destination path can be either a default location or any path specified by the user.
+ Syntax: [configmap|secret]:name[/key][@path], where name represents the resource name, key optionally represents the resource key to be filtered and path represents the destination path
+ items:
+ type: string
+ type: array
+ scanKameletsImplicitLabelSecrets:
+ description: 'Deprecated: no longer available since version
+ 2.5.'
+ type: boolean
+ volumes:
+ description: |-
+ A list of Persistent Volume Claims to be mounted. Syntax: [pvcname:/container/path]. If the PVC is not found, the Integration fails.
+ You can use the syntax [pvcname:/container/path:size:accessMode<:storageClass>] to create a dynamic PVC based on the Storage Class provided
+ or the default cluster Storage Class. However, if the PVC exists, the operator would mount it.
+ items:
+ type: string
+ type: array
+ type: object
+ openapi:
+ description: The configuration of OpenAPI trait
+ properties:
+ configmaps:
+ description: The configmaps holding the spec of the OpenAPI
+ (compatible with > 3.0 spec only).
+ items:
+ type: string
+ type: array
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: 'Deprecated: no longer in use.'
+ type: boolean
+ type: object
+ owner:
+ description: The configuration of Owner trait
+ properties:
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: Can be used to enable or disable a trait. All
+ traits share this common property.
+ type: boolean
+ targetAnnotations:
+ description: The set of annotations to be transferred
+ items:
+ type: string
+ type: array
+ targetLabels:
+ description: The set of labels to be transferred
+ items:
+ type: string
+ type: array
+ type: object
+ pdb:
+ description: The configuration of PDB trait
+ properties:
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: Can be used to enable or disable a trait. All
+ traits share this common property.
+ type: boolean
+ maxUnavailable:
+ description: |-
+ The number of pods for the Integration that can be unavailable after an eviction.
+ It can be either an absolute number or a percentage (default `1` if `min-available` is also not set).
+ Only one of `max-unavailable` and `min-available` can be specified.
+ type: string
+ minAvailable:
+ description: |-
+ The number of pods for the Integration that must still be available after an eviction.
+ It can be either an absolute number or a percentage.
+ Only one of `min-available` and `max-unavailable` can be specified.
+ type: string
+ type: object
+ platform:
+ description: The configuration of Platform trait
+ properties:
+ auto:
+ description: |-
+ To automatically detect from the environment if a default platform can be created (it will be created on OpenShift or when a registry address is set).
+ Deprecated: Platform is auto generated by the operator install procedure - maintained for backward compatibility
+ type: boolean
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ createDefault:
+ description: |-
+ To create a default (empty) platform when the platform is missing.
+ Deprecated: Platform is auto generated by the operator install procedure - maintained for backward compatibility
+ type: boolean
+ enabled:
+ description: 'Deprecated: no longer in use.'
+ type: boolean
+ global:
+ description: |-
+ Indicates if the platform should be created globally in the case of global operator (default true).
+ Deprecated: Platform is auto generated by the operator install procedure - maintained for backward compatibility
+ type: boolean
+ type: object
+ pod:
+ description: The configuration of Pod trait
+ properties:
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: Can be used to enable or disable a trait. All
+ traits share this common property.
+ type: boolean
+ type: object
+ prometheus:
+ description: The configuration of Prometheus trait
+ properties:
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: Can be used to enable or disable a trait. All
+ traits share this common property.
+ type: boolean
+ podMonitor:
+ description: Whether a `PodMonitor` resource is created (default
+ `true`).
+ type: boolean
+ podMonitorLabels:
+ description: The `PodMonitor` resource labels, applicable
+ when `pod-monitor` is `true`.
+ items:
+ type: string
+ type: array
+ type: object
+ pull-secret:
+ description: The configuration of Pull Secret trait
+ properties:
+ auto:
+ description: Automatically configures the platform registry
+ secret on the pod if it is of type `kubernetes.io/dockerconfigjson`.
+ type: boolean
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: Can be used to enable or disable a trait. All
+ traits share this common property.
+ type: boolean
+ imagePullerDelegation:
+ description: When using a global operator with a shared platform,
+ this enables delegation of the `system:image-puller` cluster
+ role on the operator namespace to the integration service
+ account.
+ type: boolean
+ secretName:
+ description: The pull secret name to set on the Pod. If left
+ empty this is automatically taken from the `IntegrationPlatform`
+ registry configuration.
+ type: string
+ type: object
+ quarkus:
+ description: The configuration of Quarkus trait
+ properties:
+ buildMode:
+ description: |-
+ The Quarkus mode to run: either `jvm` or `native` (default `jvm`).
+ In case both `jvm` and `native` are specified, two `IntegrationKit` resources are created,
+ with the `native` kit having precedence over the `jvm` one once ready.
+ items:
+ description: QuarkusMode is the type of Quarkus build packaging.
+ enum:
+ - jvm
+ - native
+ type: string
+ type: array
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: 'Deprecated: no longer in use.'
+ type: boolean
+ nativeBaseImage:
+ description: The base image to use when running a native build
+ (default `quay.io/quarkus/quarkus-micro-image:2.0`)
+ type: string
+ nativeBuilderImage:
+ description: The image containing the tooling required for
+ a native build (by default it will use the one provided
+ in the runtime catalog)
+ type: string
+ packageTypes:
+ description: |-
+ The Quarkus package types, `fast-jar` or `native` (default `fast-jar`).
+ In case both `fast-jar` and `native` are specified, two `IntegrationKit` resources are created,
+ with the native kit having precedence over the `fast-jar` one once ready.
+ The order influences the resolution of the current kit for the integration.
+ The kit corresponding to the first package type will be assigned to the
+ integration in case no existing kit that matches the integration exists.
+ Deprecated: use `build-mode` instead.
+ items:
+ description: |-
+ QuarkusPackageType is the type of Quarkus build packaging.
+ Deprecated: use `QuarkusMode` instead.
+ enum:
+ - fast-jar
+ - native
+ type: string
+ type: array
+ type: object
+ registry:
+ description: |-
+ The configuration of Registry trait (support removed since version 2.5.0).
+ Deprecated: use jvm trait or read documentation.
+ properties:
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: Can be used to enable or disable a trait. All
+ traits share this common property.
+ type: boolean
+ type: object
+ route:
+ description: The configuration of Route trait
+ properties:
+ annotations:
+ additionalProperties:
+ type: string
+ description: |-
+ The annotations added to route.
+ This can be used to set route specific annotations
+ For annotations options see https://docs.openshift.com/container-platform/3.11/architecture/networking/routes.html#route-specific-annotations
+ CLI usage example: -t "route.annotations.'haproxy.router.openshift.io/balance'=true"
+ type: object
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: Can be used to enable or disable a trait. All
+ traits share this common property.
+ type: boolean
+ host:
+ description: To configure the host exposed by the route.
+ type: string
+ tlsCACertificate:
+ description: |-
+ The TLS CA certificate contents.
+
+ Refer to the OpenShift route documentation for additional information.
+ type: string
+ tlsCACertificateSecret:
+ description: |-
+ The secret name and key reference to the TLS CA certificate. The format is "secret-name[/key-name]", the value represents the secret name, if there is only one key in the secret it will be read, otherwise you can set a key name separated with a "/".
+
+ Refer to the OpenShift route documentation for additional information.
+ type: string
+ tlsCertificate:
+ description: |-
+ The TLS certificate contents.
+
+ Refer to the OpenShift route documentation for additional information.
+ type: string
+ tlsCertificateSecret:
+ description: |-
+ The secret name and key reference to the TLS certificate. The format is "secret-name[/key-name]", the value represents the secret name, if there is only one key in the secret it will be read, otherwise you can set a key name separated with a "/".
+
+ Refer to the OpenShift route documentation for additional information.
+ type: string
+ tlsDestinationCACertificate:
+ description: |-
+ The destination CA certificate provides the contents of the ca certificate of the final destination. When using reencrypt
+ termination this file should be provided in order to have routers use it for health checks on the secure connection.
+ If this field is not specified, the router may provide its own destination CA and perform hostname validation using
+ the short service name (service.namespace.svc), which allows infrastructure generated certificates to automatically
+ verify.
+
+ Refer to the OpenShift route documentation for additional information.
+ type: string
+ tlsDestinationCACertificateSecret:
+ description: |-
+ The secret name and key reference to the destination CA certificate. The format is "secret-name[/key-name]", the value represents the secret name, if there is only one key in the secret it will be read, otherwise you can set a key name separated with a "/".
+
+ Refer to the OpenShift route documentation for additional information.
+ type: string
+ tlsInsecureEdgeTerminationPolicy:
+ description: |-
+ To configure how to deal with insecure traffic, e.g. `Allow`, `Disable` or `Redirect` traffic.
+
+ Refer to the OpenShift route documentation for additional information.
+ enum:
+ - None
+ - Allow
+ - Redirect
+ type: string
+ tlsKey:
+ description: |-
+ The TLS certificate key contents.
+
+ Refer to the OpenShift route documentation for additional information.
+ type: string
+ tlsKeySecret:
+ description: |-
+ The secret name and key reference to the TLS certificate key. The format is "secret-name[/key-name]", the value represents the secret name, if there is only one key in the secret it will be read, otherwise you can set a key name separated with a "/".
+
+ Refer to the OpenShift route documentation for additional information.
+ type: string
+ tlsTermination:
+ description: |-
+ The TLS termination type, like `edge`, `passthrough` or `reencrypt`.
+
+ Refer to the OpenShift route documentation for additional information.
+ enum:
+ - edge
+ - reencrypt
+ - passthrough
+ type: string
+ type: object
+ security-context:
+ description: The configuration of Security Context trait
+ properties:
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: 'Deprecated: no longer in use.'
+ type: boolean
+ runAsNonRoot:
+ description: Security Context RunAsNonRoot configuration (default
+ false).
+ type: boolean
+ runAsUser:
+ description: 'Security Context RunAsUser configuration (default
+ none): this value is automatically retrieved in Openshift
+ clusters when not explicitly set.'
+ format: int64
+ type: integer
+ seccompProfileType:
+ description: Security Context SeccompProfileType configuration
+ (default RuntimeDefault).
+ enum:
+ - Unconfined
+ - RuntimeDefault
+ type: string
+ type: object
+ service:
+ description: The configuration of Service trait
+ properties:
+ annotations:
+ additionalProperties:
+ type: string
+ description: The annotations added to the Service object.
+ type: object
+ auto:
+ description: To automatically detect from the code if a Service
+ needs to be created.
+ type: boolean
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: Can be used to enable or disable a trait. All
+ traits share this common property.
+ type: boolean
+ labels:
+ additionalProperties:
+ type: string
+ description: The labels added to the Service object.
+ type: object
+ nodePort:
+ description: |-
+ Enable Service to be exposed as NodePort (default `false`).
+ Deprecated: Use service type instead.
+ type: boolean
+ ports:
+ description: |-
+ List of container ports available in the container to expose
+ (syntax: <port-name>;<port-number>;<container-port-number>[;<port-protocol]).
+ When omitted, `port-protocol` (admitted values `TCP`, `UDP` or `SCTP`) is `TCP`.
+ Don't use this for the primary http managed port (which is managed by container trait).
+ Don't use in Knative based environments.
+ items:
+ type: string
+ type: array
+ type:
+ description: The type of service to be used, either 'ClusterIP',
+ 'NodePort' or 'LoadBalancer'.
+ enum:
+ - ClusterIP
+ - NodePort
+ - LoadBalancer
+ type: string
+ type: object
+ service-binding:
+ description: |-
+ The configuration of Service Binding trait
+ Deprecated: no longer in use.
+ properties:
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: Can be used to enable or disable a trait. All
+ traits share this common property.
+ type: boolean
+ services:
+ description: List of Services in the form [[apigroup/]version:]kind:[namespace/]name
+ items:
+ type: string
+ type: array
+ type: object
+ strimzi:
+ description: 'Deprecated: for backward compatibility.'
+ properties:
+ configuration:
+ description: TraitConfiguration parameters configuration
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ required:
+ - configuration
+ type: object
+ telemetry:
+ description: The configuration of Telemetry trait
+ properties:
+ auto:
+ description: Enables automatic configuration of the trait,
+ including automatic discovery of the telemetry endpoint.
+ type: boolean
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: Can be used to enable or disable a trait. All
+ traits share this common property.
+ type: boolean
+ endpoint:
+ description: The target endpoint of the Telemetry service
+ (automatically discovered by default)
+ type: string
+ sampler:
+ description: The sampler of the telemetry used for tracing
+ (default "on")
+ type: string
+ sampler-parent-based:
+ description: The sampler of the telemetry used for tracing
+ is parent based (default "true")
+ type: boolean
+ sampler-ratio:
+ description: The sampler ratio of the telemetry used for tracing
+ type: string
+ serviceName:
+ description: The name of the service that publishes telemetry
+ data (defaults to the integration name)
+ type: string
+ type: object
+ toleration:
+ description: The configuration of Toleration trait
+ properties:
+ configuration:
+ description: |-
+ Legacy trait configuration parameters.
+ Deprecated: for backward compatibility.
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ enabled:
+ description: Can be used to enable or disable a trait. All
+ traits share this common property.
+ type: boolean
+ taints:
+ description: The list of taints to tolerate, in the form `Key[=Value]:Effect[:Seconds]`
+ items:
+ type: string
+ type: array
+ type: object
+ tracing:
+ description: 'Deprecated: for backward compatibility.'
+ properties:
+ configuration:
+ description: TraitConfiguration parameters configuration
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ required:
+ - configuration
+ type: object
+ type: object
type: object
status:
description: the status of a Pipe
diff --git a/pkg/trait/util.go b/pkg/trait/util.go
index 896501ca3..a658cbd94 100644
--- a/pkg/trait/util.go
+++ b/pkg/trait/util.go
@@ -445,6 +445,14 @@ func NewSpecTraitsOptionsForIntegrationKit(c client.Client, i *v1.IntegrationKit
func NewTraitsOptionsForPipe(c client.Client, pipe *v1.Pipe) (Options, error) {
options := Options{}
+ if pipe.Spec.Traits != nil {
+ var err error
+ options, err = ToTraitMap(*pipe.Spec.Traits)
+ if err != nil {
+ return nil, err
+ }
+ }
+
return newTraitsOptions(c, options, pipe.Annotations)
}