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

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

commit 34c82df0eea0b75e4dece804604732eec13d50ef
Author: Pasquale Congiusti <[email protected]>
AuthorDate: Wed Apr 21 10:04:02 2021 +0200

    refactor(trait): integration error handler spec
---
 pkg/apis/camel/v1/common_types.go       | 12 +++++++
 pkg/apis/camel/v1/integration_types.go  |  9 ++---
 pkg/controller/kameletbinding/common.go | 14 ++++----
 pkg/trait/error_handler.go              | 59 +++++----------------------------
 pkg/trait/kamelets.go                   | 19 +++++------
 5 files changed, 39 insertions(+), 74 deletions(-)

diff --git a/pkg/apis/camel/v1/common_types.go 
b/pkg/apis/camel/v1/common_types.go
index e5b327b..e1b27e1 100644
--- a/pkg/apis/camel/v1/common_types.go
+++ b/pkg/apis/camel/v1/common_types.go
@@ -162,6 +162,18 @@ type Flow struct {
        RawMessage `json:",inline"`
 }
 
+// ErrorHandlerSpec respresents an integration error handler to be used as 
default at runtime
+type ErrorHandlerSpec struct {
+       Type          string                     `json:"type,omitempty"`
+       URI           string                     `json:"uri,omitempty"`
+       Configuration *ErrorHandlerConfiguration 
`json:"configuration,omitempty"`
+}
+
+// ErrorHandlerConfiguration --
+type ErrorHandlerConfiguration struct {
+       RawMessage `json:",inline"`
+}
+
 // RuntimeProvider --
 type RuntimeProvider string
 
diff --git a/pkg/apis/camel/v1/integration_types.go 
b/pkg/apis/camel/v1/integration_types.go
index 6ba7e10..500291c 100644
--- a/pkg/apis/camel/v1/integration_types.go
+++ b/pkg/apis/camel/v1/integration_types.go
@@ -27,10 +27,11 @@ import (
 
 // IntegrationSpec defines the desired state of Integration
 type IntegrationSpec struct {
-       Replicas  *int32         `json:"replicas,omitempty"`
-       Sources   []SourceSpec   `json:"sources,omitempty"`
-       Flows     []Flow         `json:"flows,omitempty"`
-       Resources []ResourceSpec `json:"resources,omitempty"`
+       Replicas     *int32           `json:"replicas,omitempty"`
+       Sources      []SourceSpec     `json:"sources,omitempty"`
+       ErrorHandler ErrorHandlerSpec `json:"errorHandler,omitempty"`
+       Flows        []Flow           `json:"flows,omitempty"`
+       Resources    []ResourceSpec   `json:"resources,omitempty"`
        // Deprecated: use the IntegrationKit field
        Kit                string                  `json:"kit,omitempty"`
        IntegrationKit     *corev1.ObjectReference 
`json:"integrationKit,omitempty"`
diff --git a/pkg/controller/kameletbinding/common.go 
b/pkg/controller/kameletbinding/common.go
index a63780f..13e13fe 100644
--- a/pkg/controller/kameletbinding/common.go
+++ b/pkg/controller/kameletbinding/common.go
@@ -86,9 +86,9 @@ func createIntegrationFor(ctx context.Context, c 
client.Client, kameletbinding *
                        return nil, errors.Wrap(err, "could not determine error 
handler URI")
                }
 
-               err = setErrorHandlerKamelet(errorHandler, 
kameletbinding.Spec.ErrorHandler)
+               err = setIntegrationErrorHandler(&it.Spec, errorHandler, 
kameletbinding.Spec.ErrorHandler)
                if err != nil {
-                       return nil, errors.Wrap(err, "could not set error 
handler")
+                       return nil, errors.Wrap(err, "could not set integration 
error handler")
                }
        }
 
@@ -159,14 +159,12 @@ func createIntegrationFor(ctx context.Context, c 
client.Client, kameletbinding *
        return &it, nil
 }
 
-func setErrorHandlerKamelet(errorHandler *bindings.Binding, errorHandlerSpec 
v1alpha1.ErrorHandler) error {
-       if errorHandler.ApplicationProperties == nil {
-               errorHandler.ApplicationProperties = make(map[string]string)
+func setIntegrationErrorHandler(it *v1.IntegrationSpec, errorHandler 
*bindings.Binding, errorHandlerSpec v1alpha1.ErrorHandler) error {
+       it.ErrorHandler = v1.ErrorHandlerSpec{
+               URI:  errorHandler.URI,
+               Type: string(errorHandlerSpec.Type),
        }
 
-       errorHandler.ApplicationProperties["camel.k.default-error-handler.uri"] 
= errorHandler.URI
-       
errorHandler.ApplicationProperties["camel.k.default-error-handler.type"] = 
string(errorHandlerSpec.Type)
-
        return nil
 }
 
diff --git a/pkg/trait/error_handler.go b/pkg/trait/error_handler.go
index 7101d9e..228ed12 100644
--- a/pkg/trait/error_handler.go
+++ b/pkg/trait/error_handler.go
@@ -19,10 +19,8 @@ package trait
 
 import (
        "fmt"
-       "strings"
 
        v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
-       "github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
 )
 
 // The error handler is a platform trait used to inject Error Handler source 
into the integration runtime.
@@ -30,12 +28,7 @@ import (
 // +camel-k:trait=error-handler
 type errorHandlerTrait struct {
        BaseTrait `property:",squash"`
-       // Automatically inject all referenced Kamelets and their default 
configuration (enabled by default)
-       Auto *bool `property:"auto"`
-
-       // TODO move into a struct
-       ErrorHandlerURI  string
-       ErrorHandlerType string
+       Auto      *bool `property:"auto"`
 }
 
 func newErrorHandlerTrait() Trait {
@@ -58,50 +51,14 @@ func (t *errorHandlerTrait) Configure(e *Environment) 
(bool, error) {
                return false, nil
        }
 
-       if t.Auto == nil || *t.Auto {
-               if t.ErrorHandlerType == "" {
-                       t.ErrorHandlerType = 
maybeErrorHandler(e.Integration.Configurations())
-                       if t.ErrorHandlerType != "" && 
v1alpha1.ErrorHandlerType(t.ErrorHandlerType) == 
v1alpha1.ErrorHandlerTypeDeadLetterChannel {
-                               t.ErrorHandlerURI = 
maybeKameletAsDefaultErrorHandler(e.Integration.Configurations())
-                       }
-               }
-       }
-
-       return t.ErrorHandlerType != "", nil
-}
-
-func maybeErrorHandler(properties []v1.ConfigurationSpec) string {
-       for _, property := range properties {
-               if strings.HasPrefix(property.Value, 
"camel.k.default-error-handler.type=") {
-                       split := strings.Split(property.Value, "=")
-                       if len(split) > 0 {
-                               return split[1]
-                       }
-               }
-       }
-
-       return ""
-}
-
-func maybeKameletAsDefaultErrorHandler(properties []v1.ConfigurationSpec) 
string {
-       for _, property := range properties {
-               if strings.HasPrefix(property.Value, 
"camel.k.default-error-handler.uri=") {
-                       split := strings.Split(property.Value, "=")
-                       if len(split) > 0 {
-                               return split[1]
-                       }
-               }
-       }
-
-       return ""
+       return e.Integration.Spec.ErrorHandler.Type != "", nil
 }
 
 func (t *errorHandlerTrait) Apply(e *Environment) error {
-
        if e.IntegrationInPhase(v1.IntegrationPhaseInitialization) {
-               if t.ErrorHandlerType != "" {
+               if e.Integration.Spec.ErrorHandler.Type != "" {
                        // Possible error handler
-                       err := addErrorHandlerAsSource(e, t.ErrorHandlerURI, 
t.ErrorHandlerType)
+                       err := addErrorHandlerAsSource(e)
                        if err != nil {
                                return err
                        }
@@ -110,8 +67,8 @@ func (t *errorHandlerTrait) Apply(e *Environment) error {
        return nil
 }
 
-func addErrorHandlerAsSource(e *Environment, errorHandlerURI string, 
errorHandlerType string) error {
-       errorHandlerStatement, err := parseErrorHandler(errorHandlerURI, 
errorHandlerType)
+func addErrorHandlerAsSource(e *Environment) error {
+       errorHandlerStatement, err := 
parseErrorHandler(e.Integration.Spec.ErrorHandler.URI, 
e.Integration.Spec.ErrorHandler.Type)
        if err != nil {
                return err
        }
@@ -148,14 +105,14 @@ func addErrorHandlerAsSource(e *Environment, 
errorHandlerURI string, errorHandle
        return nil
 }
 
-func parseErrorHandler(errHandlUri string, errHandlType string) (string, 
error) {
+func parseErrorHandler(errHandlURI string, errHandlType string) (string, 
error) {
        switch errHandlType {
        case "no":
                return `errorHandler(noErrorHandler());`, nil
        case "default":
                return `errorHandler(defaultErrorHandler());`, nil
        case "dead-letter-channel":
-               return fmt.Sprintf(`errorHandler(deadLetterChannel("%v"));`, 
errHandlUri), nil
+               return fmt.Sprintf(`errorHandler(deadLetterChannel("%v"));`, 
errHandlURI), nil
        }
 
        return "", fmt.Errorf("Cannot recognize any error handler of type %s", 
errHandlType)
diff --git a/pkg/trait/kamelets.go b/pkg/trait/kamelets.go
index dd4c3bb..190c17e 100644
--- a/pkg/trait/kamelets.go
+++ b/pkg/trait/kamelets.go
@@ -47,10 +47,6 @@ type kameletsTrait struct {
        Auto *bool `property:"auto"`
        // Comma separated list of Kamelet names to load into the current 
integration
        List string `property:"list"`
-
-       // TODO move into a struct
-       ErrorHandlerURI  string
-       ErrorHandlerType string
 }
 
 type configurationKey struct {
@@ -111,13 +107,10 @@ func (t *kameletsTrait) Configure(e *Environment) (bool, 
error) {
                        })
                        sort.Strings(kamelets)
                }
-               if t.ErrorHandlerType == "" {
-                       t.ErrorHandlerType = 
maybeErrorHandler(e.Integration.Configurations())
-                       if t.ErrorHandlerType != "" && 
v1alpha1.ErrorHandlerType(t.ErrorHandlerType) == 
v1alpha1.ErrorHandlerTypeDeadLetterChannel {
-                               t.ErrorHandlerURI = 
maybeKameletAsDefaultErrorHandler(e.Integration.Configurations())
-                               if strings.HasPrefix(t.ErrorHandlerURI, 
"kamelet:") {
-                                       kamelets = append(kamelets, 
extractKamelet(t.ErrorHandlerURI))
-                               }
+               // Check if a Kamelet is configured as default error handler
+               if e.Integration.Spec.ErrorHandler.URI != "" {
+                       if 
strings.HasPrefix(e.Integration.Spec.ErrorHandler.URI, "kamelet:") {
+                               kamelets = append(kamelets, 
extractKamelet(e.Integration.Spec.ErrorHandler.URI))
                        }
                }
 
@@ -132,8 +125,12 @@ func (t *kameletsTrait) declaredKamelets() bool {
 }
 
 func (t *kameletsTrait) Apply(e *Environment) error {
+<<<<<<< HEAD
 
        if e.IntegrationInPhase(v1.IntegrationPhaseInitialization, 
v1.IntegrationPhaseRunning) {
+=======
+       if e.IntegrationInPhase(v1.IntegrationPhaseInitialization) {
+>>>>>>> refactor(trait): integration error handler spec
                if err := t.addKamelets(e); err != nil {
                        return err
                }

Reply via email to