You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ts...@apache.org on 2022/07/08 06:12:01 UTC

[camel-k] 06/14: fix(api): fix Trait property name conflicts for generating CRDs

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

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

commit 1707ed18763c153aa8c1f08cdc4791672c2c5a98
Author: Tadayoshi Sato <sa...@gmail.com>
AuthorDate: Wed Jun 29 20:07:23 2022 +0900

    fix(api): fix Trait property name conflicts for generating CRDs
---
 pkg/apis/camel/v1/common_types.go  | 7 +++----
 pkg/apis/camel/v1/trait/base.go    | 3 +++
 pkg/apis/camel/v1/trait/knative.go | 2 +-
 pkg/trait/trait_configure.go       | 7 +++++++
 4 files changed, 14 insertions(+), 5 deletions(-)

diff --git a/pkg/apis/camel/v1/common_types.go b/pkg/apis/camel/v1/common_types.go
index f49bc83e1..a0906a52d 100644
--- a/pkg/apis/camel/v1/common_types.go
+++ b/pkg/apis/camel/v1/common_types.go
@@ -209,13 +209,12 @@ type TraitConfiguration struct {
 	RawMessage `json:",inline"`
 }
 
-// +kubebuilder:validation:Type=object
-// +kubebuilder:validation:Format=""
-// +kubebuilder:pruning:PreserveUnknownFields
-
 // RawMessage is a raw encoded JSON value.
 // It implements Marshaler and Unmarshaler and can
 // be used to delay JSON decoding or precompute a JSON encoding.
+// +kubebuilder:validation:Type=object
+// +kubebuilder:validation:Format=""
+// +kubebuilder:pruning:PreserveUnknownFields
 type RawMessage []byte
 
 // +kubebuilder:object:generate=false
diff --git a/pkg/apis/camel/v1/trait/base.go b/pkg/apis/camel/v1/trait/base.go
index 5117e1ac9..8c571ba02 100644
--- a/pkg/apis/camel/v1/trait/base.go
+++ b/pkg/apis/camel/v1/trait/base.go
@@ -32,5 +32,8 @@ type Configuration struct {
 	RawMessage `json:",inline"`
 }
 
+// +kubebuilder:validation:Type=object
+// +kubebuilder:validation:Format=""
+// +kubebuilder:pruning:PreserveUnknownFields
 // Deprecated: for backward compatibility.
 type RawMessage []byte
diff --git a/pkg/apis/camel/v1/trait/knative.go b/pkg/apis/camel/v1/trait/knative.go
index 13590557a..666953b08 100644
--- a/pkg/apis/camel/v1/trait/knative.go
+++ b/pkg/apis/camel/v1/trait/knative.go
@@ -29,7 +29,7 @@ package trait
 type KnativeTrait struct {
 	Trait `property:",squash" json:",inline"`
 	// Can be used to inject a Knative complete configuration in JSON format.
-	Configuration string `property:"configuration" json:"configuration,omitempty"`
+	Configuration string `property:"configuration" json:"config,omitempty"`
 	// List of channels used as source of integration routes.
 	// Can contain simple channel names or full Camel URIs.
 	ChannelSources []string `property:"channel-sources" json:"channelSources,omitempty"`
diff --git a/pkg/trait/trait_configure.go b/pkg/trait/trait_configure.go
index f50fc26d2..94ae5578f 100644
--- a/pkg/trait/trait_configure.go
+++ b/pkg/trait/trait_configure.go
@@ -100,6 +100,13 @@ func decodeTrait(in map[string]interface{}, target Trait, root bool) error {
 	// decode legacy configuration first if it exists
 	if root && in["configuration"] != nil {
 		if config, ok := in["configuration"].(map[string]interface{}); ok {
+			// for traits that had the same property name "configuration",
+			// it needs to be renamed to "config" to avoid naming conflicts
+			// (e.g. Knative trait).
+			if config["configuration"] != nil {
+				config["config"] = config["configuration"]
+			}
+
 			if err := decodeTrait(config, target, false); err != nil {
 				return err
 			}