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 2023/10/04 10:53:04 UTC
[camel-k] 06/09: feat(pipeline): configure requests and limits for all tasks
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
commit 889c4938f5250ab9f8fbd41d416710c11f3bd9a2
Author: Pasquale Congiusti <pa...@gmail.com>
AuthorDate: Tue Sep 26 15:31:02 2023 +0200
feat(pipeline): configure requests and limits for all tasks
---
config/crd/bases/camel.apache.org_builds.yaml | 258 +++++++++++++++++++++
.../bases/camel.apache.org_integrationkits.yaml | 46 +++-
.../camel.apache.org_integrationplatforms.yaml | 92 ++++++--
.../crd/bases/camel.apache.org_integrations.yaml | 46 +++-
.../bases/camel.apache.org_kameletbindings.yaml | 46 +++-
config/crd/bases/camel.apache.org_pipes.yaml | 46 +++-
docs/modules/ROOT/pages/pipeline/pipeline.adoc | 2 +
docs/modules/ROOT/partials/apis/camel-k-crds.adoc | 52 ++++-
docs/modules/traits/pages/builder.adoc | 22 +-
helm/camel-k/crds/crd-build.yaml | 258 +++++++++++++++++++++
helm/camel-k/crds/crd-integration-kit.yaml | 46 +++-
helm/camel-k/crds/crd-integration-platform.yaml | 92 ++++++--
helm/camel-k/crds/crd-integration.yaml | 46 +++-
helm/camel-k/crds/crd-kamelet-binding.yaml | 46 +++-
helm/camel-k/crds/crd-pipe.yaml | 46 +++-
pkg/apis/camel/v1/build_types.go | 4 +-
pkg/apis/camel/v1/build_types_support.go | 33 ++-
pkg/apis/camel/v1/trait/builder.go | 14 +-
pkg/apis/camel/v1/trait/zz_generated.deepcopy.go | 20 ++
pkg/apis/camel/v1/zz_generated.deepcopy.go | 2 +-
.../camel/applyconfiguration/camel/v1/basetask.go | 11 +-
.../applyconfiguration/camel/v1/buildahtask.go | 8 +
.../applyconfiguration/camel/v1/buildertask.go | 15 +-
.../camel/applyconfiguration/camel/v1/jibtask.go | 8 +
.../applyconfiguration/camel/v1/kanikotask.go | 8 +
.../camel/applyconfiguration/camel/v1/s2itask.go | 8 +
.../applyconfiguration/camel/v1/spectrumtask.go | 8 +
.../camel/applyconfiguration/camel/v1/usertask.go | 8 +
pkg/controller/build/build_monitor_test.go | 12 +-
pkg/controller/build/build_pod.go | 9 +-
pkg/controller/integrationkit/build.go | 2 +-
pkg/resources/resources.go | 28 +--
pkg/trait/builder.go | 149 ++++++++----
pkg/trait/builder_test.go | 33 ++-
resources/traits.yaml | 34 ++-
35 files changed, 1343 insertions(+), 215 deletions(-)
diff --git a/config/crd/bases/camel.apache.org_builds.yaml b/config/crd/bases/camel.apache.org_builds.yaml
index 0ff027d69..08a6cc213 100644
--- a/config/crd/bases/camel.apache.org_builds.yaml
+++ b/config/crd/bases/camel.apache.org_builds.yaml
@@ -148,6 +148,49 @@ spec:
baseImage:
description: base image layer
type: string
+ configuration:
+ description: The configuration that should be used to perform
+ the Build.
+ properties:
+ limitCPU:
+ description: The maximum amount of CPU required. Only
+ used for `pod` strategy
+ type: string
+ limitMemory:
+ description: The maximum amount of memory required.
+ Only used for `pod` strategy
+ type: string
+ operatorNamespace:
+ description: The namespace where to run the builder
+ Pod (must be the same of the operator in charge of
+ this Build reconciliation).
+ type: string
+ orderStrategy:
+ description: the build order strategy to adopt
+ enum:
+ - dependencies
+ - fifo
+ - sequential
+ type: string
+ requestCPU:
+ description: The minimum amount of CPU required. Only
+ used for `pod` strategy
+ type: string
+ requestMemory:
+ description: The minimum amount of memory required.
+ Only used for `pod` strategy
+ type: string
+ strategy:
+ description: the strategy to adopt
+ enum:
+ - routine
+ - pod
+ type: string
+ toolImage:
+ description: The container image to be used to run the
+ build.
+ type: string
+ type: object
contextDir:
description: can be useful to share info with other tasks
type: string
@@ -698,6 +741,49 @@ spec:
items:
type: string
type: array
+ configuration:
+ description: The configuration that should be used to perform
+ the Build.
+ properties:
+ limitCPU:
+ description: The maximum amount of CPU required. Only
+ used for `pod` strategy
+ type: string
+ limitMemory:
+ description: The maximum amount of memory required.
+ Only used for `pod` strategy
+ type: string
+ operatorNamespace:
+ description: The namespace where to run the builder
+ Pod (must be the same of the operator in charge of
+ this Build reconciliation).
+ type: string
+ orderStrategy:
+ description: the build order strategy to adopt
+ enum:
+ - dependencies
+ - fifo
+ - sequential
+ type: string
+ requestCPU:
+ description: The minimum amount of CPU required. Only
+ used for `pod` strategy
+ type: string
+ requestMemory:
+ description: The minimum amount of memory required.
+ Only used for `pod` strategy
+ type: string
+ strategy:
+ description: the strategy to adopt
+ enum:
+ - routine
+ - pod
+ type: string
+ toolImage:
+ description: The container image to be used to run the
+ build.
+ type: string
+ type: object
image:
description: the container image to use
type: string
@@ -711,6 +797,49 @@ spec:
baseImage:
description: base image layer
type: string
+ configuration:
+ description: The configuration that should be used to perform
+ the Build.
+ properties:
+ limitCPU:
+ description: The maximum amount of CPU required. Only
+ used for `pod` strategy
+ type: string
+ limitMemory:
+ description: The maximum amount of memory required.
+ Only used for `pod` strategy
+ type: string
+ operatorNamespace:
+ description: The namespace where to run the builder
+ Pod (must be the same of the operator in charge of
+ this Build reconciliation).
+ type: string
+ orderStrategy:
+ description: the build order strategy to adopt
+ enum:
+ - dependencies
+ - fifo
+ - sequential
+ type: string
+ requestCPU:
+ description: The minimum amount of CPU required. Only
+ used for `pod` strategy
+ type: string
+ requestMemory:
+ description: The minimum amount of memory required.
+ Only used for `pod` strategy
+ type: string
+ strategy:
+ description: the strategy to adopt
+ enum:
+ - routine
+ - pod
+ type: string
+ toolImage:
+ description: The container image to be used to run the
+ build.
+ type: string
+ type: object
contextDir:
description: can be useful to share info with other tasks
type: string
@@ -759,6 +888,49 @@ spec:
description: the PVC used to store the cache
type: string
type: object
+ configuration:
+ description: The configuration that should be used to perform
+ the Build.
+ properties:
+ limitCPU:
+ description: The maximum amount of CPU required. Only
+ used for `pod` strategy
+ type: string
+ limitMemory:
+ description: The maximum amount of memory required.
+ Only used for `pod` strategy
+ type: string
+ operatorNamespace:
+ description: The namespace where to run the builder
+ Pod (must be the same of the operator in charge of
+ this Build reconciliation).
+ type: string
+ orderStrategy:
+ description: the build order strategy to adopt
+ enum:
+ - dependencies
+ - fifo
+ - sequential
+ type: string
+ requestCPU:
+ description: The minimum amount of CPU required. Only
+ used for `pod` strategy
+ type: string
+ requestMemory:
+ description: The minimum amount of memory required.
+ Only used for `pod` strategy
+ type: string
+ strategy:
+ description: the strategy to adopt
+ enum:
+ - routine
+ - pod
+ type: string
+ toolImage:
+ description: The container image to be used to run the
+ build.
+ type: string
+ type: object
contextDir:
description: can be useful to share info with other tasks
type: string
@@ -1298,6 +1470,49 @@ spec:
s2i:
description: a S2iTask, for S2I strategy
properties:
+ configuration:
+ description: The configuration that should be used to perform
+ the Build.
+ properties:
+ limitCPU:
+ description: The maximum amount of CPU required. Only
+ used for `pod` strategy
+ type: string
+ limitMemory:
+ description: The maximum amount of memory required.
+ Only used for `pod` strategy
+ type: string
+ operatorNamespace:
+ description: The namespace where to run the builder
+ Pod (must be the same of the operator in charge of
+ this Build reconciliation).
+ type: string
+ orderStrategy:
+ description: the build order strategy to adopt
+ enum:
+ - dependencies
+ - fifo
+ - sequential
+ type: string
+ requestCPU:
+ description: The minimum amount of CPU required. Only
+ used for `pod` strategy
+ type: string
+ requestMemory:
+ description: The minimum amount of memory required.
+ Only used for `pod` strategy
+ type: string
+ strategy:
+ description: the strategy to adopt
+ enum:
+ - routine
+ - pod
+ type: string
+ toolImage:
+ description: The container image to be used to run the
+ build.
+ type: string
+ type: object
contextDir:
description: can be useful to share info with other tasks
type: string
@@ -1314,6 +1529,49 @@ spec:
baseImage:
description: base image layer
type: string
+ configuration:
+ description: The configuration that should be used to perform
+ the Build.
+ properties:
+ limitCPU:
+ description: The maximum amount of CPU required. Only
+ used for `pod` strategy
+ type: string
+ limitMemory:
+ description: The maximum amount of memory required.
+ Only used for `pod` strategy
+ type: string
+ operatorNamespace:
+ description: The namespace where to run the builder
+ Pod (must be the same of the operator in charge of
+ this Build reconciliation).
+ type: string
+ orderStrategy:
+ description: the build order strategy to adopt
+ enum:
+ - dependencies
+ - fifo
+ - sequential
+ type: string
+ requestCPU:
+ description: The minimum amount of CPU required. Only
+ used for `pod` strategy
+ type: string
+ requestMemory:
+ description: The minimum amount of memory required.
+ Only used for `pod` strategy
+ type: string
+ strategy:
+ description: the strategy to adopt
+ enum:
+ - routine
+ - pod
+ type: string
+ toolImage:
+ description: The container image to be used to run the
+ build.
+ type: string
+ type: object
contextDir:
description: can be useful to share info with other tasks
type: string
diff --git a/config/crd/bases/camel.apache.org_integrationkits.yaml b/config/crd/bases/camel.apache.org_integrationkits.yaml
index ea68807a3..359ef577c 100644
--- a/config/crd/bases/camel.apache.org_integrationkits.yaml
+++ b/config/crd/bases/camel.apache.org_integrationkits.yaml
@@ -204,12 +204,14 @@ spec:
traits share this common property.
type: boolean
limitCPU:
- description: When using `pod` strategy, the maximum amount
- of CPU required by the pod builder.
+ 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.
+ 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
@@ -234,12 +236,14 @@ spec:
type: string
type: array
requestCPU:
- description: When using `pod` strategy, the minimum amount
- of CPU required by the pod builder.
+ 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.
+ 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`
@@ -247,7 +251,31 @@ spec:
type: string
tasks:
description: A list of tasks to be executed (available only
- when using `pod` strategy) with format <name>;<container-image>;<container-command>
+ when using `pod` strategy) with format `<name>;<container-image>;<container-command>`.
+ items:
+ type: string
+ type: array
+ 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
diff --git a/config/crd/bases/camel.apache.org_integrationplatforms.yaml b/config/crd/bases/camel.apache.org_integrationplatforms.yaml
index a37e7c91d..5d3de2436 100644
--- a/config/crd/bases/camel.apache.org_integrationplatforms.yaml
+++ b/config/crd/bases/camel.apache.org_integrationplatforms.yaml
@@ -507,12 +507,14 @@ spec:
traits share this common property.
type: boolean
limitCPU:
- description: When using `pod` strategy, the maximum amount
- of CPU required by the pod builder.
+ 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.
+ 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
@@ -537,12 +539,14 @@ spec:
type: string
type: array
requestCPU:
- description: When using `pod` strategy, the minimum amount
- of CPU required by the pod builder.
+ 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.
+ 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`
@@ -550,7 +554,31 @@ spec:
type: string
tasks:
description: A list of tasks to be executed (available only
- when using `pod` strategy) with format <name>;<container-image>;<container-command>
+ when using `pod` strategy) with format `<name>;<container-image>;<container-command>`.
+ items:
+ type: string
+ type: array
+ 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
@@ -2281,12 +2309,14 @@ spec:
traits share this common property.
type: boolean
limitCPU:
- description: When using `pod` strategy, the maximum amount
- of CPU required by the pod builder.
+ 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.
+ 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
@@ -2311,12 +2341,14 @@ spec:
type: string
type: array
requestCPU:
- description: When using `pod` strategy, the minimum amount
- of CPU required by the pod builder.
+ 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.
+ 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`
@@ -2324,7 +2356,31 @@ spec:
type: string
tasks:
description: A list of tasks to be executed (available only
- when using `pod` strategy) with format <name>;<container-image>;<container-command>
+ when using `pod` strategy) with format `<name>;<container-image>;<container-command>`.
+ items:
+ type: string
+ type: array
+ 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
diff --git a/config/crd/bases/camel.apache.org_integrations.yaml b/config/crd/bases/camel.apache.org_integrations.yaml
index 042186be4..f7fefbc25 100644
--- a/config/crd/bases/camel.apache.org_integrations.yaml
+++ b/config/crd/bases/camel.apache.org_integrations.yaml
@@ -6424,12 +6424,14 @@ spec:
traits share this common property.
type: boolean
limitCPU:
- description: When using `pod` strategy, the maximum amount
- of CPU required by the pod builder.
+ 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.
+ 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
@@ -6454,12 +6456,14 @@ spec:
type: string
type: array
requestCPU:
- description: When using `pod` strategy, the minimum amount
- of CPU required by the pod builder.
+ 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.
+ 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`
@@ -6467,7 +6471,31 @@ spec:
type: string
tasks:
description: A list of tasks to be executed (available only
- when using `pod` strategy) with format <name>;<container-image>;<container-command>
+ when using `pod` strategy) with format `<name>;<container-image>;<container-command>`.
+ items:
+ type: string
+ type: array
+ 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
diff --git a/config/crd/bases/camel.apache.org_kameletbindings.yaml b/config/crd/bases/camel.apache.org_kameletbindings.yaml
index 1181e466b..69d9aee3d 100644
--- a/config/crd/bases/camel.apache.org_kameletbindings.yaml
+++ b/config/crd/bases/camel.apache.org_kameletbindings.yaml
@@ -6706,12 +6706,14 @@ spec:
All traits share this common property.
type: boolean
limitCPU:
- description: When using `pod` strategy, the maximum amount
- of CPU required by the pod builder.
+ 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.
+ 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
@@ -6737,12 +6739,14 @@ spec:
type: string
type: array
requestCPU:
- description: When using `pod` strategy, the minimum amount
- of CPU required by the pod builder.
+ 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.
+ 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`
@@ -6750,7 +6754,31 @@ spec:
type: string
tasks:
description: A list of tasks to be executed (available
- only when using `pod` strategy) with format <name>;<container-image>;<container-command>
+ only when using `pod` strategy) with format `<name>;<container-image>;<container-command>`.
+ items:
+ type: string
+ type: array
+ 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
diff --git a/config/crd/bases/camel.apache.org_pipes.yaml b/config/crd/bases/camel.apache.org_pipes.yaml
index d6b5e1269..23a287c66 100644
--- a/config/crd/bases/camel.apache.org_pipes.yaml
+++ b/config/crd/bases/camel.apache.org_pipes.yaml
@@ -6703,12 +6703,14 @@ spec:
All traits share this common property.
type: boolean
limitCPU:
- description: When using `pod` strategy, the maximum amount
- of CPU required by the pod builder.
+ 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.
+ 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
@@ -6734,12 +6736,14 @@ spec:
type: string
type: array
requestCPU:
- description: When using `pod` strategy, the minimum amount
- of CPU required by the pod builder.
+ 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.
+ 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`
@@ -6747,7 +6751,31 @@ spec:
type: string
tasks:
description: A list of tasks to be executed (available
- only when using `pod` strategy) with format <name>;<container-image>;<container-command>
+ only when using `pod` strategy) with format `<name>;<container-image>;<container-command>`.
+ items:
+ type: string
+ type: array
+ 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
diff --git a/docs/modules/ROOT/pages/pipeline/pipeline.adoc b/docs/modules/ROOT/pages/pipeline/pipeline.adoc
index 5e593dfb8..85bbdf3a8 100644
--- a/docs/modules/ROOT/pages/pipeline/pipeline.adoc
+++ b/docs/modules/ROOT/pages/pipeline/pipeline.adoc
@@ -50,6 +50,8 @@ Maintaining the example above as a reference, configuring a custom task will be
kamel run Test.java -t builder.tasks=custom1;alpine;tree -t builder.tasks="custom2;alpine;cat maven/pom.xml"
```
+Another interesting configuration you can provide via Builder trait is the (https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/)[Kubernetes requests and limits]. Each of the task you are providing in the pipeline, can be configured with the proper resource settings. You can use, for instance the `-t builder.request-cpu <task-name>:1000m` to configure the container executed by the `task-name`. This configuration works for all the tasks including `builder`, `pack [...]
+
[[build-pipeline-result]]
== Getting task execution status
diff --git a/docs/modules/ROOT/partials/apis/camel-k-crds.adoc b/docs/modules/ROOT/partials/apis/camel-k-crds.adoc
index 3afd80dd3..6fa1d8f2c 100644
--- a/docs/modules/ROOT/partials/apis/camel-k-crds.adoc
+++ b/docs/modules/ROOT/partials/apis/camel-k-crds.adoc
@@ -429,6 +429,13 @@ string
name of the task
+|`configuration` +
+*xref:#_camel_apache_org_v1_BuildConfiguration[BuildConfiguration]*
+|
+
+
+The configuration that should be used to perform the Build.
+
|===
@@ -526,8 +533,8 @@ BuildConditionType -- .
*Appears on:*
+* <<#_camel_apache_org_v1_BaseTask, BaseTask>>
* <<#_camel_apache_org_v1_BuildSpec, BuildSpec>>
-* <<#_camel_apache_org_v1_BuilderTask, BuilderTask>>
* <<#_camel_apache_org_v1_IntegrationPlatformBuildSpec, IntegrationPlatformBuildSpec>>
BuildConfiguration represent the configuration required to build the runtime.
@@ -864,13 +871,6 @@ BuilderTask is the generic task in charge of building the application image.
-|`configuration` +
-*xref:#_camel_apache_org_v1_BuildConfiguration[BuildConfiguration]*
-|
-
-
-The configuration that should be used to perform the Build.
-
|`baseImage` +
string
|
@@ -1169,7 +1169,7 @@ loaders required by this catalog
* <<#_camel_apache_org_v1_CamelCatalog, CamelCatalog>>
-CamelCatalogStatus defines the observed state of CamelCatalog. As the catalog is a static resource, we expect it to be empty.
+CamelCatalogStatus defines the observed state of CamelCatalog.
[cols="2,2a",options="header"]
|===
@@ -5800,6 +5800,7 @@ string
When using `pod` strategy, the minimum amount of CPU required by the pod builder.
+Deprecated: use TasksRequestCPU instead with task name `builder`.
|`requestMemory` +
string
@@ -5807,6 +5808,7 @@ string
When using `pod` strategy, the minimum amount of memory required by the pod builder.
+Deprecated: use TasksRequestCPU instead with task name `builder`.
|`limitCPU` +
string
@@ -5814,6 +5816,7 @@ string
When using `pod` strategy, the maximum amount of CPU required by the pod builder.
+Deprecated: use TasksRequestCPU instead with task name `builder`.
|`limitMemory` +
string
@@ -5821,6 +5824,7 @@ string
When using `pod` strategy, the maximum amount of memory required by the pod builder.
+Deprecated: use TasksRequestCPU instead with task name `builder`.
|`mavenProfiles` +
[]string
@@ -5836,7 +5840,35 @@ Syntax: [configmap{vbar}secret]:name[/key], where name represents the resource n
|
-A list of tasks to be executed (available only when using `pod` strategy) with format <name>;<container-image>;<container-command>
+A list of tasks to be executed (available only when using `pod` strategy) with format `<name>;<container-image>;<container-command>`.
+
+|`tasksRequestCPU` +
+[]string
+|
+
+
+A list of request cpu configuration for the specific task with format `<task-name>:<request-cpu-conf>`.
+
+|`tasksRequestMemory` +
+[]string
+|
+
+
+A list of request memory configuration for the specific task with format `<task-name>:<request-memory-conf>`.
+
+|`tasksLimitCPU` +
+[]string
+|
+
+
+A list of limit cpu configuration for the specific task with format `<task-name>:<limit-cpu-conf>`.
+
+|`tasksLimitMemory` +
+[]string
+|
+
+
+A list of limit memory configuration for the specific task with format `<task-name>:<limit-memory-conf>`.
|===
diff --git a/docs/modules/traits/pages/builder.adoc b/docs/modules/traits/pages/builder.adoc
index 891bd196d..e990024ab 100755
--- a/docs/modules/traits/pages/builder.adoc
+++ b/docs/modules/traits/pages/builder.adoc
@@ -47,18 +47,22 @@ The following configuration options are available:
| builder.request-cpu
| string
| When using `pod` strategy, the minimum amount of CPU required by the pod builder.
+Deprecated: use TasksRequestCPU instead with task name `builder`.
| builder.request-memory
| string
| When using `pod` strategy, the minimum amount of memory required by the pod builder.
+Deprecated: use TasksRequestCPU instead with task name `builder`.
| builder.limit-cpu
| string
| When using `pod` strategy, the maximum amount of CPU required by the pod builder.
+Deprecated: use TasksRequestCPU instead with task name `builder`.
| builder.limit-memory
| string
| When using `pod` strategy, the maximum amount of memory required by the pod builder.
+Deprecated: use TasksRequestCPU instead with task name `builder`.
| builder.maven-profiles
| []string
@@ -68,7 +72,23 @@ Syntax: [configmap\|secret]:name[/key], where name represents the resource name,
| builder.tasks
| []string
-| A list of tasks to be executed (available only when using `pod` strategy) with format <name>;<container-image>;<container-command>
+| A list of tasks to be executed (available only when using `pod` strategy) with format `<name>;<container-image>;<container-command>`.
+
+| builder.tasks-request-cpu
+| []string
+| A list of request cpu configuration for the specific task with format `<task-name>:<request-cpu-conf>`.
+
+| builder.tasks-request-memory
+| []string
+| A list of request memory configuration for the specific task with format `<task-name>:<request-memory-conf>`.
+
+| builder.tasks-limit-cpu
+| []string
+| A list of limit cpu configuration for the specific task with format `<task-name>:<limit-cpu-conf>`.
+
+| builder.tasks-limit-memory
+| []string
+| A list of limit memory configuration for the specific task with format `<task-name>:<limit-memory-conf>`.
|===
diff --git a/helm/camel-k/crds/crd-build.yaml b/helm/camel-k/crds/crd-build.yaml
index 0ff027d69..08a6cc213 100644
--- a/helm/camel-k/crds/crd-build.yaml
+++ b/helm/camel-k/crds/crd-build.yaml
@@ -148,6 +148,49 @@ spec:
baseImage:
description: base image layer
type: string
+ configuration:
+ description: The configuration that should be used to perform
+ the Build.
+ properties:
+ limitCPU:
+ description: The maximum amount of CPU required. Only
+ used for `pod` strategy
+ type: string
+ limitMemory:
+ description: The maximum amount of memory required.
+ Only used for `pod` strategy
+ type: string
+ operatorNamespace:
+ description: The namespace where to run the builder
+ Pod (must be the same of the operator in charge of
+ this Build reconciliation).
+ type: string
+ orderStrategy:
+ description: the build order strategy to adopt
+ enum:
+ - dependencies
+ - fifo
+ - sequential
+ type: string
+ requestCPU:
+ description: The minimum amount of CPU required. Only
+ used for `pod` strategy
+ type: string
+ requestMemory:
+ description: The minimum amount of memory required.
+ Only used for `pod` strategy
+ type: string
+ strategy:
+ description: the strategy to adopt
+ enum:
+ - routine
+ - pod
+ type: string
+ toolImage:
+ description: The container image to be used to run the
+ build.
+ type: string
+ type: object
contextDir:
description: can be useful to share info with other tasks
type: string
@@ -698,6 +741,49 @@ spec:
items:
type: string
type: array
+ configuration:
+ description: The configuration that should be used to perform
+ the Build.
+ properties:
+ limitCPU:
+ description: The maximum amount of CPU required. Only
+ used for `pod` strategy
+ type: string
+ limitMemory:
+ description: The maximum amount of memory required.
+ Only used for `pod` strategy
+ type: string
+ operatorNamespace:
+ description: The namespace where to run the builder
+ Pod (must be the same of the operator in charge of
+ this Build reconciliation).
+ type: string
+ orderStrategy:
+ description: the build order strategy to adopt
+ enum:
+ - dependencies
+ - fifo
+ - sequential
+ type: string
+ requestCPU:
+ description: The minimum amount of CPU required. Only
+ used for `pod` strategy
+ type: string
+ requestMemory:
+ description: The minimum amount of memory required.
+ Only used for `pod` strategy
+ type: string
+ strategy:
+ description: the strategy to adopt
+ enum:
+ - routine
+ - pod
+ type: string
+ toolImage:
+ description: The container image to be used to run the
+ build.
+ type: string
+ type: object
image:
description: the container image to use
type: string
@@ -711,6 +797,49 @@ spec:
baseImage:
description: base image layer
type: string
+ configuration:
+ description: The configuration that should be used to perform
+ the Build.
+ properties:
+ limitCPU:
+ description: The maximum amount of CPU required. Only
+ used for `pod` strategy
+ type: string
+ limitMemory:
+ description: The maximum amount of memory required.
+ Only used for `pod` strategy
+ type: string
+ operatorNamespace:
+ description: The namespace where to run the builder
+ Pod (must be the same of the operator in charge of
+ this Build reconciliation).
+ type: string
+ orderStrategy:
+ description: the build order strategy to adopt
+ enum:
+ - dependencies
+ - fifo
+ - sequential
+ type: string
+ requestCPU:
+ description: The minimum amount of CPU required. Only
+ used for `pod` strategy
+ type: string
+ requestMemory:
+ description: The minimum amount of memory required.
+ Only used for `pod` strategy
+ type: string
+ strategy:
+ description: the strategy to adopt
+ enum:
+ - routine
+ - pod
+ type: string
+ toolImage:
+ description: The container image to be used to run the
+ build.
+ type: string
+ type: object
contextDir:
description: can be useful to share info with other tasks
type: string
@@ -759,6 +888,49 @@ spec:
description: the PVC used to store the cache
type: string
type: object
+ configuration:
+ description: The configuration that should be used to perform
+ the Build.
+ properties:
+ limitCPU:
+ description: The maximum amount of CPU required. Only
+ used for `pod` strategy
+ type: string
+ limitMemory:
+ description: The maximum amount of memory required.
+ Only used for `pod` strategy
+ type: string
+ operatorNamespace:
+ description: The namespace where to run the builder
+ Pod (must be the same of the operator in charge of
+ this Build reconciliation).
+ type: string
+ orderStrategy:
+ description: the build order strategy to adopt
+ enum:
+ - dependencies
+ - fifo
+ - sequential
+ type: string
+ requestCPU:
+ description: The minimum amount of CPU required. Only
+ used for `pod` strategy
+ type: string
+ requestMemory:
+ description: The minimum amount of memory required.
+ Only used for `pod` strategy
+ type: string
+ strategy:
+ description: the strategy to adopt
+ enum:
+ - routine
+ - pod
+ type: string
+ toolImage:
+ description: The container image to be used to run the
+ build.
+ type: string
+ type: object
contextDir:
description: can be useful to share info with other tasks
type: string
@@ -1298,6 +1470,49 @@ spec:
s2i:
description: a S2iTask, for S2I strategy
properties:
+ configuration:
+ description: The configuration that should be used to perform
+ the Build.
+ properties:
+ limitCPU:
+ description: The maximum amount of CPU required. Only
+ used for `pod` strategy
+ type: string
+ limitMemory:
+ description: The maximum amount of memory required.
+ Only used for `pod` strategy
+ type: string
+ operatorNamespace:
+ description: The namespace where to run the builder
+ Pod (must be the same of the operator in charge of
+ this Build reconciliation).
+ type: string
+ orderStrategy:
+ description: the build order strategy to adopt
+ enum:
+ - dependencies
+ - fifo
+ - sequential
+ type: string
+ requestCPU:
+ description: The minimum amount of CPU required. Only
+ used for `pod` strategy
+ type: string
+ requestMemory:
+ description: The minimum amount of memory required.
+ Only used for `pod` strategy
+ type: string
+ strategy:
+ description: the strategy to adopt
+ enum:
+ - routine
+ - pod
+ type: string
+ toolImage:
+ description: The container image to be used to run the
+ build.
+ type: string
+ type: object
contextDir:
description: can be useful to share info with other tasks
type: string
@@ -1314,6 +1529,49 @@ spec:
baseImage:
description: base image layer
type: string
+ configuration:
+ description: The configuration that should be used to perform
+ the Build.
+ properties:
+ limitCPU:
+ description: The maximum amount of CPU required. Only
+ used for `pod` strategy
+ type: string
+ limitMemory:
+ description: The maximum amount of memory required.
+ Only used for `pod` strategy
+ type: string
+ operatorNamespace:
+ description: The namespace where to run the builder
+ Pod (must be the same of the operator in charge of
+ this Build reconciliation).
+ type: string
+ orderStrategy:
+ description: the build order strategy to adopt
+ enum:
+ - dependencies
+ - fifo
+ - sequential
+ type: string
+ requestCPU:
+ description: The minimum amount of CPU required. Only
+ used for `pod` strategy
+ type: string
+ requestMemory:
+ description: The minimum amount of memory required.
+ Only used for `pod` strategy
+ type: string
+ strategy:
+ description: the strategy to adopt
+ enum:
+ - routine
+ - pod
+ type: string
+ toolImage:
+ description: The container image to be used to run the
+ build.
+ type: string
+ type: object
contextDir:
description: can be useful to share info with other tasks
type: string
diff --git a/helm/camel-k/crds/crd-integration-kit.yaml b/helm/camel-k/crds/crd-integration-kit.yaml
index ea68807a3..359ef577c 100644
--- a/helm/camel-k/crds/crd-integration-kit.yaml
+++ b/helm/camel-k/crds/crd-integration-kit.yaml
@@ -204,12 +204,14 @@ spec:
traits share this common property.
type: boolean
limitCPU:
- description: When using `pod` strategy, the maximum amount
- of CPU required by the pod builder.
+ 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.
+ 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
@@ -234,12 +236,14 @@ spec:
type: string
type: array
requestCPU:
- description: When using `pod` strategy, the minimum amount
- of CPU required by the pod builder.
+ 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.
+ 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`
@@ -247,7 +251,31 @@ spec:
type: string
tasks:
description: A list of tasks to be executed (available only
- when using `pod` strategy) with format <name>;<container-image>;<container-command>
+ when using `pod` strategy) with format `<name>;<container-image>;<container-command>`.
+ items:
+ type: string
+ type: array
+ 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
diff --git a/helm/camel-k/crds/crd-integration-platform.yaml b/helm/camel-k/crds/crd-integration-platform.yaml
index a37e7c91d..5d3de2436 100644
--- a/helm/camel-k/crds/crd-integration-platform.yaml
+++ b/helm/camel-k/crds/crd-integration-platform.yaml
@@ -507,12 +507,14 @@ spec:
traits share this common property.
type: boolean
limitCPU:
- description: When using `pod` strategy, the maximum amount
- of CPU required by the pod builder.
+ 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.
+ 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
@@ -537,12 +539,14 @@ spec:
type: string
type: array
requestCPU:
- description: When using `pod` strategy, the minimum amount
- of CPU required by the pod builder.
+ 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.
+ 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`
@@ -550,7 +554,31 @@ spec:
type: string
tasks:
description: A list of tasks to be executed (available only
- when using `pod` strategy) with format <name>;<container-image>;<container-command>
+ when using `pod` strategy) with format `<name>;<container-image>;<container-command>`.
+ items:
+ type: string
+ type: array
+ 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
@@ -2281,12 +2309,14 @@ spec:
traits share this common property.
type: boolean
limitCPU:
- description: When using `pod` strategy, the maximum amount
- of CPU required by the pod builder.
+ 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.
+ 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
@@ -2311,12 +2341,14 @@ spec:
type: string
type: array
requestCPU:
- description: When using `pod` strategy, the minimum amount
- of CPU required by the pod builder.
+ 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.
+ 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`
@@ -2324,7 +2356,31 @@ spec:
type: string
tasks:
description: A list of tasks to be executed (available only
- when using `pod` strategy) with format <name>;<container-image>;<container-command>
+ when using `pod` strategy) with format `<name>;<container-image>;<container-command>`.
+ items:
+ type: string
+ type: array
+ 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
diff --git a/helm/camel-k/crds/crd-integration.yaml b/helm/camel-k/crds/crd-integration.yaml
index 042186be4..f7fefbc25 100644
--- a/helm/camel-k/crds/crd-integration.yaml
+++ b/helm/camel-k/crds/crd-integration.yaml
@@ -6424,12 +6424,14 @@ spec:
traits share this common property.
type: boolean
limitCPU:
- description: When using `pod` strategy, the maximum amount
- of CPU required by the pod builder.
+ 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.
+ 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
@@ -6454,12 +6456,14 @@ spec:
type: string
type: array
requestCPU:
- description: When using `pod` strategy, the minimum amount
- of CPU required by the pod builder.
+ 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.
+ 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`
@@ -6467,7 +6471,31 @@ spec:
type: string
tasks:
description: A list of tasks to be executed (available only
- when using `pod` strategy) with format <name>;<container-image>;<container-command>
+ when using `pod` strategy) with format `<name>;<container-image>;<container-command>`.
+ items:
+ type: string
+ type: array
+ 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
diff --git a/helm/camel-k/crds/crd-kamelet-binding.yaml b/helm/camel-k/crds/crd-kamelet-binding.yaml
index 1181e466b..69d9aee3d 100644
--- a/helm/camel-k/crds/crd-kamelet-binding.yaml
+++ b/helm/camel-k/crds/crd-kamelet-binding.yaml
@@ -6706,12 +6706,14 @@ spec:
All traits share this common property.
type: boolean
limitCPU:
- description: When using `pod` strategy, the maximum amount
- of CPU required by the pod builder.
+ 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.
+ 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
@@ -6737,12 +6739,14 @@ spec:
type: string
type: array
requestCPU:
- description: When using `pod` strategy, the minimum amount
- of CPU required by the pod builder.
+ 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.
+ 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`
@@ -6750,7 +6754,31 @@ spec:
type: string
tasks:
description: A list of tasks to be executed (available
- only when using `pod` strategy) with format <name>;<container-image>;<container-command>
+ only when using `pod` strategy) with format `<name>;<container-image>;<container-command>`.
+ items:
+ type: string
+ type: array
+ 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
diff --git a/helm/camel-k/crds/crd-pipe.yaml b/helm/camel-k/crds/crd-pipe.yaml
index d6b5e1269..23a287c66 100644
--- a/helm/camel-k/crds/crd-pipe.yaml
+++ b/helm/camel-k/crds/crd-pipe.yaml
@@ -6703,12 +6703,14 @@ spec:
All traits share this common property.
type: boolean
limitCPU:
- description: When using `pod` strategy, the maximum amount
- of CPU required by the pod builder.
+ 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.
+ 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
@@ -6734,12 +6736,14 @@ spec:
type: string
type: array
requestCPU:
- description: When using `pod` strategy, the minimum amount
- of CPU required by the pod builder.
+ 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.
+ 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`
@@ -6747,7 +6751,31 @@ spec:
type: string
tasks:
description: A list of tasks to be executed (available
- only when using `pod` strategy) with format <name>;<container-image>;<container-command>
+ only when using `pod` strategy) with format `<name>;<container-image>;<container-command>`.
+ items:
+ type: string
+ type: array
+ 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
diff --git a/pkg/apis/camel/v1/build_types.go b/pkg/apis/camel/v1/build_types.go
index 581ec47dd..c78a1d732 100644
--- a/pkg/apis/camel/v1/build_types.go
+++ b/pkg/apis/camel/v1/build_types.go
@@ -84,13 +84,13 @@ type Task struct {
type BaseTask struct {
// name of the task
Name string `json:"name,omitempty"`
+ // The configuration that should be used to perform the Build.
+ Configuration BuildConfiguration `json:"configuration,omitempty"`
}
// BuilderTask is the generic task in charge of building the application image.
type BuilderTask struct {
BaseTask `json:",inline"`
- // The configuration that should be used to perform the Build.
- Configuration BuildConfiguration `json:"configuration,omitempty"`
// the base image layer
BaseImage string `json:"baseImage,omitempty"`
// the configuration required for the runtime application
diff --git a/pkg/apis/camel/v1/build_types_support.go b/pkg/apis/camel/v1/build_types_support.go
index 396997fa1..a9777b65f 100644
--- a/pkg/apis/camel/v1/build_types_support.go
+++ b/pkg/apis/camel/v1/build_types_support.go
@@ -56,8 +56,12 @@ func (build *Build) BuilderPodNamespace() string {
// BuilderConfiguration returns the builder configuration for this Build.
func (build *Build) BuilderConfiguration() *BuildConfiguration {
- return BuilderConfigurationTasks(build.Spec.Tasks)
+ return build.TaskConfiguration("builder")
+}
+// TaskConfiguration returns the task configuration of this Build.
+func (build *Build) TaskConfiguration(name string) *BuildConfiguration {
+ return ConfigurationTasksByName(build.Spec.Tasks, name)
}
// BuilderDependencies returns the list of dependencies configured on by the builder task for this Build.
@@ -79,12 +83,33 @@ func FindBuilderTask(tasks []Task) (*BuilderTask, bool) {
return nil, false
}
-// BuilderConfigurationTasks returns the builder configuration from the task list.
-func BuilderConfigurationTasks(tasks []Task) *BuildConfiguration {
+// ConfigurationTasksByName returns the container configuration from the task list.
+func ConfigurationTasksByName(tasks []Task, name string) *BuildConfiguration {
for _, t := range tasks {
- if t.Builder != nil {
+ if t.Builder != nil && t.Builder.Name == name {
return &t.Builder.Configuration
}
+ if t.Custom != nil && t.Custom.Name == name {
+ return &t.Custom.Configuration
+ }
+ if t.Package != nil && t.Package.Name == name {
+ return &t.Package.Configuration
+ }
+ if t.Spectrum != nil && t.Spectrum.Name == name {
+ return &t.Spectrum.Configuration
+ }
+ if t.S2i != nil && t.S2i.Name == name {
+ return &t.S2i.Configuration
+ }
+ if t.Jib != nil && t.Jib.Name == name {
+ return &t.Jib.Configuration
+ }
+ if t.Buildah != nil && t.Buildah.Name == name {
+ return &t.Buildah.Configuration
+ }
+ if t.Kaniko != nil && t.Kaniko.Name == name {
+ return &t.Kaniko.Configuration
+ }
}
return &BuildConfiguration{}
}
diff --git a/pkg/apis/camel/v1/trait/builder.go b/pkg/apis/camel/v1/trait/builder.go
index 166975c3b..38d4b0729 100644
--- a/pkg/apis/camel/v1/trait/builder.go
+++ b/pkg/apis/camel/v1/trait/builder.go
@@ -32,17 +32,29 @@ type BuilderTrait struct {
// The build order strategy to use, either `dependencies`, `fifo` or `sequential` (default sequential)
OrderStrategy string `property:"order-strategy" json:"orderStrategy,omitempty"`
// When using `pod` strategy, the minimum amount of CPU required by the pod builder.
+ // Deprecated: use TasksRequestCPU instead with task name `builder`.
RequestCPU string `property:"request-cpu" json:"requestCPU,omitempty"`
// When using `pod` strategy, the minimum amount of memory required by the pod builder.
+ // Deprecated: use TasksRequestCPU instead with task name `builder`.
RequestMemory string `property:"request-memory" json:"requestMemory,omitempty"`
// When using `pod` strategy, the maximum amount of CPU required by the pod builder.
+ // Deprecated: use TasksRequestCPU instead with task name `builder`.
LimitCPU string `property:"limit-cpu" json:"limitCPU,omitempty"`
// When using `pod` strategy, the maximum amount of memory required by the pod builder.
+ // Deprecated: use TasksRequestCPU instead with task name `builder`.
LimitMemory string `property:"limit-memory" json:"limitMemory,omitempty"`
// A list of references pointing to configmaps/secrets that contains a maven profile.
// 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).
MavenProfiles []string `property:"maven-profiles" json:"mavenProfiles,omitempty"`
- // A list of tasks to be executed (available only when using `pod` strategy) with format <name>;<container-image>;<container-command>
+ // A list of tasks to be executed (available only when using `pod` strategy) with format `<name>;<container-image>;<container-command>`.
Tasks []string `property:"tasks" json:"tasks,omitempty"`
+ // A list of request cpu configuration for the specific task with format `<task-name>:<request-cpu-conf>`.
+ TasksRequestCPU []string `property:"tasks-request-cpu" json:"tasksRequestCPU,omitempty"`
+ // A list of request memory configuration for the specific task with format `<task-name>:<request-memory-conf>`.
+ TasksRequestMemory []string `property:"tasks-request-memory" json:"tasksRequestMemory,omitempty"`
+ // A list of limit cpu configuration for the specific task with format `<task-name>:<limit-cpu-conf>`.
+ TasksLimitCPU []string `property:"tasks-limit-cpu" json:"tasksLimitCPU,omitempty"`
+ // A list of limit memory configuration for the specific task with format `<task-name>:<limit-memory-conf>`.
+ TasksLimitMemory []string `property:"tasks-limit-memory" json:"tasksLimitMemory,omitempty"`
}
diff --git a/pkg/apis/camel/v1/trait/zz_generated.deepcopy.go b/pkg/apis/camel/v1/trait/zz_generated.deepcopy.go
index 505fbfd0a..471156af8 100644
--- a/pkg/apis/camel/v1/trait/zz_generated.deepcopy.go
+++ b/pkg/apis/camel/v1/trait/zz_generated.deepcopy.go
@@ -74,6 +74,26 @@ func (in *BuilderTrait) DeepCopyInto(out *BuilderTrait) {
*out = make([]string, len(*in))
copy(*out, *in)
}
+ if in.TasksRequestCPU != nil {
+ in, out := &in.TasksRequestCPU, &out.TasksRequestCPU
+ *out = make([]string, len(*in))
+ copy(*out, *in)
+ }
+ if in.TasksRequestMemory != nil {
+ in, out := &in.TasksRequestMemory, &out.TasksRequestMemory
+ *out = make([]string, len(*in))
+ copy(*out, *in)
+ }
+ if in.TasksLimitCPU != nil {
+ in, out := &in.TasksLimitCPU, &out.TasksLimitCPU
+ *out = make([]string, len(*in))
+ copy(*out, *in)
+ }
+ if in.TasksLimitMemory != nil {
+ in, out := &in.TasksLimitMemory, &out.TasksLimitMemory
+ *out = make([]string, len(*in))
+ copy(*out, *in)
+ }
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BuilderTrait.
diff --git a/pkg/apis/camel/v1/zz_generated.deepcopy.go b/pkg/apis/camel/v1/zz_generated.deepcopy.go
index b77a301d9..34a3fb6c8 100644
--- a/pkg/apis/camel/v1/zz_generated.deepcopy.go
+++ b/pkg/apis/camel/v1/zz_generated.deepcopy.go
@@ -66,6 +66,7 @@ func (in *Artifact) DeepCopy() *Artifact {
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *BaseTask) DeepCopyInto(out *BaseTask) {
*out = *in
+ out.Configuration = in.Configuration
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BaseTask.
@@ -275,7 +276,6 @@ func (in *BuildahTask) DeepCopy() *BuildahTask {
func (in *BuilderTask) DeepCopyInto(out *BuilderTask) {
*out = *in
out.BaseTask = in.BaseTask
- out.Configuration = in.Configuration
in.Runtime.DeepCopyInto(&out.Runtime)
if in.Dependencies != nil {
in, out := &in.Dependencies, &out.Dependencies
diff --git a/pkg/client/camel/applyconfiguration/camel/v1/basetask.go b/pkg/client/camel/applyconfiguration/camel/v1/basetask.go
index 72bc6c228..575fb3cc3 100644
--- a/pkg/client/camel/applyconfiguration/camel/v1/basetask.go
+++ b/pkg/client/camel/applyconfiguration/camel/v1/basetask.go
@@ -22,7 +22,8 @@ package v1
// BaseTaskApplyConfiguration represents an declarative configuration of the BaseTask type for use
// with apply.
type BaseTaskApplyConfiguration struct {
- Name *string `json:"name,omitempty"`
+ Name *string `json:"name,omitempty"`
+ Configuration *BuildConfigurationApplyConfiguration `json:"configuration,omitempty"`
}
// BaseTaskApplyConfiguration constructs an declarative configuration of the BaseTask type for use with
@@ -38,3 +39,11 @@ func (b *BaseTaskApplyConfiguration) WithName(value string) *BaseTaskApplyConfig
b.Name = &value
return b
}
+
+// WithConfiguration sets the Configuration 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 Configuration field is set to the value of the last call.
+func (b *BaseTaskApplyConfiguration) WithConfiguration(value *BuildConfigurationApplyConfiguration) *BaseTaskApplyConfiguration {
+ b.Configuration = value
+ return b
+}
diff --git a/pkg/client/camel/applyconfiguration/camel/v1/buildahtask.go b/pkg/client/camel/applyconfiguration/camel/v1/buildahtask.go
index 3c34e512b..eb5c5b10e 100644
--- a/pkg/client/camel/applyconfiguration/camel/v1/buildahtask.go
+++ b/pkg/client/camel/applyconfiguration/camel/v1/buildahtask.go
@@ -43,6 +43,14 @@ func (b *BuildahTaskApplyConfiguration) WithName(value string) *BuildahTaskApply
return b
}
+// WithConfiguration sets the Configuration 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 Configuration field is set to the value of the last call.
+func (b *BuildahTaskApplyConfiguration) WithConfiguration(value *BuildConfigurationApplyConfiguration) *BuildahTaskApplyConfiguration {
+ b.Configuration = value
+ return b
+}
+
// WithContextDir sets the ContextDir 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 ContextDir field is set to the value of the last call.
diff --git a/pkg/client/camel/applyconfiguration/camel/v1/buildertask.go b/pkg/client/camel/applyconfiguration/camel/v1/buildertask.go
index 8198337eb..e7a0dc9af 100644
--- a/pkg/client/camel/applyconfiguration/camel/v1/buildertask.go
+++ b/pkg/client/camel/applyconfiguration/camel/v1/buildertask.go
@@ -23,14 +23,13 @@ package v1
// with apply.
type BuilderTaskApplyConfiguration struct {
BaseTaskApplyConfiguration `json:",inline"`
- Configuration *BuildConfigurationApplyConfiguration `json:"configuration,omitempty"`
- BaseImage *string `json:"baseImage,omitempty"`
- Runtime *RuntimeSpecApplyConfiguration `json:"runtime,omitempty"`
- Dependencies []string `json:"dependencies,omitempty"`
- Steps []string `json:"steps,omitempty"`
- Maven *MavenBuildSpecApplyConfiguration `json:"maven,omitempty"`
- BuildDir *string `json:"buildDir,omitempty"`
- Sources []SourceSpecApplyConfiguration `json:"sources,omitempty"`
+ BaseImage *string `json:"baseImage,omitempty"`
+ Runtime *RuntimeSpecApplyConfiguration `json:"runtime,omitempty"`
+ Dependencies []string `json:"dependencies,omitempty"`
+ Steps []string `json:"steps,omitempty"`
+ Maven *MavenBuildSpecApplyConfiguration `json:"maven,omitempty"`
+ BuildDir *string `json:"buildDir,omitempty"`
+ Sources []SourceSpecApplyConfiguration `json:"sources,omitempty"`
}
// BuilderTaskApplyConfiguration constructs an declarative configuration of the BuilderTask type for use with
diff --git a/pkg/client/camel/applyconfiguration/camel/v1/jibtask.go b/pkg/client/camel/applyconfiguration/camel/v1/jibtask.go
index 1e87d4281..c9d98ecfc 100644
--- a/pkg/client/camel/applyconfiguration/camel/v1/jibtask.go
+++ b/pkg/client/camel/applyconfiguration/camel/v1/jibtask.go
@@ -40,6 +40,14 @@ func (b *JibTaskApplyConfiguration) WithName(value string) *JibTaskApplyConfigur
return b
}
+// WithConfiguration sets the Configuration 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 Configuration field is set to the value of the last call.
+func (b *JibTaskApplyConfiguration) WithConfiguration(value *BuildConfigurationApplyConfiguration) *JibTaskApplyConfiguration {
+ b.Configuration = value
+ return b
+}
+
// WithContextDir sets the ContextDir 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 ContextDir field is set to the value of the last call.
diff --git a/pkg/client/camel/applyconfiguration/camel/v1/kanikotask.go b/pkg/client/camel/applyconfiguration/camel/v1/kanikotask.go
index 1b0a1e12c..67aeea0c3 100644
--- a/pkg/client/camel/applyconfiguration/camel/v1/kanikotask.go
+++ b/pkg/client/camel/applyconfiguration/camel/v1/kanikotask.go
@@ -43,6 +43,14 @@ func (b *KanikoTaskApplyConfiguration) WithName(value string) *KanikoTaskApplyCo
return b
}
+// WithConfiguration sets the Configuration 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 Configuration field is set to the value of the last call.
+func (b *KanikoTaskApplyConfiguration) WithConfiguration(value *BuildConfigurationApplyConfiguration) *KanikoTaskApplyConfiguration {
+ b.Configuration = value
+ return b
+}
+
// WithContextDir sets the ContextDir 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 ContextDir field is set to the value of the last call.
diff --git a/pkg/client/camel/applyconfiguration/camel/v1/s2itask.go b/pkg/client/camel/applyconfiguration/camel/v1/s2itask.go
index 232e2355e..da1a36d56 100644
--- a/pkg/client/camel/applyconfiguration/camel/v1/s2itask.go
+++ b/pkg/client/camel/applyconfiguration/camel/v1/s2itask.go
@@ -41,6 +41,14 @@ func (b *S2iTaskApplyConfiguration) WithName(value string) *S2iTaskApplyConfigur
return b
}
+// WithConfiguration sets the Configuration 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 Configuration field is set to the value of the last call.
+func (b *S2iTaskApplyConfiguration) WithConfiguration(value *BuildConfigurationApplyConfiguration) *S2iTaskApplyConfiguration {
+ b.Configuration = value
+ return b
+}
+
// WithContextDir sets the ContextDir 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 ContextDir field is set to the value of the last call.
diff --git a/pkg/client/camel/applyconfiguration/camel/v1/spectrumtask.go b/pkg/client/camel/applyconfiguration/camel/v1/spectrumtask.go
index c70d4d629..6ba50a2ae 100644
--- a/pkg/client/camel/applyconfiguration/camel/v1/spectrumtask.go
+++ b/pkg/client/camel/applyconfiguration/camel/v1/spectrumtask.go
@@ -40,6 +40,14 @@ func (b *SpectrumTaskApplyConfiguration) WithName(value string) *SpectrumTaskApp
return b
}
+// WithConfiguration sets the Configuration 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 Configuration field is set to the value of the last call.
+func (b *SpectrumTaskApplyConfiguration) WithConfiguration(value *BuildConfigurationApplyConfiguration) *SpectrumTaskApplyConfiguration {
+ b.Configuration = value
+ return b
+}
+
// WithContextDir sets the ContextDir 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 ContextDir field is set to the value of the last call.
diff --git a/pkg/client/camel/applyconfiguration/camel/v1/usertask.go b/pkg/client/camel/applyconfiguration/camel/v1/usertask.go
index 65b7c5c2a..f4fc11c89 100644
--- a/pkg/client/camel/applyconfiguration/camel/v1/usertask.go
+++ b/pkg/client/camel/applyconfiguration/camel/v1/usertask.go
@@ -42,6 +42,14 @@ func (b *UserTaskApplyConfiguration) WithName(value string) *UserTaskApplyConfig
return b
}
+// WithConfiguration sets the Configuration 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 Configuration field is set to the value of the last call.
+func (b *UserTaskApplyConfiguration) WithConfiguration(value *BuildConfigurationApplyConfiguration) *UserTaskApplyConfiguration {
+ b.Configuration = value
+ return b
+}
+
// WithContainerImage sets the ContainerImage 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 ContainerImage field is set to the value of the last call.
diff --git a/pkg/controller/build/build_monitor_test.go b/pkg/controller/build/build_monitor_test.go
index 1cde7301e..7a0dbec57 100644
--- a/pkg/controller/build/build_monitor_test.go
+++ b/pkg/controller/build/build_monitor_test.go
@@ -606,11 +606,13 @@ func newBuildWithLayoutInPhase(namespace string, name string, layout string, pha
Tasks: []v1.Task{
{
Builder: &v1.BuilderTask{
- Configuration: v1.BuildConfiguration{
- Strategy: v1.BuildStrategyRoutine,
- OrderStrategy: v1.BuildOrderStrategySequential,
- ToolImage: "camel:latest",
- BuilderPodNamespace: "ns",
+ BaseTask: v1.BaseTask{
+ Configuration: v1.BuildConfiguration{
+ Strategy: v1.BuildStrategyRoutine,
+ OrderStrategy: v1.BuildOrderStrategySequential,
+ ToolImage: "camel:latest",
+ BuilderPodNamespace: "ns",
+ },
},
Dependencies: dependencies,
},
diff --git a/pkg/controller/build/build_pod.go b/pkg/controller/build/build_pod.go
index 27ccd0f68..1051b974b 100644
--- a/pkg/controller/build/build_pod.go
+++ b/pkg/controller/build/build_pod.go
@@ -191,8 +191,8 @@ func newBuildPod(ctx context.Context, c ctrl.Reader, client client.Client, build
return pod, nil
}
-func configureResources(build *v1.Build, container *corev1.Container) {
- conf := *build.BuilderConfiguration()
+func configureResources(taskName string, build *v1.Build, container *corev1.Container) {
+ conf := build.TaskConfiguration(taskName)
requestsList := container.Resources.Requests
limitsList := container.Resources.Limits
var err error
@@ -312,7 +312,7 @@ func addBuildTaskToPod(ctx context.Context, client client.Client, build *v1.Buil
}
}
- configureResources(build, &container)
+ configureResources(taskName, build, &container)
addContainerToPod(build, container, pod)
}
@@ -427,6 +427,7 @@ func addBuildahTaskToPod(ctx context.Context, c ctrl.Reader, build *v1.Build, ta
pod.Spec.Volumes = append(pod.Spec.Volumes, volumes...)
+ configureResources(task.Name, build, &container)
addContainerToPod(build, container, pod)
return nil
@@ -555,6 +556,7 @@ func addKanikoTaskToPod(ctx context.Context, c ctrl.Reader, build *v1.Build, tas
FSGroup: &ugfid,
}
+ configureResources(task.Name, build, &container)
addContainerToPod(build, container, pod)
return nil
@@ -570,6 +572,7 @@ func addCustomTaskToPod(build *v1.Build, task *v1.UserTask, pod *corev1.Pod) {
Env: proxyFromEnvironment(),
}
+ configureResources(task.Name, build, &container)
addContainerToPod(build, container, pod)
}
diff --git a/pkg/controller/integrationkit/build.go b/pkg/controller/integrationkit/build.go
index faa32c72d..a60ccc6c7 100644
--- a/pkg/controller/integrationkit/build.go
+++ b/pkg/controller/integrationkit/build.go
@@ -109,7 +109,7 @@ func (action *buildAction) handleBuildSubmitted(ctx context.Context, kit *v1.Int
// We may need to change certain builder configuration values
operatorNamespace := platform.GetOperatorNamespace()
- buildConfig := v1.BuilderConfigurationTasks(env.Pipeline)
+ buildConfig := v1.ConfigurationTasksByName(env.Pipeline, "builder")
if buildConfig.IsEmpty() {
// default to IntegrationPlatform configuration
buildConfig = &env.Platform.Status.Build.BuildConfiguration
diff --git a/pkg/resources/resources.go b/pkg/resources/resources.go
index fb3c4547b..23f91a87f 100644
--- a/pkg/resources/resources.go
+++ b/pkg/resources/resources.go
@@ -117,9 +117,9 @@ var assets = func() http.FileSystem {
"/crd/bases/camel.apache.org_builds.yaml": &vfsgen۰CompressedFileInfo{
name: "camel.apache.org_builds.yaml",
modTime: time.Time{},
- uncompressedSize: 78450,
+ uncompressedSize: 91926,
- compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7d\x6d\x73\x1b\x37\x92\xf0\x77\xfd\x8a\xae\xf8\x43\xe4\x2a\x91\x4a\x9c\xec\x5e\x4e\x4f\x5d\x3d\xa5\x95\x93\x3d\xad\x1d\xdb\x67\x2a\xde\xdd\xba\xba\x2a\x81\x33\x4d\x12\xe1\x0c\x30\x07\x60\x24\x33\x4f\x3d\xff\xfd\x0a\x6f\xf3\x42\xce\x0b\x40\x91\xb6\xaf\x4c\x7c\x49\x2c\x62\x80\x6e\xa0\xd1\x6f\x68\x74\x3f\x83\xc9\xe1\xda\xd9\x33\x78\x4d\x13\x64\x12\x53\x50\x1c\xd4\x0a\xe1\xba\x20\xc9\x0a\x61\xc6\x17\xea\x91\x08\x84\x [...]
+ compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7d\x6b\x73\x1b\x37\x96\xe8\x77\xfd\x8a\x53\xf1\x07\xcb\x55\x22\x35\xe3\xc9\xce\x66\x75\x6b\xeb\x96\x56\x4e\x66\x35\x4e\x6c\xaf\x29\x7b\x32\xb5\xb5\x55\x02\xbb\x0f\x49\x84\xdd\x40\x5f\x00\x2d\x9a\xb9\x75\xff\xfb\x2d\xbc\xfa\x21\xb2\xbb\x01\x8a\xf4\xa3\xd2\xf8\x92\x58\x44\x03\xe7\xe0\x71\xde\x38\xe7\x19\x4c\x8e\xd7\xce\x9e\xc1\xcf\x34\x41\x26\x31\x05\xc5\x41\xad\x10\xae\x0b\x92\xac\x10\x66\x7c\xa1\x36\x44\x20\xfc\x [...]
},
"/crd/bases/camel.apache.org_camelcatalogs.yaml": &vfsgen۰CompressedFileInfo{
name: "camel.apache.org_camelcatalogs.yaml",
@@ -131,30 +131,30 @@ var assets = func() http.FileSystem {
"/crd/bases/camel.apache.org_integrationkits.yaml": &vfsgen۰CompressedFileInfo{
name: "camel.apache.org_integrationkits.yaml",
modTime: time.Time{},
- uncompressedSize: 21757,
+ uncompressedSize: 23390,
- compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x3c\xdb\x72\xdb\x38\x96\xef\xfa\x8a\x53\xf1\x43\xec\x2a\x89\x9e\xde\xed\xea\xda\xf2\xf4\x74\x95\xc7\x9d\xf4\xb8\xe2\x24\xde\xc8\xe9\xde\xae\xe9\xa9\x12\x44\x1e\x49\x68\x91\x00\x1b\x00\x25\x6b\x2f\xff\xbe\x85\x03\x80\x17\x89\xa4\x68\x39\xde\xd9\x87\xf0\x25\x31\x09\x1c\x9c\xfb\x0d\x80\xce\x60\xf2\xe5\x9e\xd1\x19\xdc\xf1\x18\x85\xc6\x04\x8c\x04\xb3\x42\xb8\xce\x59\xbc\x42\x98\xca\x85\xd9\x32\x85\xf0\x56\x16\x22\x61\x [...]
+ compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x3c\x5d\x73\xdb\x38\x92\xef\xfa\x15\x5d\xf1\x43\xec\x2a\x49\xde\xb9\x9b\x9a\xba\xf2\xce\x4e\x95\xd7\x49\x66\x5d\x71\x12\x9f\xa5\xcc\xdc\xd4\xce\x56\x09\x22\x5b\x12\x46\x24\xc0\x05\x40\xc9\xba\x8f\xff\x7e\x85\x06\xc0\x0f\x89\xa4\x68\x39\xde\x9b\xbd\x8a\x5e\x12\x93\x40\xa3\xd1\xdf\xdd\x40\xf3\x0c\x46\x5f\xee\x37\x38\x83\x3b\x1e\xa1\xd0\x18\x83\x91\x60\x56\x08\xd7\x19\x8b\x56\x08\x13\xb9\x30\x5b\xa6\x10\xde\xc9\x5c\x [...]
},
"/crd/bases/camel.apache.org_integrationplatforms.yaml": &vfsgen۰CompressedFileInfo{
name: "camel.apache.org_integrationplatforms.yaml",
modTime: time.Time{},
- uncompressedSize: 192534,
+ uncompressedSize: 195800,
- compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xbd\x7d\x73\xdb\x36\xb6\x38\xfc\x7f\x3f\x05\xc6\x9d\x3b\x71\x32\x96\x94\xec\xde\xee\xf6\xfa\xde\xde\xe7\xe7\x3a\x69\xeb\x26\x8e\x7d\x6d\x27\xbb\x3b\x6d\xa7\x82\xc8\x23\x09\x35\x09\x70\x01\x50\xb6\x3a\xfb\xe1\x9f\xc1\x01\x40\x52\x12\x09\x52\x2f\xb6\xb3\x8d\x98\x99\xd6\x92\x48\xf0\x1c\xe0\xe0\xbc\xe1\xbc\x7c\x49\x7a\xbb\xbb\xbe\xf8\x92\xbc\x63\x11\x70\x05\x31\xd1\x82\xe8\x29\x90\x93\x8c\x46\x53\x20\xd7\x62\xac\xef\x [...]
+ compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xbd\xfb\x72\xe3\x36\xb2\x38\xfc\x7f\x9e\x02\xe5\xd4\xa9\xf1\x4c\x59\xd2\xcc\xee\xc9\x6e\x8e\xcf\x66\xbf\x9f\xe3\x99\x24\xce\x5c\xec\x63\x7b\x66\x77\x2b\x49\x45\x10\xd9\x92\x10\x93\x00\x17\x00\x65\x2b\xb5\x0f\xff\x15\x1a\x00\x49\x49\x24\x48\x5d\x7c\x49\x22\x4e\x55\x62\x49\x24\xd8\x68\x34\xfa\x86\xbe\x7c\x4e\x7a\xbb\xbb\x3e\xfb\x9c\xbc\x63\x11\x70\x05\x31\xd1\x82\xe8\x29\x90\x93\x8c\x46\x53\x20\x57\x62\xac\x6f\xa9\x [...]
},
"/crd/bases/camel.apache.org_integrations.yaml": &vfsgen۰CompressedFileInfo{
name: "camel.apache.org_integrations.yaml",
modTime: time.Time{},
- uncompressedSize: 514712,
+ uncompressedSize: 516345,
- compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\x7b\x73\x1b\x37\x96\x30\x8c\xff\x9f\x4f\x81\x72\x52\x8f\xa4\x8d\x48\xd9\x99\xd9\xa9\x1d\xff\xa6\x9e\x94\x56\x92\x13\xfd\x62\xcb\x2a\x49\x49\x9e\x94\x93\x4d\xc0\x6e\x90\xc4\xa3\x6e\xa0\x17\x40\x53\xe2\xbc\x79\xbf\xfb\x5b\x38\x00\xfa\xc2\x5b\x1f\xb4\x44\xc7\x99\x6d\x4c\x55\xc6\x14\xd9\xa7\x71\x39\x38\xf7\xcb\xe7\x64\xf4\x7c\xe3\xb3\xcf\xc9\x5b\x9e\x30\xa1\x59\x4a\x8c\x24\x66\xce\xc8\x69\x41\x93\x39\x23\xb7\x72\x [...]
+ compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\x7b\x73\x1b\x37\x96\x30\x8c\xff\x9f\x4f\x81\x72\x52\x8f\xa4\x8d\x48\xd9\x99\xd9\xa9\x1d\xff\xa6\x9e\x94\x56\x92\x13\xfd\x62\xcb\x2a\x49\x49\x9e\x94\x93\x4d\xc0\x6e\x90\xc4\xa3\x6e\xa0\x17\x40\x53\xe2\xbc\x79\xbf\xfb\x5b\x38\x00\xfa\xc2\x5b\x1f\xb4\x44\xc7\x99\x6d\x4c\x55\xc6\x14\xd9\xa7\x71\x39\x38\xf7\xcb\xe7\x64\xf4\x7c\xe3\xb3\xcf\xc9\x5b\x9e\x30\xa1\x59\x4a\x8c\x24\x66\xce\xc8\x69\x41\x93\x39\x23\xb7\x72\x [...]
},
"/crd/bases/camel.apache.org_kameletbindings.yaml": &vfsgen۰CompressedFileInfo{
name: "camel.apache.org_kameletbindings.yaml",
modTime: time.Time{},
- uncompressedSize: 595998,
+ uncompressedSize: 597743,
- compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\x6b\x73\x1b\x37\xb6\x30\x0a\x7f\xf7\xaf\x40\xc9\xa9\x47\xd2\x8e\x48\xd9\x99\x99\xd4\x8c\xdf\xa9\x9d\xd2\xc8\x72\xa2\x37\xb6\xcc\xb2\x94\xe4\x49\x39\xd9\x09\xd8\x0d\x92\xd8\xea\x06\x7a\x00\x34\x25\xe6\xf8\xfc\xf7\x53\x58\x00\xfa\xc2\x9b\xb0\x9a\x92\x46\x9e\x69\x4c\x55\xc6\xa4\xd8\xab\x71\x59\x58\xf7\xcb\x73\x32\xb8\xbf\xf1\xec\x39\x79\xcb\x13\x26\x34\x4b\x89\x91\xc4\xcc\x18\x39\x29\x68\x32\x63\xe4\x52\x4e\xcc\x [...]
+ compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\x6b\x73\x1b\x37\xb6\x30\x0a\x7f\xf7\xaf\x40\xc9\xa9\x47\xd2\x8e\x48\xd9\x99\x99\xd4\x8c\xdf\xa9\x9d\xd2\xc8\x72\xa2\x37\xb6\xcc\xb2\x94\xe4\x49\x39\xd9\x09\xd8\x0d\x92\xd8\xea\x06\x7a\x00\x34\x25\xe6\xf8\xfc\xf7\x53\x58\x00\xfa\xc2\x9b\xb0\x9a\x92\x46\x9e\x69\x4c\x55\xc6\xa4\xd8\xab\x71\x59\x58\xf7\xcb\x73\x32\xb8\xbf\xf1\xec\x39\x79\xcb\x13\x26\x34\x4b\x89\x91\xc4\xcc\x18\x39\x29\x68\x32\x63\xe4\x52\x4e\xcc\x [...]
},
"/crd/bases/camel.apache.org_kamelets.yaml": &vfsgen۰CompressedFileInfo{
name: "camel.apache.org_kamelets.yaml",
@@ -166,9 +166,9 @@ var assets = func() http.FileSystem {
"/crd/bases/camel.apache.org_pipes.yaml": &vfsgen۰CompressedFileInfo{
name: "camel.apache.org_pipes.yaml",
modTime: time.Time{},
- uncompressedSize: 563260,
+ uncompressedSize: 565005,
- compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\x7b\x73\x1b\x37\xb6\x28\x8a\xff\x9f\x4f\x81\xb2\x53\x47\xd2\x0e\x49\xd9\x99\x99\xd4\x1e\xff\xa6\x4e\x4a\x5b\x96\x13\xfd\x62\xcb\x2c\x4b\x49\x4e\xca\xc9\x4e\xc0\x6e\x90\xc4\x51\x37\xd0\x1b\x40\x53\x62\xae\xef\x77\xbf\x85\x05\xa0\x1f\x7c\x09\xab\x29\x69\xe4\x99\xc6\x54\x65\x4c\x8a\xbd\x1a\x8f\x85\xf5\x7e\x3c\x27\xc3\xfb\x1b\x5f\x3c\x27\x6f\x79\xc2\x84\x66\x29\x31\x92\x98\x39\x23\x27\x05\x4d\xe6\x8c\x5c\xca\xa9\x [...]
+ compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfd\x7b\x73\x1b\x37\xb6\x28\x8a\xff\x9f\x4f\x81\xb2\x53\x47\xd2\x0e\x49\xd9\x99\x99\xd4\x1e\xff\xa6\x4e\x4a\x5b\x96\x13\xfd\x62\xcb\x2c\x4b\x49\x4e\xca\xc9\x4e\xc0\x6e\x90\xc4\x51\x37\xd0\x1b\x40\x53\x62\xae\xef\x77\xbf\x85\x05\xa0\x1f\x7c\x09\xab\x29\x69\xe4\x99\xc6\x54\x65\x4c\x8a\xbd\x1a\x8f\x85\xf5\x7e\x3c\x27\xc3\xfb\x1b\x5f\x3c\x27\x6f\x79\xc2\x84\x66\x29\x31\x92\x98\x39\x23\x27\x05\x4d\xe6\x8c\x5c\xca\xa9\x [...]
},
"/manager": &vfsgen۰DirInfo{
name: "manager",
@@ -637,9 +637,9 @@ var assets = func() http.FileSystem {
"/traits.yaml": &vfsgen۰CompressedFileInfo{
name: "traits.yaml",
modTime: time.Time{},
- uncompressedSize: 68535,
+ uncompressedSize: 69520,
- compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7d\xfd\x77\x1b\xb9\x91\xe0\xef\xfe\x2b\xf0\xb4\xb7\x4f\x92\x8f\x1f\xf2\x64\x93\x9d\xd5\xc6\xd9\xd3\x78\x3c\x89\x32\xfe\xd0\x59\x9a\xc9\xe6\xf9\xfc\x42\xb0\x1b\x24\x61\x36\x81\x0e\x80\x96\xcc\xb9\xdc\xff\x7e\x0f\x55\x85\x8f\x6e\x36\x45\xca\x96\x66\xa3\xcd\x24\xef\x8d\x45\xb2\xbb\x50\x28\x14\x0a\x85\xfa\x74\x86\x4b\x67\x4f\x9f\x0c\x99\xe2\x2b\x71\xca\x7e\x65\x0b\x5e\x89\x27\x8c\xd5\x15\x77\x33\x6d\x56\xa7\x6c\xc6\x [...]
+ compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7d\xfd\x77\x1b\xb9\x91\xe0\xef\xfe\x2b\xf0\xb4\xb7\x4f\x92\x8f\x1f\xf2\x64\x93\x9d\xd5\xc6\xd9\xd3\x78\x3c\x89\x32\xfe\xd0\x59\x9a\xc9\xe6\xf9\xfc\x42\xb0\x1b\x24\x61\x36\x81\x0e\x80\x96\xcc\xb9\xdc\xff\x7e\x0f\x55\x85\x8f\x6e\x36\x45\xca\x96\x66\xa3\xcd\x24\xef\x8d\x45\xb2\xbb\x50\x28\x14\x0a\x85\xfa\x74\x86\x4b\x67\x4f\x9f\x0c\x99\xe2\x2b\x71\xca\x7e\x65\x0b\x5e\x89\x27\x8c\xd5\x15\x77\x33\x6d\x56\xa7\x6c\xc6\x [...]
},
}
fs["/"].(*vfsgen۰DirInfo).entries = []os.FileInfo{
diff --git a/pkg/trait/builder.go b/pkg/trait/builder.go
index 44c6763b6..e11bd7339 100644
--- a/pkg/trait/builder.go
+++ b/pkg/trait/builder.go
@@ -77,6 +77,13 @@ func (t *builderTrait) Configure(e *Environment) (bool, error) {
return false, err
}
if ok && pointer.BoolDeref(quarkus.Enabled, true) && (isNativeIntegration || isNativeKit) {
+ // Force the build to run in a separate Pod and strictly sequential
+ t.L.Info("This is a Quarkus native build: setting build configuration with build Pod strategy, and native container with 1 CPU core and 4 GiB memory. Make sure your cluster can handle it.")
+ t.Strategy = string(v1.BuildStrategyPod)
+ t.OrderStrategy = string(v1.BuildOrderStrategySequential)
+ t.TasksRequestCPU = append(t.TasksRequestCPU, "quarkus-native:1000m")
+ t.TasksRequestMemory = append(t.TasksRequestMemory, "quarkus-native:4Gi")
+
nativeArgsCd := filepath.Join("maven", "target", "native-sources")
command := "cd " + nativeArgsCd + " && echo NativeImage version is $(native-image --version) && echo GraalVM expected version is $(cat graalvm.version) && echo WARN: Make sure they are compatible, otherwise the native compilation may results in error && native-image $(cat native-image.args)"
// it should be performed as the last custom task
@@ -94,8 +101,13 @@ func (t *builderTrait) Apply(e *Environment) error {
// local pipeline tasks
var pipelineTasks []v1.Task
+ // task configuration resources
+ tasksConf, err := t.parseTasksConf()
+ if err != nil {
+ return err
+ }
// Building task
- builderTask, err := t.builderTask(e)
+ builderTask, err := t.builderTask(e, taskConfOrDefault(tasksConf, "builder"))
if err != nil {
e.IntegrationKit.Status.Phase = v1.IntegrationKitPhaseError
e.IntegrationKit.Status.SetCondition("IntegrationKitPropertiesFormatValid", corev1.ConditionFalse,
@@ -128,7 +140,7 @@ func (t *builderTrait) Apply(e *Environment) error {
return nil
}
- customTasks, err := t.customTasks()
+ customTasks, err := t.customTasks(tasksConf)
if err != nil {
return err
}
@@ -137,9 +149,10 @@ func (t *builderTrait) Apply(e *Environment) error {
}
// Packaging task
- // It's the same builder configuration, but with different steps
+ // It's the same builder configuration, but with different steps and conf
packageTask := builderTask.DeepCopy()
packageTask.Name = "package"
+ packageTask.Configuration = *taskConfOrDefault(tasksConf, "package")
packageTask.Steps = make([]string, 0)
pipelineTasks = append(pipelineTasks, v1.Task{Package: packageTask})
@@ -148,7 +161,8 @@ func (t *builderTrait) Apply(e *Environment) error {
case v1.IntegrationPlatformBuildPublishStrategySpectrum:
pipelineTasks = append(pipelineTasks, v1.Task{Spectrum: &v1.SpectrumTask{
BaseTask: v1.BaseTask{
- Name: "spectrum",
+ Name: "spectrum",
+ Configuration: *taskConfOrDefault(tasksConf, "spectrum"),
},
PublishTask: v1.PublishTask{
BaseImage: e.Platform.Status.Build.BaseImage,
@@ -160,7 +174,8 @@ func (t *builderTrait) Apply(e *Environment) error {
case v1.IntegrationPlatformBuildPublishStrategyJib:
pipelineTasks = append(pipelineTasks, v1.Task{Jib: &v1.JibTask{
BaseTask: v1.BaseTask{
- Name: "jib",
+ Name: "jib",
+ Configuration: *taskConfOrDefault(tasksConf, "jib"),
},
PublishTask: v1.PublishTask{
BaseImage: e.Platform.Status.Build.BaseImage,
@@ -172,7 +187,8 @@ func (t *builderTrait) Apply(e *Environment) error {
case v1.IntegrationPlatformBuildPublishStrategyS2I:
pipelineTasks = append(pipelineTasks, v1.Task{S2i: &v1.S2iTask{
BaseTask: v1.BaseTask{
- Name: "s2i",
+ Name: "s2i",
+ Configuration: *taskConfOrDefault(tasksConf, "s2i"),
},
Tag: e.IntegrationKit.ResourceVersion,
}})
@@ -195,7 +211,8 @@ func (t *builderTrait) Apply(e *Environment) error {
pipelineTasks = append(pipelineTasks, v1.Task{Buildah: &v1.BuildahTask{
Platform: platform,
BaseTask: v1.BaseTask{
- Name: "buildah",
+ Name: "buildah",
+ Configuration: *taskConfOrDefault(tasksConf, "buildah"),
},
PublishTask: v1.PublishTask{
Image: getImageName(e),
@@ -218,7 +235,8 @@ func (t *builderTrait) Apply(e *Environment) error {
pipelineTasks = append(pipelineTasks, v1.Task{Kaniko: &v1.KanikoTask{
BaseTask: v1.BaseTask{
- Name: "kaniko",
+ Name: "kaniko",
+ Configuration: *taskConfOrDefault(tasksConf, "kaniko"),
},
PublishTask: v1.PublishTask{
Image: getImageName(e),
@@ -238,7 +256,7 @@ func (t *builderTrait) Apply(e *Environment) error {
return nil
}
-func (t *builderTrait) builderTask(e *Environment) (*v1.BuilderTask, error) {
+func (t *builderTrait) builderTask(e *Environment, taskConf *v1.BuildConfiguration) (*v1.BuilderTask, error) {
maven := v1.MavenBuildSpec{
MavenSpec: e.Platform.Status.Build.Maven,
}
@@ -247,38 +265,13 @@ func (t *builderTrait) builderTask(e *Environment) (*v1.BuilderTask, error) {
maven.Repositories = append(maven.Repositories, mvn.NewRepository(repo))
}
- if trait := e.Catalog.GetTrait(quarkusTraitID); trait != nil {
- quarkus, ok := trait.(*quarkusTrait)
- isNativeIntegration := quarkus.isNativeIntegration(e)
- isNativeKit, err := quarkus.isNativeKit(e)
- if err != nil {
- return nil, err
- }
- // The builder trait must define certain resources requirements when we have a native build
- if ok && pointer.BoolDeref(quarkus.Enabled, true) && (isNativeIntegration || isNativeKit) {
- // Force the build to run in a separate Pod and strictly sequential
- t.L.Info("This is a Quarkus native build: setting build configuration with build Pod strategy, 1 CPU core and 4 GiB memory. Make sure your cluster can handle it.")
- t.Strategy = string(v1.BuildStrategyPod)
- t.OrderStrategy = string(v1.BuildOrderStrategySequential)
- t.RequestCPU = "1000m"
- t.RequestMemory = "4Gi"
- }
- }
-
- buildConfig := v1.BuildConfiguration{
- RequestCPU: t.RequestCPU,
- RequestMemory: t.RequestMemory,
- LimitCPU: t.LimitCPU,
- LimitMemory: t.LimitMemory,
- }
-
if t.Strategy != "" {
t.L.Infof("User defined build strategy %s", t.Strategy)
found := false
for _, s := range v1.BuildStrategies {
if string(s) == t.Strategy {
found = true
- buildConfig.Strategy = s
+ taskConf.Strategy = s
break
}
}
@@ -297,7 +290,7 @@ func (t *builderTrait) builderTask(e *Environment) (*v1.BuilderTask, error) {
for _, s := range v1.BuildOrderStrategies {
if string(s) == t.OrderStrategy {
found = true
- buildConfig.OrderStrategy = s
+ taskConf.OrderStrategy = s
break
}
}
@@ -312,13 +305,13 @@ func (t *builderTrait) builderTask(e *Environment) (*v1.BuilderTask, error) {
task := &v1.BuilderTask{
BaseTask: v1.BaseTask{
- Name: "builder",
+ Name: "builder",
+ Configuration: *taskConf,
},
- Configuration: buildConfig,
- BaseImage: e.Platform.Status.Build.BaseImage,
- Runtime: e.CamelCatalog.Runtime,
- Dependencies: e.IntegrationKit.Spec.Dependencies,
- Maven: maven,
+ BaseImage: e.Platform.Status.Build.BaseImage,
+ Runtime: e.CamelCatalog.Runtime,
+ Dependencies: e.IntegrationKit.Spec.Dependencies,
+ Maven: maven,
}
if task.Maven.Properties == nil {
@@ -380,8 +373,9 @@ func getImageName(e *Environment) string {
return e.Platform.Status.Build.Registry.Address + "/" + organization + "/camel-k-" + e.IntegrationKit.Name + ":" + e.IntegrationKit.ResourceVersion
}
-func (t *builderTrait) customTasks() ([]v1.Task, error) {
+func (t *builderTrait) customTasks(tasksConf map[string]*v1.BuildConfiguration) ([]v1.Task, error) {
customTasks := make([]v1.Task, len(t.Tasks))
+
for i, t := range t.Tasks {
splitted := strings.Split(t, ";")
if len(splitted) < 3 {
@@ -398,7 +392,8 @@ func (t *builderTrait) customTasks() ([]v1.Task, error) {
customTasks[i] = v1.Task{
Custom: &v1.UserTask{
BaseTask: v1.BaseTask{
- Name: splitted[0],
+ Name: splitted[0],
+ Configuration: *taskConfOrDefault(tasksConf, splitted[0]),
},
ContainerImage: splitted[1],
ContainerCommands: containerCommands,
@@ -408,6 +403,72 @@ func (t *builderTrait) customTasks() ([]v1.Task, error) {
return customTasks, nil
}
+func taskConfOrDefault(tasksConf map[string]*v1.BuildConfiguration, taskName string) *v1.BuildConfiguration {
+ if tasksConf == nil || tasksConf[taskName] == nil {
+ return &v1.BuildConfiguration{}
+ }
+
+ return tasksConf[taskName]
+}
+
+func (t *builderTrait) parseTasksConf() (map[string]*v1.BuildConfiguration, error) {
+ tasksConf := make(map[string]*v1.BuildConfiguration)
+
+ for _, t := range t.TasksRequestCPU {
+ splits := strings.Split(t, ":")
+ if len(splits) != 2 {
+ return nil, fmt.Errorf("could not parse %s, expected format <task-name>:<task-resource>", t)
+ }
+ taskName := splits[0]
+ taskResource := splits[1]
+ if tasksConf[taskName] == nil {
+ tasksConf[taskName] = &v1.BuildConfiguration{}
+ }
+ tasksConf[taskName].RequestCPU = taskResource
+ }
+
+ for _, t := range t.TasksRequestMemory {
+ splits := strings.Split(t, ":")
+ if len(splits) != 2 {
+ return nil, fmt.Errorf("could not parse %s, expected format <task-name>:<task-resource>", t)
+ }
+ taskName := splits[0]
+ taskResource := splits[1]
+ if tasksConf[taskName] == nil {
+ tasksConf[taskName] = &v1.BuildConfiguration{}
+ }
+ tasksConf[taskName].RequestMemory = taskResource
+ }
+
+ for _, t := range t.TasksLimitCPU {
+ splits := strings.Split(t, ":")
+ if len(splits) != 2 {
+ return nil, fmt.Errorf("could not parse %s, expected format <task-name>:<task-resource>", t)
+ }
+ taskName := splits[0]
+ taskResource := splits[1]
+ if tasksConf[taskName] == nil {
+ tasksConf[taskName] = &v1.BuildConfiguration{}
+ }
+ tasksConf[taskName].LimitCPU = taskResource
+ }
+
+ for _, t := range t.TasksLimitMemory {
+ splits := strings.Split(t, ":")
+ if len(splits) != 2 {
+ return nil, fmt.Errorf("could not parse %s, expected format <task-name>:<task-resource>", t)
+ }
+ taskName := splits[0]
+ taskResource := splits[1]
+ if tasksConf[taskName] == nil {
+ tasksConf[taskName] = &v1.BuildConfiguration{}
+ }
+ tasksConf[taskName].LimitMemory = taskResource
+ }
+
+ return tasksConf, nil
+}
+
// we may get a command in the following format `/bin/bash -c "ls && echo 'hello'`
// which should provide a string with {"/bin/bash", "-c", "ls && echo 'hello'"}.
// if however we have a command which is not quoted, then we leave it the way it is.
diff --git a/pkg/trait/builder_test.go b/pkg/trait/builder_test.go
index 9a5b29472..79f47bd86 100644
--- a/pkg/trait/builder_test.go
+++ b/pkg/trait/builder_test.go
@@ -322,7 +322,7 @@ func TestBuilderCustomTasks(t *testing.T) {
builderTrait.Tasks = append(builderTrait.Tasks, "test;alpine;ls")
builderTrait.Tasks = append(builderTrait.Tasks, `test;alpine;mvn test`)
- tasks, err := builderTrait.customTasks()
+ tasks, err := builderTrait.customTasks(nil)
assert.Nil(t, err)
assert.Equal(t, 2, len(tasks))
@@ -338,7 +338,7 @@ func TestBuilderCustomTasksFailure(t *testing.T) {
builderTrait := createNominalBuilderTraitTest()
builderTrait.Tasks = append(builderTrait.Tasks, "test;alpine")
- _, err := builderTrait.customTasks()
+ _, err := builderTrait.customTasks(nil)
assert.NotNil(t, err)
}
@@ -347,7 +347,7 @@ func TestBuilderCustomTasksScript(t *testing.T) {
builderTrait := createNominalBuilderTraitTest()
builderTrait.Tasks = append(builderTrait.Tasks, "test;alpine;/bin/bash -c \"cd test && ls; echo 'helooo'\"")
- tasks, err := builderTrait.customTasks()
+ tasks, err := builderTrait.customTasks(nil)
assert.Nil(t, err)
assert.Equal(t, 1, len(tasks))
@@ -358,6 +358,33 @@ func TestBuilderCustomTasksScript(t *testing.T) {
assert.Equal(t, "cd test && ls; echo 'helooo'", tasks[0].Custom.ContainerCommands[2])
}
+func TestBuilderCustomTasksConfiguration(t *testing.T) {
+ builderTrait := createNominalBuilderTraitTest()
+ builderTrait.TasksRequestCPU = append(builderTrait.TasksLimitCPU, "builder:1000m")
+ builderTrait.TasksLimitCPU = append(builderTrait.TasksLimitCPU, "custom1:500m")
+ builderTrait.TasksRequestMemory = append(builderTrait.TasksLimitCPU, "package:8Gi")
+ builderTrait.TasksLimitMemory = append(builderTrait.TasksLimitCPU, "spectrum:4Gi")
+
+ tasksConf, err := builderTrait.parseTasksConf()
+
+ assert.Nil(t, err)
+ assert.Equal(t, 4, len(tasksConf))
+ assert.Equal(t, "1000m", tasksConf["builder"].RequestCPU)
+ assert.Equal(t, "500m", tasksConf["custom1"].LimitCPU)
+ assert.Equal(t, "8Gi", tasksConf["package"].RequestMemory)
+ assert.Equal(t, "4Gi", tasksConf["spectrum"].LimitMemory)
+}
+
+func TestBuilderCustomTasksConfigurationError(t *testing.T) {
+ builderTrait := createNominalBuilderTraitTest()
+ builderTrait.TasksLimitCPU = append(builderTrait.TasksLimitCPU, "syntax error")
+
+ _, err := builderTrait.parseTasksConf()
+
+ assert.NotNil(t, err)
+ assert.Equal(t, "could not parse syntax error, expected format <task-name>:<task-resource>", err.Error())
+}
+
func TestUserTaskCommands(t *testing.T) {
command := `/bin/bash -c "ls && echo 'hello' && $(cat /path/to/a/resource)"`
podCommands := splitContainerCommand(command)
diff --git a/resources/traits.yaml b/resources/traits.yaml
index 20d9e9e19..5919692f0 100755
--- a/resources/traits.yaml
+++ b/resources/traits.yaml
@@ -218,20 +218,20 @@ traits:
`sequential` (default sequential)
- name: request-cpu
type: string
- description: When using `pod` strategy, the minimum amount of CPU required by
- the pod builder.
+ description: 'When using `pod` strategy, the minimum amount of CPU required by
+ the pod builder. Deprecated: use TasksRequestCPU instead with task name `builder`.'
- name: request-memory
type: string
- description: When using `pod` strategy, the minimum amount of memory required
- by the pod builder.
+ description: 'When using `pod` strategy, the minimum amount of memory required
+ by the pod builder. Deprecated: use TasksRequestCPU instead with task name `builder`.'
- name: limit-cpu
type: string
- description: When using `pod` strategy, the maximum amount of CPU required by
- the pod builder.
+ description: 'When using `pod` strategy, the maximum amount of CPU required by
+ the pod builder. Deprecated: use TasksRequestCPU instead with task name `builder`.'
- name: limit-memory
type: string
- description: When using `pod` strategy, the maximum amount of memory required
- by the pod builder.
+ description: 'When using `pod` strategy, the maximum amount of memory required
+ by the pod builder. Deprecated: use TasksRequestCPU instead with task name `builder`.'
- name: maven-profiles
type: '[]string'
description: 'A list of references pointing to configmaps/secrets that contains
@@ -243,7 +243,23 @@ traits:
- name: tasks
type: '[]string'
description: A list of tasks to be executed (available only when using `pod` strategy)
- with format <name>;<container-image>;<container-command>
+ with format `<name>;<container-image>;<container-command>`.
+ - name: tasks-request-cpu
+ type: '[]string'
+ description: A list of request cpu configuration for the specific task with format
+ `<task-name>:<request-cpu-conf>`.
+ - name: tasks-request-memory
+ type: '[]string'
+ description: A list of request memory configuration for the specific task with
+ format `<task-name>:<request-memory-conf>`.
+ - name: tasks-limit-cpu
+ type: '[]string'
+ description: A list of limit cpu configuration for the specific task with format
+ `<task-name>:<limit-cpu-conf>`.
+ - name: tasks-limit-memory
+ type: '[]string'
+ description: A list of limit memory configuration for the specific task with format
+ `<task-name>:<limit-memory-conf>`.
- name: camel
platform: true
profiles: