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: