You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by nf...@apache.org on 2021/04/29 13:12:31 UTC

[camel-k] 17/30: feat(trait): error handler Ref

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 bb48d9ae9e482117d474027320dc1a222a0b1618
Author: Pasquale Congiusti <pa...@gmail.com>
AuthorDate: Fri Apr 23 10:04:58 2021 +0200

    feat(trait): error handler Ref
---
 pkg/apis/camel/v1alpha1/error_handler_types.go | 42 ++++++++++++++++++++++++++
 pkg/controller/kameletbinding/error_handler.go |  6 ++++
 pkg/trait/error_handler.go                     |  3 ++
 3 files changed, 51 insertions(+)

diff --git a/pkg/apis/camel/v1alpha1/error_handler_types.go b/pkg/apis/camel/v1alpha1/error_handler_types.go
index df46324..949fbd6 100644
--- a/pkg/apis/camel/v1alpha1/error_handler_types.go
+++ b/pkg/apis/camel/v1alpha1/error_handler_types.go
@@ -36,6 +36,7 @@ type AbstractErrorHandler interface {
 	Type() ErrorHandlerType
 	Params() *ErrorHandlerProperties
 	Endpoint() *Endpoint
+	Ref() *string
 }
 
 // ErrorHandlerNone --
@@ -62,6 +63,11 @@ func (e ErrorHandlerNone) Endpoint() *Endpoint {
 	return nil
 }
 
+// Ref --
+func (e ErrorHandlerNone) Ref() *string {
+	return nil
+}
+
 // ErrorHandlerLog represent a default (log) error handler type
 type ErrorHandlerLog struct {
 	Parameters *ErrorHandlerProperties `json:"parameters,omitempty"`
@@ -82,6 +88,11 @@ func (e ErrorHandlerLog) Endpoint() *Endpoint {
 	return nil
 }
 
+// Ref --
+func (e ErrorHandlerLog) Ref() *string {
+	return nil
+}
+
 // ErrorHandlerDeadLetterChannel represents a dead letter channel error handler type
 type ErrorHandlerDeadLetterChannel struct {
 	*ErrorHandlerLog
@@ -103,6 +114,35 @@ func (e ErrorHandlerDeadLetterChannel) Endpoint() *Endpoint {
 	return e.DLCEndpoint
 }
 
+// Ref --
+func (e ErrorHandlerDeadLetterChannel) Ref() *string {
+	return nil
+}
+
+// ErrorHandlerRef represents a reference to an error handler builder available in the registry
+type ErrorHandlerRef string
+
+// Type --
+func (e ErrorHandlerRef) Type() ErrorHandlerType {
+	return ErrorHandlerTypeRef
+}
+
+// Params --
+func (e ErrorHandlerRef) Params() *ErrorHandlerProperties {
+	return nil
+}
+
+// Endpoint --
+func (e ErrorHandlerRef) Endpoint() *Endpoint {
+	return nil
+}
+
+// Ref --
+func (e ErrorHandlerRef) Ref() *string {
+	s := string(e)
+	return &s
+}
+
 // ErrorHandlerType --
 type ErrorHandlerType string
 
@@ -113,4 +153,6 @@ const (
 	ErrorHandlerTypeLog ErrorHandlerType = "log"
 	// ErrorHandlerTypeDeadLetterChannel --
 	ErrorHandlerTypeDeadLetterChannel ErrorHandlerType = "dead-letter-channel"
+	// ErrorHandlerTypeRef --
+	ErrorHandlerTypeRef ErrorHandlerType = "ref"
 )
diff --git a/pkg/controller/kameletbinding/error_handler.go b/pkg/controller/kameletbinding/error_handler.go
index 90ba3cc..c9858f9 100644
--- a/pkg/controller/kameletbinding/error_handler.go
+++ b/pkg/controller/kameletbinding/error_handler.go
@@ -43,6 +43,10 @@ func maybeErrorHandler(errHandlConf v1alpha1.ErrorHandler, bindingContext bindin
 			errorHandlerURI = errorHandler.URI
 		}
 
+		if errorHandlerSpec.Type() == v1alpha1.ErrorHandlerTypeRef {
+			errorHandlerURI = *errorHandlerSpec.Ref()
+		}
+
 		err = setIntegrationErrorHandler(itSpec, errorHandlerURI, errorHandlerSpec)
 		if err != nil {
 			return nil, errors.Wrap(err, "could not set integration error handler")
@@ -72,6 +76,8 @@ func parseErrorHandler(rawMessage v1.RawMessage) (v1alpha1.AbstractErrorHandler,
 			dst = new(v1alpha1.ErrorHandlerLog)
 		case v1alpha1.ErrorHandlerTypeDeadLetterChannel:
 			dst = new(v1alpha1.ErrorHandlerDeadLetterChannel)
+		case v1alpha1.ErrorHandlerTypeRef:
+			dst = new(v1alpha1.ErrorHandlerRef)
 		default:
 			return nil, errors.Errorf("Unknown error type %s, supported error types are: none, log, dead-letter-channel", errHandlType)
 		}
diff --git a/pkg/trait/error_handler.go b/pkg/trait/error_handler.go
index e82dcf9..7945372 100644
--- a/pkg/trait/error_handler.go
+++ b/pkg/trait/error_handler.go
@@ -123,6 +123,9 @@ func parseErrorHandler(errorHandlerSpec v1.ErrorHandlerSpec) (string, error) {
 		}
 
 		return fmt.Sprintf(`errorHandler(deadLetterChannel("%v")%v);`, errorHandlerSpec.URI, errorHandlerConfiguration), nil
+	case "ref":
+		// TODO using URI temporarily, fix it properly
+		return fmt.Sprintf(`errorHandler("%v");`, errorHandlerSpec.URI), nil
 	}
 
 	return "", fmt.Errorf("Cannot recognize any error handler of type %s", errorHandlerSpec.Type)