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/11 10:30:21 UTC
[camel-k] 01/02: feat(trait): quarkus native advanced configuration
This is an automated email from the ASF dual-hosted git repository.
pcongiusti pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-k.git
commit 873e0fd312e14acb29e78d039839fd0a51c5c02d
Author: Pasquale Congiusti <pa...@gmail.com>
AuthorDate: Tue Oct 10 13:30:53 2023 +0200
feat(trait): quarkus native advanced configuration
Closes #4756
---
config/crd/bases/camel.apache.org_integrationkits.yaml | 9 +++++++++
.../bases/camel.apache.org_integrationplatforms.yaml | 18 ++++++++++++++++++
config/crd/bases/camel.apache.org_integrations.yaml | 9 +++++++++
config/crd/bases/camel.apache.org_kameletbindings.yaml | 9 +++++++++
config/crd/bases/camel.apache.org_pipes.yaml | 9 +++++++++
docs/modules/ROOT/partials/apis/camel-k-crds.adoc | 14 ++++++++++++++
docs/modules/traits/pages/quarkus.adoc | 8 ++++++++
helm/camel-k/crds/crd-integration-kit.yaml | 9 +++++++++
helm/camel-k/crds/crd-integration-platform.yaml | 18 ++++++++++++++++++
helm/camel-k/crds/crd-integration.yaml | 9 +++++++++
helm/camel-k/crds/crd-kamelet-binding.yaml | 9 +++++++++
helm/camel-k/crds/crd-pipe.yaml | 9 +++++++++
pkg/apis/camel/v1/trait/quarkus.go | 4 ++++
pkg/builder/image.go | 2 +-
pkg/resources/resources.go | 17 +++++++++++++++++
pkg/trait/builder.go | 8 ++++++--
pkg/trait/quarkus.go | 5 +++++
resources/traits.yaml | 7 +++++++
18 files changed, 170 insertions(+), 3 deletions(-)
diff --git a/config/crd/bases/camel.apache.org_integrationkits.yaml b/config/crd/bases/camel.apache.org_integrationkits.yaml
index 2a42beee8..5c282381b 100644
--- a/config/crd/bases/camel.apache.org_integrationkits.yaml
+++ b/config/crd/bases/camel.apache.org_integrationkits.yaml
@@ -335,6 +335,15 @@ spec:
description: Can be used to enable or disable a trait. All
traits share this common property.
type: boolean
+ nativeBaseImage:
+ description: The base image to use when running a native build
+ (default `quay.io/quarkus/quarkus-micro-image:2.0`)
+ type: string
+ nativeBuilderImage:
+ description: The image containing the tooling required for
+ a native build (by default it will use the one provided
+ in the runtime catalog)
+ type: string
packageTypes:
description: 'The Quarkus package types, `fast-jar` or `native`
(default `fast-jar`). In case both `fast-jar` and `native`
diff --git a/config/crd/bases/camel.apache.org_integrationplatforms.yaml b/config/crd/bases/camel.apache.org_integrationplatforms.yaml
index 0f473b801..50f8854b8 100644
--- a/config/crd/bases/camel.apache.org_integrationplatforms.yaml
+++ b/config/crd/bases/camel.apache.org_integrationplatforms.yaml
@@ -1628,6 +1628,15 @@ spec:
description: Can be used to enable or disable a trait. All
traits share this common property.
type: boolean
+ nativeBaseImage:
+ description: The base image to use when running a native build
+ (default `quay.io/quarkus/quarkus-micro-image:2.0`)
+ type: string
+ nativeBuilderImage:
+ description: The image containing the tooling required for
+ a native build (by default it will use the one provided
+ in the runtime catalog)
+ type: string
packageTypes:
description: 'The Quarkus package types, `fast-jar` or `native`
(default `fast-jar`). In case both `fast-jar` and `native`
@@ -3441,6 +3450,15 @@ spec:
description: Can be used to enable or disable a trait. All
traits share this common property.
type: boolean
+ nativeBaseImage:
+ description: The base image to use when running a native build
+ (default `quay.io/quarkus/quarkus-micro-image:2.0`)
+ type: string
+ nativeBuilderImage:
+ description: The image containing the tooling required for
+ a native build (by default it will use the one provided
+ in the runtime catalog)
+ type: string
packageTypes:
description: 'The Quarkus package types, `fast-jar` or `native`
(default `fast-jar`). In case both `fast-jar` and `native`
diff --git a/config/crd/bases/camel.apache.org_integrations.yaml b/config/crd/bases/camel.apache.org_integrations.yaml
index 9688a46a1..5589263a2 100644
--- a/config/crd/bases/camel.apache.org_integrations.yaml
+++ b/config/crd/bases/camel.apache.org_integrations.yaml
@@ -7545,6 +7545,15 @@ spec:
description: Can be used to enable or disable a trait. All
traits share this common property.
type: boolean
+ nativeBaseImage:
+ description: The base image to use when running a native build
+ (default `quay.io/quarkus/quarkus-micro-image:2.0`)
+ type: string
+ nativeBuilderImage:
+ description: The image containing the tooling required for
+ a native build (by default it will use the one provided
+ in the runtime catalog)
+ type: string
packageTypes:
description: 'The Quarkus package types, `fast-jar` or `native`
(default `fast-jar`). In case both `fast-jar` and `native`
diff --git a/config/crd/bases/camel.apache.org_kameletbindings.yaml b/config/crd/bases/camel.apache.org_kameletbindings.yaml
index 2f5ff7497..5f5f20eea 100644
--- a/config/crd/bases/camel.apache.org_kameletbindings.yaml
+++ b/config/crd/bases/camel.apache.org_kameletbindings.yaml
@@ -7842,6 +7842,15 @@ spec:
description: Can be used to enable or disable a trait.
All traits share this common property.
type: boolean
+ nativeBaseImage:
+ description: The base image to use when running a native
+ build (default `quay.io/quarkus/quarkus-micro-image:2.0`)
+ type: string
+ nativeBuilderImage:
+ description: The image containing the tooling required
+ for a native build (by default it will use the one provided
+ in the runtime catalog)
+ type: string
packageTypes:
description: 'The Quarkus package types, `fast-jar` or
`native` (default `fast-jar`). In case both `fast-jar`
diff --git a/config/crd/bases/camel.apache.org_pipes.yaml b/config/crd/bases/camel.apache.org_pipes.yaml
index c8c5b8ea8..793ba658f 100644
--- a/config/crd/bases/camel.apache.org_pipes.yaml
+++ b/config/crd/bases/camel.apache.org_pipes.yaml
@@ -7840,6 +7840,15 @@ spec:
description: Can be used to enable or disable a trait.
All traits share this common property.
type: boolean
+ nativeBaseImage:
+ description: The base image to use when running a native
+ build (default `quay.io/quarkus/quarkus-micro-image:2.0`)
+ type: string
+ nativeBuilderImage:
+ description: The image containing the tooling required
+ for a native build (by default it will use the one provided
+ in the runtime catalog)
+ type: string
packageTypes:
description: 'The Quarkus package types, `fast-jar` or
`native` (default `fast-jar`). In case both `fast-jar`
diff --git a/docs/modules/ROOT/partials/apis/camel-k-crds.adoc b/docs/modules/ROOT/partials/apis/camel-k-crds.adoc
index a9070f7c7..9b6408d5b 100644
--- a/docs/modules/ROOT/partials/apis/camel-k-crds.adoc
+++ b/docs/modules/ROOT/partials/apis/camel-k-crds.adoc
@@ -7652,6 +7652,20 @@ The Quarkus mode to run: either `jvm` or `native` (default `jvm`).
In case both `jvm` and `native` are specified, two `IntegrationKit` resources are created,
with the `native` kit having precedence over the `jvm` one once ready.
+|`nativeBaseImage` +
+string
+|
+
+
+The base image to use when running a native build (default `quay.io/quarkus/quarkus-micro-image:2.0`)
+
+|`nativeBuilderImage` +
+string
+|
+
+
+The image containing the tooling required for a native build (by default it will use the one provided in the runtime catalog)
+
|===
diff --git a/docs/modules/traits/pages/quarkus.adoc b/docs/modules/traits/pages/quarkus.adoc
index 77a7ce021..32ce062c9 100755
--- a/docs/modules/traits/pages/quarkus.adoc
+++ b/docs/modules/traits/pages/quarkus.adoc
@@ -49,6 +49,14 @@ Deprecated: use `build-mode` instead.
In case both `jvm` and `native` are specified, two `IntegrationKit` resources are created,
with the `native` kit having precedence over the `jvm` one once ready.
+| quarkus.native-base-image
+| string
+| The base image to use when running a native build (default `quay.io/quarkus/quarkus-micro-image:2.0`)
+
+| quarkus.native-builder-image
+| string
+| The image containing the tooling required for a native build (by default it will use the one provided in the runtime catalog)
+
|===
// End of autogenerated code - DO NOT EDIT! (configuration)
diff --git a/helm/camel-k/crds/crd-integration-kit.yaml b/helm/camel-k/crds/crd-integration-kit.yaml
index 2a42beee8..5c282381b 100644
--- a/helm/camel-k/crds/crd-integration-kit.yaml
+++ b/helm/camel-k/crds/crd-integration-kit.yaml
@@ -335,6 +335,15 @@ spec:
description: Can be used to enable or disable a trait. All
traits share this common property.
type: boolean
+ nativeBaseImage:
+ description: The base image to use when running a native build
+ (default `quay.io/quarkus/quarkus-micro-image:2.0`)
+ type: string
+ nativeBuilderImage:
+ description: The image containing the tooling required for
+ a native build (by default it will use the one provided
+ in the runtime catalog)
+ type: string
packageTypes:
description: 'The Quarkus package types, `fast-jar` or `native`
(default `fast-jar`). In case both `fast-jar` and `native`
diff --git a/helm/camel-k/crds/crd-integration-platform.yaml b/helm/camel-k/crds/crd-integration-platform.yaml
index 0f473b801..50f8854b8 100644
--- a/helm/camel-k/crds/crd-integration-platform.yaml
+++ b/helm/camel-k/crds/crd-integration-platform.yaml
@@ -1628,6 +1628,15 @@ spec:
description: Can be used to enable or disable a trait. All
traits share this common property.
type: boolean
+ nativeBaseImage:
+ description: The base image to use when running a native build
+ (default `quay.io/quarkus/quarkus-micro-image:2.0`)
+ type: string
+ nativeBuilderImage:
+ description: The image containing the tooling required for
+ a native build (by default it will use the one provided
+ in the runtime catalog)
+ type: string
packageTypes:
description: 'The Quarkus package types, `fast-jar` or `native`
(default `fast-jar`). In case both `fast-jar` and `native`
@@ -3441,6 +3450,15 @@ spec:
description: Can be used to enable or disable a trait. All
traits share this common property.
type: boolean
+ nativeBaseImage:
+ description: The base image to use when running a native build
+ (default `quay.io/quarkus/quarkus-micro-image:2.0`)
+ type: string
+ nativeBuilderImage:
+ description: The image containing the tooling required for
+ a native build (by default it will use the one provided
+ in the runtime catalog)
+ type: string
packageTypes:
description: 'The Quarkus package types, `fast-jar` or `native`
(default `fast-jar`). In case both `fast-jar` and `native`
diff --git a/helm/camel-k/crds/crd-integration.yaml b/helm/camel-k/crds/crd-integration.yaml
index 9688a46a1..5589263a2 100644
--- a/helm/camel-k/crds/crd-integration.yaml
+++ b/helm/camel-k/crds/crd-integration.yaml
@@ -7545,6 +7545,15 @@ spec:
description: Can be used to enable or disable a trait. All
traits share this common property.
type: boolean
+ nativeBaseImage:
+ description: The base image to use when running a native build
+ (default `quay.io/quarkus/quarkus-micro-image:2.0`)
+ type: string
+ nativeBuilderImage:
+ description: The image containing the tooling required for
+ a native build (by default it will use the one provided
+ in the runtime catalog)
+ type: string
packageTypes:
description: 'The Quarkus package types, `fast-jar` or `native`
(default `fast-jar`). In case both `fast-jar` and `native`
diff --git a/helm/camel-k/crds/crd-kamelet-binding.yaml b/helm/camel-k/crds/crd-kamelet-binding.yaml
index 2f5ff7497..5f5f20eea 100644
--- a/helm/camel-k/crds/crd-kamelet-binding.yaml
+++ b/helm/camel-k/crds/crd-kamelet-binding.yaml
@@ -7842,6 +7842,15 @@ spec:
description: Can be used to enable or disable a trait.
All traits share this common property.
type: boolean
+ nativeBaseImage:
+ description: The base image to use when running a native
+ build (default `quay.io/quarkus/quarkus-micro-image:2.0`)
+ type: string
+ nativeBuilderImage:
+ description: The image containing the tooling required
+ for a native build (by default it will use the one provided
+ in the runtime catalog)
+ type: string
packageTypes:
description: 'The Quarkus package types, `fast-jar` or
`native` (default `fast-jar`). In case both `fast-jar`
diff --git a/helm/camel-k/crds/crd-pipe.yaml b/helm/camel-k/crds/crd-pipe.yaml
index c8c5b8ea8..793ba658f 100644
--- a/helm/camel-k/crds/crd-pipe.yaml
+++ b/helm/camel-k/crds/crd-pipe.yaml
@@ -7840,6 +7840,15 @@ spec:
description: Can be used to enable or disable a trait.
All traits share this common property.
type: boolean
+ nativeBaseImage:
+ description: The base image to use when running a native
+ build (default `quay.io/quarkus/quarkus-micro-image:2.0`)
+ type: string
+ nativeBuilderImage:
+ description: The image containing the tooling required
+ for a native build (by default it will use the one provided
+ in the runtime catalog)
+ type: string
packageTypes:
description: 'The Quarkus package types, `fast-jar` or
`native` (default `fast-jar`). In case both `fast-jar`
diff --git a/pkg/apis/camel/v1/trait/quarkus.go b/pkg/apis/camel/v1/trait/quarkus.go
index 823bfa10b..5bd2cd74d 100644
--- a/pkg/apis/camel/v1/trait/quarkus.go
+++ b/pkg/apis/camel/v1/trait/quarkus.go
@@ -40,6 +40,10 @@ type QuarkusTrait struct {
// In case both `jvm` and `native` are specified, two `IntegrationKit` resources are created,
// with the `native` kit having precedence over the `jvm` one once ready.
Modes []QuarkusMode `property:"build-mode" json:"buildMode,omitempty"`
+ // The base image to use when running a native build (default `quay.io/quarkus/quarkus-micro-image:2.0`)
+ NativeBaseImage string `property:"native-base-image" json:"nativeBaseImage,omitempty"`
+ // The image containing the tooling required for a native build (by default it will use the one provided in the runtime catalog)
+ NativeBuilderImage string `property:"native-builder-image" json:"nativeBuilderImage,omitempty"`
}
// QuarkusMode is the type of Quarkus build packaging.
diff --git a/pkg/builder/image.go b/pkg/builder/image.go
index 9a7ba1bd0..e88b60aee 100644
--- a/pkg/builder/image.go
+++ b/pkg/builder/image.go
@@ -65,7 +65,7 @@ func nativeImageContext(ctx *builderContext) error {
return imageContext(ctx, func(ctx *builderContext) error {
runner := "camel-k-integration-" + defaults.Version + "-runner"
- ctx.BaseImage = "quay.io/quarkus/quarkus-distroless-image:1.0"
+ //ctx.BaseImage = "quay.io/quarkus/quarkus-distroless-image:1.0"
ctx.Artifacts = []v1.Artifact{
{
ID: runner,
diff --git a/pkg/resources/resources.go b/pkg/resources/resources.go
index f4c3f686d..e8d997d8c 100644
--- a/pkg/resources/resources.go
+++ b/pkg/resources/resources.go
@@ -174,6 +174,18 @@ var assets = func() http.FileSystem {
name: "manager",
modTime: time.Time{},
},
+ "/manager/bundle": &vfsgen۰DirInfo{
+ name: "bundle",
+ modTime: time.Time{},
+ },
+ "/manager/bundle/manifests": &vfsgen۰DirInfo{
+ name: "manifests",
+ modTime: time.Time{},
+ },
+ "/manager/bundle/metadata": &vfsgen۰DirInfo{
+ name: "metadata",
+ modTime: time.Time{},
+ },
"/manager/operator-deployment.yaml": &vfsgen۰CompressedFileInfo{
name: "operator-deployment.yaml",
modTime: time.Time{},
@@ -672,6 +684,7 @@ var assets = func() http.FileSystem {
fs["/crd/bases/camel.apache.org_pipes.yaml"].(os.FileInfo),
}
fs["/manager"].(*vfsgen۰DirInfo).entries = []os.FileInfo{
+ fs["/manager/bundle"].(os.FileInfo),
fs["/manager/operator-deployment.yaml"].(os.FileInfo),
fs["/manager/operator-service-account.yaml"].(os.FileInfo),
fs["/manager/patch-image-pull-policy-always.yaml"].(os.FileInfo),
@@ -683,6 +696,10 @@ var assets = func() http.FileSystem {
fs["/manager/patch-toleration.yaml"].(os.FileInfo),
fs["/manager/patch-watch-namespace-global.yaml"].(os.FileInfo),
}
+ fs["/manager/bundle"].(*vfsgen۰DirInfo).entries = []os.FileInfo{
+ fs["/manager/bundle/manifests"].(os.FileInfo),
+ fs["/manager/bundle/metadata"].(os.FileInfo),
+ }
fs["/prometheus"].(*vfsgen۰DirInfo).entries = []os.FileInfo{
fs["/prometheus/operator-pod-monitor.yaml"].(os.FileInfo),
fs["/prometheus/operator-prometheus-rule.yaml"].(os.FileInfo),
diff --git a/pkg/trait/builder.go b/pkg/trait/builder.go
index 805ba37ef..82ba4ebcb 100644
--- a/pkg/trait/builder.go
+++ b/pkg/trait/builder.go
@@ -80,9 +80,13 @@ func (t *builderTrait) Configure(e *Environment) (bool, error) {
if ok && pointer.BoolDeref(quarkus.Enabled, true) && (isNativeIntegration || isNativeKit) {
// TODO expect maven repository in local repo (need to change builder pod accordingly!)
command := builder.QuarkusRuntimeSupport(e.CamelCatalog.GetCamelQuarkusVersion()).BuildCommands()
-
+ nativeBuilderImage := quarkus.NativeBuilderImage
+ if nativeBuilderImage == "" {
+ // default from the catalog
+ nativeBuilderImage = e.CamelCatalog.GetQuarkusToolingImage()
+ }
// it should be performed as the last custom task
- t.Tasks = append(t.Tasks, fmt.Sprintf(`quarkus-native;%s;/bin/bash -c "%s"`, e.CamelCatalog.GetQuarkusToolingImage(), command))
+ t.Tasks = append(t.Tasks, fmt.Sprintf(`quarkus-native;%s;/bin/bash -c "%s"`, nativeBuilderImage, command))
// 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)
diff --git a/pkg/trait/quarkus.go b/pkg/trait/quarkus.go
index ad3744d8e..e5dde154d 100644
--- a/pkg/trait/quarkus.go
+++ b/pkg/trait/quarkus.go
@@ -347,6 +347,11 @@ func (t *quarkusTrait) applyWhenBuildSubmitted(e *Environment) error {
if native {
if nativePackagetType := builder.QuarkusRuntimeSupport(e.CamelCatalog.GetCamelQuarkusVersion()).NativeMavenProperty(); nativePackagetType != "" {
buildTask.Maven.Properties["quarkus.package.type"] = nativePackagetType
+ if t.NativeBaseImage == "" {
+ packageTask.BaseImage = "quay.io/quarkus/quarkus-micro-image:2.0"
+ } else {
+ packageTask.BaseImage = t.NativeBaseImage
+ }
}
if len(e.IntegrationKit.Spec.Sources) > 0 {
buildTask.Sources = e.IntegrationKit.Spec.Sources
diff --git a/resources/traits.yaml b/resources/traits.yaml
index 7484e147e..8b711afbc 100755
--- a/resources/traits.yaml
+++ b/resources/traits.yaml
@@ -1381,6 +1381,13 @@ traits:
In case both `jvm` and `native` are specified, two `IntegrationKit` resources
are created, with the `native` kit having precedence over the `jvm` one once
ready.'
+ - name: native-base-image
+ type: string
+ description: The base image to use when running a native build (default `quay.io/quarkus/quarkus-micro-image:2.0`)
+ - name: native-builder-image
+ type: string
+ description: The image containing the tooling required for a native build (by
+ default it will use the one provided in the runtime catalog)
- name: registry
platform: false
profiles: