You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by jp...@apache.org on 2022/04/08 11:48:58 UTC

[camel-k] branch main updated: fix #2835 address comments

This is an automated email from the ASF dual-hosted git repository.

jpoth pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-k.git


The following commit(s) were added to refs/heads/main by this push:
     new eed983795 fix #2835 address comments
     new dcd7e34f7 Merge pull request #3171 from johnpoth/local-dependencies-2
eed983795 is described below

commit eed9837955991c4efd8e47da3d36e51a850a8c50
Author: John Poth <po...@gmail.com>
AuthorDate: Tue Apr 5 16:08:19 2022 +0200

    fix #2835 address comments
---
 config/crd/bases/camel.apache.org_builds.yaml      | 28 ++++++++
 .../camel.apache.org_integrationplatforms.yaml     | 80 ++++++++++++++--------
 docs/modules/traits/pages/registry.adoc            |  2 +-
 helm/camel-k/crds/crd-build.yaml                   | 28 ++++++++
 helm/camel-k/crds/crd-integration-platform.yaml    | 80 ++++++++++++++--------
 pkg/apis/camel/v1/build_types.go                   |  2 +
 pkg/apis/camel/v1/maven_types.go                   | 11 ++-
 pkg/apis/camel/v1/zz_generated.deepcopy.go         | 19 +++--
 pkg/builder/project.go                             | 19 ++++-
 pkg/cmd/install.go                                 |  2 +-
 pkg/cmd/run.go                                     | 20 ++----
 pkg/resources/resources.go                         | 19 +++--
 pkg/trait/openapi.go                               | 16 ++++-
 pkg/trait/registry.go                              |  4 +-
 pkg/util/camel/camel_dependencies.go               |  4 +-
 pkg/util/camel/catalog.go                          | 17 ++++-
 16 files changed, 247 insertions(+), 104 deletions(-)

diff --git a/config/crd/bases/camel.apache.org_builds.yaml b/config/crd/bases/camel.apache.org_builds.yaml
index 7ecfb8146..c10a60b1b 100644
--- a/config/crd/bases/camel.apache.org_builds.yaml
+++ b/config/crd/bases/camel.apache.org_builds.yaml
@@ -151,6 +151,33 @@ spec:
                             application build phase
                           properties:
                             caSecret:
+                              description: 'Deprecated: use CASecrets The Secret name
+                                and key, containing the CA certificate(s) used to
+                                connect to remote Maven repositories. It can contain
+                                X.509 certificates, and PKCS#7 formatted certificate
+                                chains. A JKS formatted keystore is automatically
+                                created to store the CA certificate(s), and configured
+                                to be used as a trusted certificate(s) by the Maven
+                                commands. Note that the root CA certificates are also
+                                imported into the created keystore.'
+                              properties:
+                                key:
+                                  description: The key of the secret to select from.  Must
+                                    be a valid secret key.
+                                  type: string
+                                name:
+                                  description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+                                    TODO: Add other useful fields. apiVersion, kind,
+                                    uid?'
+                                  type: string
+                                optional:
+                                  description: Specify whether the Secret or its key
+                                    must be defined
+                                  type: boolean
+                              required:
+                              - key
+                              type: object
+                            caSecrets:
                               description: The Secrets name and key, containing the
                                 CA certificate(s) used to connect to remote Maven
                                 repositories. It can contain X.509 certificates, and
@@ -287,6 +314,7 @@ spec:
                                 type: object
                               type: array
                             servers:
+                              description: Servers (auth)
                               items:
                                 properties:
                                   configuration:
diff --git a/config/crd/bases/camel.apache.org_integrationplatforms.yaml b/config/crd/bases/camel.apache.org_integrationplatforms.yaml
index b54d09be6..91884f24f 100644
--- a/config/crd/bases/camel.apache.org_integrationplatforms.yaml
+++ b/config/crd/bases/camel.apache.org_integrationplatforms.yaml
@@ -95,6 +95,31 @@ spec:
                       applications
                     properties:
                       caSecret:
+                        description: 'Deprecated: use CASecrets The Secret name and
+                          key, containing the CA certificate(s) used to connect to
+                          remote Maven repositories. It can contain X.509 certificates,
+                          and PKCS#7 formatted certificate chains. A JKS formatted
+                          keystore is automatically created to store the CA certificate(s),
+                          and configured to be used as a trusted certificate(s) by
+                          the Maven commands. Note that the root CA certificates are
+                          also imported into the created keystore.'
+                        properties:
+                          key:
+                            description: The key of the secret to select from.  Must
+                              be a valid secret key.
+                            type: string
+                          name:
+                            description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+                              TODO: Add other useful fields. apiVersion, kind, uid?'
+                            type: string
+                          optional:
+                            description: Specify whether the Secret or its key must
+                              be defined
+                            type: boolean
+                        required:
+                        - key
+                        type: object
+                      caSecrets:
                         description: The Secrets name and key, containing the CA certificate(s)
                           used to connect to remote Maven repositories. It can contain
                           X.509 certificates, and PKCS#7 formatted certificate chains.
@@ -156,21 +181,6 @@ spec:
                           type: string
                         description: The Maven properties.
                         type: object
-                      servers:
-                        items:
-                          properties:
-                            configuration:
-                              additionalProperties:
-                                type: string
-                              type: object
-                            id:
-                              type: string
-                            password:
-                              type: string
-                            username:
-                              type: string
-                          type: object
-                        type: array
                       settings:
                         description: A reference to the ConfigMap or Secret key that
                           contains the Maven settings.
@@ -360,6 +370,31 @@ spec:
                       applications
                     properties:
                       caSecret:
+                        description: 'Deprecated: use CASecrets The Secret name and
+                          key, containing the CA certificate(s) used to connect to
+                          remote Maven repositories. It can contain X.509 certificates,
+                          and PKCS#7 formatted certificate chains. A JKS formatted
+                          keystore is automatically created to store the CA certificate(s),
+                          and configured to be used as a trusted certificate(s) by
+                          the Maven commands. Note that the root CA certificates are
+                          also imported into the created keystore.'
+                        properties:
+                          key:
+                            description: The key of the secret to select from.  Must
+                              be a valid secret key.
+                            type: string
+                          name:
+                            description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+                              TODO: Add other useful fields. apiVersion, kind, uid?'
+                            type: string
+                          optional:
+                            description: Specify whether the Secret or its key must
+                              be defined
+                            type: boolean
+                        required:
+                        - key
+                        type: object
+                      caSecrets:
                         description: The Secrets name and key, containing the CA certificate(s)
                           used to connect to remote Maven repositories. It can contain
                           X.509 certificates, and PKCS#7 formatted certificate chains.
@@ -421,21 +456,6 @@ spec:
                           type: string
                         description: The Maven properties.
                         type: object
-                      servers:
-                        items:
-                          properties:
-                            configuration:
-                              additionalProperties:
-                                type: string
-                              type: object
-                            id:
-                              type: string
-                            password:
-                              type: string
-                            username:
-                              type: string
-                          type: object
-                        type: array
                       settings:
                         description: A reference to the ConfigMap or Secret key that
                           contains the Maven settings.
diff --git a/docs/modules/traits/pages/registry.adoc b/docs/modules/traits/pages/registry.adoc
index 29dd72420..6decb9efb 100644
--- a/docs/modules/traits/pages/registry.adoc
+++ b/docs/modules/traits/pages/registry.adoc
@@ -2,7 +2,7 @@
 
 // Start of autogenerated code - DO NOT EDIT! (description)
 The Registry trait sets up Maven to use the Image registry
-as a Maven repository
+as a Maven repository.
 
 
 This trait is available in the following profiles: **Kubernetes, Knative, OpenShift**.
diff --git a/helm/camel-k/crds/crd-build.yaml b/helm/camel-k/crds/crd-build.yaml
index 7ecfb8146..c10a60b1b 100644
--- a/helm/camel-k/crds/crd-build.yaml
+++ b/helm/camel-k/crds/crd-build.yaml
@@ -151,6 +151,33 @@ spec:
                             application build phase
                           properties:
                             caSecret:
+                              description: 'Deprecated: use CASecrets The Secret name
+                                and key, containing the CA certificate(s) used to
+                                connect to remote Maven repositories. It can contain
+                                X.509 certificates, and PKCS#7 formatted certificate
+                                chains. A JKS formatted keystore is automatically
+                                created to store the CA certificate(s), and configured
+                                to be used as a trusted certificate(s) by the Maven
+                                commands. Note that the root CA certificates are also
+                                imported into the created keystore.'
+                              properties:
+                                key:
+                                  description: The key of the secret to select from.  Must
+                                    be a valid secret key.
+                                  type: string
+                                name:
+                                  description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+                                    TODO: Add other useful fields. apiVersion, kind,
+                                    uid?'
+                                  type: string
+                                optional:
+                                  description: Specify whether the Secret or its key
+                                    must be defined
+                                  type: boolean
+                              required:
+                              - key
+                              type: object
+                            caSecrets:
                               description: The Secrets name and key, containing the
                                 CA certificate(s) used to connect to remote Maven
                                 repositories. It can contain X.509 certificates, and
@@ -287,6 +314,7 @@ spec:
                                 type: object
                               type: array
                             servers:
+                              description: Servers (auth)
                               items:
                                 properties:
                                   configuration:
diff --git a/helm/camel-k/crds/crd-integration-platform.yaml b/helm/camel-k/crds/crd-integration-platform.yaml
index b54d09be6..91884f24f 100644
--- a/helm/camel-k/crds/crd-integration-platform.yaml
+++ b/helm/camel-k/crds/crd-integration-platform.yaml
@@ -95,6 +95,31 @@ spec:
                       applications
                     properties:
                       caSecret:
+                        description: 'Deprecated: use CASecrets The Secret name and
+                          key, containing the CA certificate(s) used to connect to
+                          remote Maven repositories. It can contain X.509 certificates,
+                          and PKCS#7 formatted certificate chains. A JKS formatted
+                          keystore is automatically created to store the CA certificate(s),
+                          and configured to be used as a trusted certificate(s) by
+                          the Maven commands. Note that the root CA certificates are
+                          also imported into the created keystore.'
+                        properties:
+                          key:
+                            description: The key of the secret to select from.  Must
+                              be a valid secret key.
+                            type: string
+                          name:
+                            description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+                              TODO: Add other useful fields. apiVersion, kind, uid?'
+                            type: string
+                          optional:
+                            description: Specify whether the Secret or its key must
+                              be defined
+                            type: boolean
+                        required:
+                        - key
+                        type: object
+                      caSecrets:
                         description: The Secrets name and key, containing the CA certificate(s)
                           used to connect to remote Maven repositories. It can contain
                           X.509 certificates, and PKCS#7 formatted certificate chains.
@@ -156,21 +181,6 @@ spec:
                           type: string
                         description: The Maven properties.
                         type: object
-                      servers:
-                        items:
-                          properties:
-                            configuration:
-                              additionalProperties:
-                                type: string
-                              type: object
-                            id:
-                              type: string
-                            password:
-                              type: string
-                            username:
-                              type: string
-                          type: object
-                        type: array
                       settings:
                         description: A reference to the ConfigMap or Secret key that
                           contains the Maven settings.
@@ -360,6 +370,31 @@ spec:
                       applications
                     properties:
                       caSecret:
+                        description: 'Deprecated: use CASecrets The Secret name and
+                          key, containing the CA certificate(s) used to connect to
+                          remote Maven repositories. It can contain X.509 certificates,
+                          and PKCS#7 formatted certificate chains. A JKS formatted
+                          keystore is automatically created to store the CA certificate(s),
+                          and configured to be used as a trusted certificate(s) by
+                          the Maven commands. Note that the root CA certificates are
+                          also imported into the created keystore.'
+                        properties:
+                          key:
+                            description: The key of the secret to select from.  Must
+                              be a valid secret key.
+                            type: string
+                          name:
+                            description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+                              TODO: Add other useful fields. apiVersion, kind, uid?'
+                            type: string
+                          optional:
+                            description: Specify whether the Secret or its key must
+                              be defined
+                            type: boolean
+                        required:
+                        - key
+                        type: object
+                      caSecrets:
                         description: The Secrets name and key, containing the CA certificate(s)
                           used to connect to remote Maven repositories. It can contain
                           X.509 certificates, and PKCS#7 formatted certificate chains.
@@ -421,21 +456,6 @@ spec:
                           type: string
                         description: The Maven properties.
                         type: object
-                      servers:
-                        items:
-                          properties:
-                            configuration:
-                              additionalProperties:
-                                type: string
-                              type: object
-                            id:
-                              type: string
-                            password:
-                              type: string
-                            username:
-                              type: string
-                          type: object
-                        type: array
                       settings:
                         description: A reference to the ConfigMap or Secret key that
                           contains the Maven settings.
diff --git a/pkg/apis/camel/v1/build_types.go b/pkg/apis/camel/v1/build_types.go
index 2011cba54..f045fa644 100644
--- a/pkg/apis/camel/v1/build_types.go
+++ b/pkg/apis/camel/v1/build_types.go
@@ -87,6 +87,8 @@ type MavenBuildSpec struct {
 	MavenSpec `json:",inline"`
 	// additional repositories
 	Repositories []Repository `json:"repositories,omitempty"`
+	// Servers (auth)
+	Servers []Server `json:"servers,omitempty"`
 }
 
 // PublishTask image publish configuration
