This is an automated email from the ASF dual-hosted git repository. nferraro pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel-k.git
The following commit(s) were added to refs/heads/master by this push: new 2589ee3 Fix #1774: use direct HTTP binding when Knative is not in use 2589ee3 is described below commit 2589ee316606ef11f70e8f6da032f6fc1a864a4a Author: nicolaferraro <ni.ferr...@gmail.com> AuthorDate: Fri Oct 23 12:07:58 2020 +0200 Fix #1774: use direct HTTP binding when Knative is not in use --- addons/strimzi/strimzi_test.go | 3 +++ pkg/controller/kameletbinding/initialize.go | 39 +++++++++++++++++++++++++++++ pkg/util/bindings/api.go | 2 ++ pkg/util/bindings/bindings_test.go | 15 +++++++++++ pkg/util/bindings/knative_uri.go | 4 +++ 5 files changed, 63 insertions(+) diff --git a/addons/strimzi/strimzi_test.go b/addons/strimzi/strimzi_test.go index 627283c..13fd4ed 100644 --- a/addons/strimzi/strimzi_test.go +++ b/addons/strimzi/strimzi_test.go @@ -22,6 +22,7 @@ import ( "encoding/json" "github.com/apache/camel-k/addons/strimzi/duck/v1beta1" "github.com/apache/camel-k/addons/strimzi/duck/v1beta1/client/internalclientset/fake" + camelv1 "github.com/apache/camel-k/pkg/apis/camel/v1" "github.com/apache/camel-k/pkg/apis/camel/v1alpha1" "github.com/apache/camel-k/pkg/util/bindings" "github.com/apache/camel-k/pkg/util/test" @@ -42,6 +43,7 @@ func TestStrimziDirect(t *testing.T) { Ctx: ctx, Client: client, Namespace: "test", + Profile: camelv1.TraitProfileKubernetes, } endpoint := v1alpha1.Endpoint{ @@ -102,6 +104,7 @@ func TestStrimziLookup(t *testing.T) { bindingContext := bindings.BindingContext{ Ctx: ctx, Namespace: "test", + Profile: camelv1.TraitProfileKubernetes, } endpoint := v1alpha1.Endpoint{ diff --git a/pkg/controller/kameletbinding/initialize.go b/pkg/controller/kameletbinding/initialize.go index d3874d6..8f794d6 100644 --- a/pkg/controller/kameletbinding/initialize.go +++ b/pkg/controller/kameletbinding/initialize.go @@ -24,11 +24,14 @@ import ( v1 "github.com/apache/camel-k/pkg/apis/camel/v1" "github.com/apache/camel-k/pkg/apis/camel/v1alpha1" + "github.com/apache/camel-k/pkg/platform" "github.com/apache/camel-k/pkg/util/bindings" + "github.com/apache/camel-k/pkg/util/knative" "github.com/apache/camel-k/pkg/util/kubernetes" "github.com/apache/camel-k/pkg/util/patch" "github.com/pkg/errors" corev1 "k8s.io/api/core/v1" + k8serrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" "sigs.k8s.io/controller-runtime/pkg/client" @@ -75,10 +78,17 @@ func (action *initializeAction) Handle(ctx context.Context, kameletbinding *v1al it.Spec = *kameletbinding.Spec.Integration.DeepCopy() } + profile, err := action.determineProfile(ctx, kameletbinding) + if err != nil { + return nil, err + } + it.Spec.Profile = profile + bindingContext := bindings.BindingContext{ Ctx: ctx, Client: action.client, Namespace: it.Namespace, + Profile: profile, } from, err := bindings.Translate(bindingContext, v1alpha1.EndpointTypeSource, kameletbinding.Spec.Source) @@ -183,3 +193,32 @@ func (action *initializeAction) findIcon(ctx context.Context, binding *v1alpha1. } return kamelet.Annotations[v1alpha1.AnnotationIcon], nil } + +func (action *initializeAction) determineProfile(ctx context.Context, binding *v1alpha1.KameletBinding) (v1.TraitProfile, error) { + if binding.Spec.Integration != nil && binding.Spec.Integration.Profile != "" { + return binding.Spec.Integration.Profile, nil + } + pl, err := platform.GetCurrentPlatform(ctx, action.client, binding.Namespace) + if err != nil && !k8serrors.IsNotFound(err) { + return "", errors.Wrap(err, "error while retrieving the integration platform") + } + if pl != nil { + if pl.Status.Profile != "" { + return pl.Status.Profile, nil + } + if pl.Spec.Profile != "" { + return pl.Spec.Profile, nil + } + } + if knative.IsEnabledInNamespace(ctx, action.client, binding.Namespace) { + return v1.TraitProfileKnative, nil + } + if pl != nil { + // Determine profile from cluster type + plProfile := platform.GetProfile(pl) + if plProfile != "" { + return plProfile, nil + } + } + return v1.DefaultTraitProfile, nil +} diff --git a/pkg/util/bindings/api.go b/pkg/util/bindings/api.go index f07d8cc..05ea123 100644 --- a/pkg/util/bindings/api.go +++ b/pkg/util/bindings/api.go @@ -20,6 +20,7 @@ package bindings import ( "context" + v1 "github.com/apache/camel-k/pkg/apis/camel/v1" "github.com/apache/camel-k/pkg/apis/camel/v1alpha1" "github.com/apache/camel-k/pkg/client" @@ -53,4 +54,5 @@ type BindingContext struct { Ctx context.Context Client client.Client Namespace string + Profile v1.TraitProfile } diff --git a/pkg/util/bindings/bindings_test.go b/pkg/util/bindings/bindings_test.go index 385febf..266402a 100644 --- a/pkg/util/bindings/bindings_test.go +++ b/pkg/util/bindings/bindings_test.go @@ -36,6 +36,7 @@ func TestBindings(t *testing.T) { testcases := []struct { endpointType v1alpha1.EndpointType endpoint v1alpha1.Endpoint + profile camelv1.TraitProfile uri string traits map[string]camelv1.TraitSpec }{ @@ -160,6 +161,14 @@ func TestBindings(t *testing.T) { { endpointType: v1alpha1.EndpointTypeSink, endpoint: v1alpha1.Endpoint{ + URI: asStringPointer("https://myurl/hey"), + }, + profile: camelv1.TraitProfileKubernetes, + uri: "https://myurl/hey", + }, + { + endpointType: v1alpha1.EndpointTypeSink, + endpoint: v1alpha1.Endpoint{ URI: asStringPointer("docker://xxx"), }, uri: "docker://xxx", @@ -174,10 +183,16 @@ func TestBindings(t *testing.T) { client, err := test.NewFakeClient() assert.NoError(t, err) + profile := tc.profile + if profile == "" { + profile = camelv1.TraitProfileKnative + } + bindingContext := BindingContext{ Ctx: ctx, Client: client, Namespace: "test", + Profile: profile, } binding, err := Translate(bindingContext, tc.endpointType, tc.endpoint) diff --git a/pkg/util/bindings/knative_uri.go b/pkg/util/bindings/knative_uri.go index 88bdd0c..01cafa5 100644 --- a/pkg/util/bindings/knative_uri.go +++ b/pkg/util/bindings/knative_uri.go @@ -40,6 +40,10 @@ func (k KnativeURIBindingProvider) Translate(ctx BindingContext, endpointType v1 // works only on uris return nil, nil } + if ctx.Profile != v1.TraitProfileKnative { + // use cloudevent binding only in Knative trait profile + return nil, nil + } if !strings.HasPrefix(*e.URI, "http:") && !strings.HasPrefix(*e.URI, "https:") { // only translates http/https uri to Knative calls return nil, nil