diff --git a/pkg/apis/camel/v1/maven_types.go b/pkg/apis/camel/v1/maven_types.go
index 29313c93f..7716cd777 100644
--- a/pkg/apis/camel/v1/maven_types.go
+++ b/pkg/apis/camel/v1/maven_types.go
@@ -32,17 +32,24 @@ type MavenSpec struct {
 	// A reference to the ConfigMap or Secret key that contains
 	// the Maven settings.
 	Settings ValueSource `json:"settings,omitempty"`
+	// Deprecated: use CASecrets
+	// The Secret name and key, containing the CA certificate(s) used to connect
+	// to remote Maven repositories.
+	// It can contain X.509 certificates, and PKCS#7 formatted certificate chains.
+	// A JKS formatted keystore is automatically created to store the CA certificate(s),
+	// and configured to be used as a trusted certificate(s) by the Maven commands.
+	// Note that the root CA certificates are also imported into the created keystore.
+	CASecret *corev1.SecretKeySelector `json:"caSecret,omitempty"`
 	// The Secrets name and key, containing the CA certificate(s) used to connect
 	// to remote Maven repositories.
 	// It can contain X.509 certificates, and PKCS#7 formatted certificate chains.
 	// A JKS formatted keystore is automatically created to store the CA certificate(s),
 	// and configured to be used as a trusted certificate(s) by the Maven commands.
 	// Note that the root CA certificates are also imported into the created keystore.
-	CASecret []corev1.SecretKeySelector `json:"caSecret,omitempty"`
+	CASecrets []corev1.SecretKeySelector `json:"caSecrets,omitempty"`
 	// The Maven build extensions.
 	// See https://maven.apache.org/guides/mini/guide-using-extensions.html.
 	Extension []MavenArtifact `json:"extension,omitempty"`
-	Servers   []Server        `json:"servers,omitempty"`
 	// The CLI options that are appended to the list of arguments for Maven commands,
 	// e.g., `-V,--no-transfer-progress,-Dstyle.color=never`.
 	// See https://maven.apache.org/ref/3.8.4/maven-embedder/cli.html.
diff --git a/pkg/apis/camel/v1/zz_generated.deepcopy.go b/pkg/apis/camel/v1/zz_generated.deepcopy.go
index 1b10f15d9..e787e152d 100644
--- a/pkg/apis/camel/v1/zz_generated.deepcopy.go
+++ b/pkg/apis/camel/v1/zz_generated.deepcopy.go
@@ -1262,6 +1262,13 @@ func (in *MavenBuildSpec) DeepCopyInto(out *MavenBuildSpec) {
 		*out = make([]Repository, len(*in))
 		copy(*out, *in)
 	}
+	if in.Servers != nil {
+		in, out := &in.Servers, &out.Servers
+		*out = make([]Server, len(*in))
+		for i := range *in {
+			(*in)[i].DeepCopyInto(&(*out)[i])
+		}
+	}
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MavenBuildSpec.
@@ -1287,6 +1294,11 @@ func (in *MavenSpec) DeepCopyInto(out *MavenSpec) {
 	in.Settings.DeepCopyInto(&out.Settings)
 	if in.CASecret != nil {
 		in, out := &in.CASecret, &out.CASecret
+		*out = new(corev1.SecretKeySelector)
+		(*in).DeepCopyInto(*out)
+	}
+	if in.CASecrets != nil {
+		in, out := &in.CASecrets, &out.CASecrets
 		*out = make([]corev1.SecretKeySelector, len(*in))
 		for i := range *in {
 			(*in)[i].DeepCopyInto(&(*out)[i])
@@ -1297,13 +1309,6 @@ func (in *MavenSpec) DeepCopyInto(out *MavenSpec) {
 		*out = make([]MavenArtifact, len(*in))
 		copy(*out, *in)
 	}
-	if in.Servers != nil {
-		in, out := &in.Servers, &out.Servers
-		*out = make([]Server, len(*in))
-		for i := range *in {
-			(*in)[i].DeepCopyInto(&(*out)[i])
-		}
-	}
 	if in.CLIOptions != nil {
 		in, out := &in.CLIOptions, &out.CLIOptions
 		*out = make([]string, len(*in))
diff --git a/pkg/builder/project.go b/pkg/builder/project.go
index 97fbf903d..6efa153d5 100644
--- a/pkg/builder/project.go
+++ b/pkg/builder/project.go
@@ -24,6 +24,8 @@ import (
 	"regexp"
 	"strings"
 
+	corev1 "k8s.io/api/core/v1"
+
 	v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
 	"github.com/apache/camel-k/pkg/util/camel"
 	"github.com/apache/camel-k/pkg/util/jvm"
@@ -76,11 +78,12 @@ func cleanUpBuildDir(ctx *builderContext) error {
 }
 
 func generateJavaKeystore(ctx *builderContext) error {
-	if ctx.Build.Maven.CASecret == nil {
+	// nolint: staticcheck
+	secrets := mergeSecrets(ctx.Build.Maven.CASecrets, ctx.Build.Maven.CASecret)
+	if secrets == nil {
 		return nil
 	}
-
-	certsData, err := kubernetes.GetSecretsRefData(ctx.C, ctx.Client, ctx.Namespace, ctx.Build.Maven.CASecret)
+	certsData, err := kubernetes.GetSecretsRefData(ctx.C, ctx.Client, ctx.Namespace, secrets)
 	if err != nil {
 		return err
 	}
@@ -91,6 +94,16 @@ func generateJavaKeystore(ctx *builderContext) error {
 	return jvm.GenerateKeystore(ctx.C, ctx.Path, ctx.Maven.TrustStoreName, ctx.Maven.TrustStorePass, certsData)
 }
 
+func mergeSecrets(secrets []corev1.SecretKeySelector, secret *corev1.SecretKeySelector) []corev1.SecretKeySelector {
+	if secrets == nil && secret == nil {
+		return nil
+	}
+	if secret == nil {
+		return secrets
+	}
+	return append(secrets, *secret)
+}
+
 func generateProjectSettings(ctx *builderContext) error {
 	val, err := kubernetes.ResolveValueSource(ctx.C, ctx.Client, ctx.Namespace, &ctx.Build.Maven.Settings)
 	if err != nil {
diff --git a/pkg/cmd/install.go b/pkg/cmd/install.go
index bf4f0b07c..24abcf4a3 100644
--- a/pkg/cmd/install.go
+++ b/pkg/cmd/install.go
@@ -432,7 +432,7 @@ func (o *installCmdOptions) install(cobraCmd *cobra.Command, _ []string) error {
 			if err != nil {
 				return err
 			}
-			platform.Spec.Build.Maven.CASecret = append(platform.Spec.Build.Maven.CASecret, *secret)
+			platform.Spec.Build.Maven.CASecrets = append(platform.Spec.Build.Maven.CASecrets, *secret)
 		}
 
 		if o.ClusterType != "" {
diff --git a/pkg/cmd/run.go b/pkg/cmd/run.go
index b7b4bd597..c470fd742 100644
--- a/pkg/cmd/run.go
+++ b/pkg/cmd/run.go
@@ -59,6 +59,7 @@ import (
 
 	v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
 	"github.com/apache/camel-k/pkg/client"
+	platformutil "github.com/apache/camel-k/pkg/platform"
 	"github.com/apache/camel-k/pkg/trait"
 	"github.com/apache/camel-k/pkg/util"
 	"github.com/apache/camel-k/pkg/util/defaults"
@@ -587,13 +588,13 @@ func (o *runCmdOptions) createOrUpdateIntegration(cmd *cobra.Command, c client.C
 				if !contains(o.Traits, "registry.enabled=false") {
 					o.Traits = append(o.Traits, "registry.enabled=true")
 				}
-				platform, err = getPlatform(o.Context, c, integration.Namespace)
+				platform, err = platformutil.GetOrFindForResource(o.Context, c, integration, true)
 				if err != nil {
 					return nil, err
 				}
 				if platform.Spec.Build.Registry.CA != "" {
 					fmt.Printf("We've noticed the image registry is configured with a custom certificate [%s] \n", platform.Spec.Build.Registry.CA)
-					fmt.Println("Please make sure Node.js is configured to use it or the operation will fail.")
+					fmt.Println("Please make sure Kamel CLI is configured to use it or the operation will fail.")
 					fmt.Println("More information can be found here https://nodejs.org/api/cli.html#cli_node_extra_ca_certs_file")
 				}
 				if platform.Spec.Build.Registry.Secret != "" {
@@ -781,19 +782,6 @@ func resolvePodTemplate(ctx context.Context, cmd *cobra.Command, templateSrc str
 	return err
 }
 
-func getPlatform(context context.Context, c client.Client, ns string) (*v1.IntegrationPlatform, error) {
-	list := v1.NewIntegrationPlatformList()
-	if err := c.List(context, &list, ctrl.InNamespace(ns)); err != nil {
-		return nil, errors.Wrap(err, fmt.Sprintf("could not retrieve integration platform from namespace %s", ns))
-	}
-	if len(list.Items) > 1 {
-		return nil, fmt.Errorf("expected 1 integration platform in the namespace, found: %d", len(list.Items))
-	} else if len(list.Items) == 0 {
-		return nil, errors.New("no integration platforms found in the namespace: run \"kamel install\" to install the platform")
-	}
-	return &list.Items[0], nil
-}
-
 func uploadFileOrDirectory(platform *v1.IntegrationPlatform, item string, integrationName string, cmd *cobra.Command, integration *v1.Integration) error {
 	path := strings.TrimPrefix(item, "file://")
 	localPath := path
@@ -839,7 +827,7 @@ func uploadFileOrDirectory(platform *v1.IntegrationPlatform, item string, integr
 			if err != nil {
 				return err
 			}
-			dependency := fmt.Sprintf("docker-mvn:%s:%s:%s:%s@%s", gav.GroupID, gav.ArtifactID, gav.Type, gav.Version, mountPath)
+			dependency := fmt.Sprintf("registry-mvn:%s:%s:%s:%s@%s", gav.GroupID, gav.ArtifactID, gav.Type, gav.Version, mountPath)
 			fmt.Printf("Added %s to the Integration's dependency list \n", dependency)
 			integration.Spec.AddDependency(dependency)
 			return uploadAsMavenArtifact(gav, path, platform, integration.Namespace, options)
diff --git a/pkg/resources/resources.go b/pkg/resources/resources.go
index 77376e5cf..12f6c3274 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: 38544,
+			uncompressedSize: 40381,
 
-			compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x3d\x5d\x93\x1b\x39\x6e\xef\xfa\x15\x28\xcf\x83\xc7\x55\xfa\xd8\xdd\xdb\xbb\x6c\x26\x95\x4a\xe9\xc6\xeb\x3b\xc5\x1f\xe3\x58\xb3\xbe\xbb\xb7\xa1\xba\x21\x89\xab\x6e\xb2\x43\xb2\x47\xd6\xa5\xf2\xdf\x53\x04\xd9\xad\x96\xd4\x1f\xec\xf9\xb0\x2f\xb7\xe2\x8b\x3d\x2d\x12\x04\x01\x10\x00\x41\x90\xbc\x80\xd1\xd3\x95\xc1\x05\xbc\xe3\x11\x0a\x8d\x31\x18\x09\x66\x8d\x30\xcd\x58\xb4\x46\x98\xcb\xa5\xd9\x32\x85\xf0\x46\xe6\x22\x [...]
+			compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x3d\x5d\x73\x23\xb9\x71\xef\xfa\x15\x5d\xa7\x87\xd5\x56\x89\xe4\xdd\xf9\xec\x5c\x94\x4a\xa5\x68\xed\xad\xad\xec\x87\x94\xa5\x6e\x6d\xbf\x09\x9c\x69\x92\x30\x67\x80\x09\x80\x11\x97\x4e\xe5\xbf\xa7\xd0\x00\x86\x43\x72\x3e\x30\xfa\xd8\x75\x6c\xe1\x65\x57\x43\xa0\xd1\x68\x34\xfa\x0b\x0d\xe0\x14\x46\x4f\x57\x4e\x4e\xe1\x3d\x4f\x50\x68\x4c\xc1\x48\x30\x2b\x84\x69\xc1\x92\x15\xc2\x4c\x2e\xcc\x86\x29\x84\xb7\xb2\x14\x29\x [...]
 		},
 		"/crd/bases/camel.apache.org_camelcatalogs.yaml": &vfsgen۰CompressedFileInfo{
 			name:             "camel.apache.org_camelcatalogs.yaml",
@@ -138,9 +138,9 @@ var assets = func() http.FileSystem {
 		"/crd/bases/camel.apache.org_integrationplatforms.yaml": &vfsgen۰CompressedFileInfo{
 			name:             "camel.apache.org_integrationplatforms.yaml",
 			modTime:          time.Time{},
-			uncompressedSize: 31368,
+			uncompressedSize: 33300,
 
-			compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x3d\x5d\x73\xe3\x38\x72\xef\xfa\x15\x5d\xeb\x87\x99\xad\x92\xa8\xdd\xdc\x5d\xe5\xa2\x54\x2a\xe5\xd3\x78\xf6\x1c\xcf\x8c\x1d\x4b\x33\x9b\x7b\x5a\x43\x64\x8b\xc4\x09\x04\x18\x00\x94\x46\x97\xca\x7f\x4f\xa1\x41\x52\x94\x44\x52\xb4\xc7\x7b\xb9\xda\x22\x1f\x76\x3d\x22\xd0\x68\xf4\x77\x03\xdd\xd2\x15\x4c\x5e\xef\x19\x5d\xc1\x07\x1e\xa2\x34\x18\x81\x55\x60\x13\x84\xeb\x8c\x85\x09\xc2\x42\xad\xed\x8e\x69\x84\xf7\x2a\x97\x [...]
+			compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x5d\x5f\x73\xe3\x38\x72\x7f\xd7\xa7\xe8\x5a\x3f\xcc\x6c\x95\x44\xed\xe6\xee\x2a\x17\xa5\x52\x29\x9d\xc6\xb3\xe7\x78\xc6\x76\x2c\xcd\x6c\xee\x69\x0d\x91\x2d\x12\x67\x10\x60\x00\x50\x1a\x5d\x2a\xdf\x3d\x85\x3f\xa4\x28\x89\xff\xe4\xf1\x6c\xb6\xb6\xc8\x87\x5d\x8f\x08\x34\x1a\xdd\x8d\x5f\x77\x03\xe8\xe2\x15\x4c\x5e\xef\x19\x5d\xc1\x07\x1a\x22\x57\x18\x81\x16\xa0\x13\x84\x79\x46\xc2\x04\x61\x29\x36\x7a\x47\x24\xc2\x7b\x [...]
 		},
 		"/crd/bases/camel.apache.org_integrations.yaml": &vfsgen۰CompressedFileInfo{
 			name:             "camel.apache.org_integrations.yaml",
@@ -170,9 +170,9 @@ var assets = func() http.FileSystem {
 		"/manager/operator-deployment.yaml": &vfsgen۰CompressedFileInfo{
 			name:             "operator-deployment.yaml",
 			modTime:          time.Time{},
-			uncompressedSize: 2395,
+			uncompressedSize: 2668,
 
-			compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xc4\x55\xc1\x72\xe2\x46\x10\xbd\xeb\x2b\x5e\xa1\xcb\x6e\x95\x01\x7b\x4f\x1b\xe5\xa4\xd8\x38\xa6\xe2\x08\x0a\xb1\x71\xed\x29\x35\x8c\x1a\xa9\xcb\xa3\x19\x65\x66\x04\x4b\xbe\x3e\x35\x02\x61\x60\x1d\x27\x07\x57\xed\x9c\x40\xdd\xfd\xfa\xbd\xee\xa7\x51\x8c\xe1\xfb\x9d\x28\xc6\x23\x4b\xd2\x8e\x0a\x78\x03\x5f\x11\xd2\x46\xc8\x8a\x90\x9b\xb5\xdf\x0a\x4b\xb8\x37\xad\x2e\x84\x67\xa3\xf1\x21\xcd\xef\x3f\xa2\xd5\x05\x59\x18\x4d\x [...]
+			compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xc4\x55\xd1\x6e\xe2\x46\x14\x7d\xf7\x57\x1c\xe1\x97\x5d\x29\x98\x90\xa7\xd4\x7d\x72\x13\xd2\xa0\xa6\x06\x61\xb6\xd1\x3e\x55\xc3\xf8\x62\x8f\x18\xcf\xb8\x33\x63\x58\xfa\xf5\xd5\x18\x4c\x80\x24\x74\x57\x8a\xb4\x7e\x02\xdf\x3b\xe7\x9e\x73\xee\xb1\x1d\xa2\xff\x71\x57\x10\xe2\x49\x70\x52\x96\x72\x38\x0d\x57\x12\x92\x9a\xf1\x92\x90\xe9\xa5\xdb\x30\x43\x78\xd0\x8d\xca\x99\x13\x5a\xe1\x53\x92\x3d\x7c\x46\xa3\x72\x32\xd0\x8a\x [...]
 		},
 		"/manager/operator-service-account.yaml": &vfsgen۰CompressedFileInfo{
 			name:             "operator-service-account.yaml",
@@ -566,6 +566,13 @@ var assets = func() http.FileSystem {
 
 			compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xc4\xbd\x49\x77\xdb\x3a\xb6\x36\x3c\xcf\xaf\xe0\x3a\x99\xdc\xbb\xbe\x22\xaa\x4e\x4e\x7d\xf7\xbc\x2b\xef\xc8\x51\xe2\xc4\x8e\x9d\x38\x91\x2b\x49\xd5\xe4\x2c\x88\x84\x24\x58\x24\x41\x03\xa0\x2c\xe7\xd7\xbf\x0b\x20\xd8\x4a\xd9\x6c\xbc\xe1\xab\x81\xd8\x60\xe3\xd9\xd8\x0f\x1a\xa2\xc7\xcb\x20\xc4\xfb\xbd\x78\x19\x5c\xf1\x88\x65\x8a\xc5\x81\x16\x81\xde\xb2\xe0\x2c\xa7\xd1\x96\x05\x4b\xb1\xd6\x0f\x54\xb2\xe0\x5c\x14\x59\x4c\x [...]
 		},
+		"/camel-k-catalog-1.12.0-catalog.yaml": &vfsgen۰CompressedFileInfo{
+			name:             "camel-k-catalog-1.12.0-catalog.yaml",
+			modTime:          time.Time{},
+			uncompressedSize: 89838,
+
+			compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xc4\xbd\x49\x77\xdb\x3a\xb6\x36\x3c\xcf\xaf\xe0\x3a\x99\xdc\xbb\xbe\x22\xaa\x4e\x4e\x7d\xf7\xbc\x2b\xef\xc8\x51\xe2\xc4\x8e\x9d\x38\x91\x2b\x49\xd5\xe4\x2c\x88\x84\x24\x58\x24\x41\x03\xa0\x2c\xe7\xd7\xbf\x0b\x20\xd8\x4a\xd9\x6c\xbc\xe1\xab\x81\xd8\x60\xe3\xd9\xd8\x0f\x1a\xa2\xc7\xcb\x20\xc4\xfb\xbd\x78\x19\x5c\xf1\x88\x65\x8a\xc5\x81\x16\x81\xde\xb2\xe0\x2c\xa7\xd1\x96\x05\x4b\xb1\xd6\x0f\x54\xb2\xe0\x5c\x14\x59\x4c\x [...]
+		},
 		"/traits.yaml": &vfsgen۰CompressedFileInfo{
 			name:             "traits.yaml",
 			modTime:          time.Time{},
diff --git a/pkg/trait/openapi.go b/pkg/trait/openapi.go
index 1a27c81d0..2300946b4 100644
--- a/pkg/trait/openapi.go
+++ b/pkg/trait/openapi.go
@@ -272,9 +272,11 @@ func (t *openAPITrait) createNewOpenAPIConfigMap(e *Environment, resource v1.Dat
 		return err
 	}
 	mc.GlobalSettings = data
+	// nolint: staticcheck
+	secrets := mergeSecrets(e.Platform.Status.Build.Maven.CASecrets, e.Platform.Status.Build.Maven.CASecret)
 
-	if e.Platform.Status.Build.Maven.CASecret != nil {
-		certsData, err := kubernetes.GetSecretsRefData(e.Ctx, e.Client, e.Platform.Namespace, e.Platform.Status.Build.Maven.CASecret)
+	if secrets != nil {
+		certsData, err := kubernetes.GetSecretsRefData(e.Ctx, e.Client, e.Platform.Namespace, secrets)
 		if err != nil {
 			return err
 		}
@@ -348,6 +350,16 @@ func (t *openAPITrait) createNewOpenAPIConfigMap(e *Environment, resource v1.Dat
 	return nil
 }
 
+func mergeSecrets(secrets []corev1.SecretKeySelector, secret *corev1.SecretKeySelector) []corev1.SecretKeySelector {
+	if secrets == nil && secret == nil {
+		return nil
+	}
+	if secret == nil {
+		return secrets
+	}
+	return append(secrets, *secret)
+}
+
 func (t *openAPITrait) generateMavenProject(e *Environment) (maven.Project, error) {
 	if e.CamelCatalog == nil {
 		return maven.Project{}, errors.New("unknown camel catalog")
diff --git a/pkg/trait/registry.go b/pkg/trait/registry.go
index 361d3b5d7..9e6070ac5 100644
--- a/pkg/trait/registry.go
+++ b/pkg/trait/registry.go
@@ -251,13 +251,13 @@ func addImageRegistryCaToMavenBuild(registryCa string, build *v1.BuilderTask) er
 		return err
 	}
 	contains := false
-	for _, ca := range build.Maven.CASecret {
+	for _, ca := range build.Maven.CASecrets {
 		if ca.Name == secret.Name && ca.Key == secret.Key {
 			contains = true
 		}
 	}
 	if !contains {
-		build.Maven.CASecret = append(build.Maven.CASecret, *secret)
+		build.Maven.CASecrets = append(build.Maven.CASecrets, *secret)
 	}
 	return nil
 }
diff --git a/pkg/util/camel/camel_dependencies.go b/pkg/util/camel/camel_dependencies.go
index 184e5d8b8..ae43f9c7f 100644
--- a/pkg/util/camel/camel_dependencies.go
+++ b/pkg/util/camel/camel_dependencies.go
@@ -104,10 +104,10 @@ func addDependencies(project *maven.Project, dependencies []string, catalog *Run
 			gav := strings.TrimPrefix(d, "mvn:")
 
 			project.AddEncodedDependencyGAV(gav)
-		case strings.HasPrefix(d, "docker-mvn:"):
+		case strings.HasPrefix(d, "registry-mvn:"):
 			mapping := strings.Split(d, "@")
 			outputFileRelativePath := mapping[1]
-			gavString := strings.TrimPrefix(mapping[0], "docker-mvn:")
+			gavString := strings.TrimPrefix(mapping[0], "registry-mvn:")
 			gav, err := maven.ParseGAV(gavString)
 			if err != nil {
 				return err
diff --git a/pkg/util/camel/catalog.go b/pkg/util/camel/catalog.go
index c34e2201a..375d9ba47 100644
--- a/pkg/util/camel/catalog.go
+++ b/pkg/util/camel/catalog.go
@@ -23,6 +23,7 @@ import (
 
 	yaml2 "gopkg.in/yaml.v2"
 
+	corev1 "k8s.io/api/core/v1"
 	ctrl "sigs.k8s.io/controller-runtime/pkg/client"
 
 	v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
@@ -94,8 +95,10 @@ func GenerateCatalog(
 	}
 
 	var caCerts [][]byte
-	if mvn.CASecret != nil {
-		caCerts, err = kubernetes.GetSecretsRefData(ctx, client, namespace, mvn.CASecret)
+	// nolint: staticcheck
+	secrets := mergeSecrets(mvn.CASecrets, mvn.CASecret)
+	if secrets != nil {
+		caCerts, err = kubernetes.GetSecretsRefData(ctx, client, namespace, secrets)
 		if err != nil {
 			return nil, err
 		}
@@ -104,6 +107,16 @@ func GenerateCatalog(
 	return GenerateCatalogCommon(ctx, globalSettings, []byte(userSettings), caCerts, mvn, runtime, providerDependencies)
 }
 
+func mergeSecrets(secrets []corev1.SecretKeySelector, secret *corev1.SecretKeySelector) []corev1.SecretKeySelector {
+	if secrets == nil && secret == nil {
+		return nil
+	}
+	if secret == nil {
+		return secrets
+	}
+	return append(secrets, *secret)
+}
+
 func GenerateCatalogCommon(
 	ctx context.Context,
 	globalSettings []byte,