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/02/02 13:49:14 UTC
[camel-k] branch master updated: Fix #1986: use properties instead
of URL encoding for Kamelets in bindings
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 e136317 Fix #1986: use properties instead of URL encoding for Kamelets in bindings
e136317 is described below
commit e136317de71f5c69f8f1c695371cac81c245e08f
Author: nicolaferraro <ni...@gmail.com>
AuthorDate: Tue Feb 2 13:30:35 2021 +0100
Fix #1986: use properties instead of URL encoding for Kamelets in bindings
---
pkg/controller/kameletbinding/common.go | 19 +++++++++++++++++++
pkg/util/bindings/api.go | 2 ++
pkg/util/bindings/bindings_test.go | 17 ++++++++++++++---
pkg/util/bindings/kamelet.go | 24 ++++++++++++++++++------
script/gen_release_notes.sh | 4 ++--
5 files changed, 55 insertions(+), 11 deletions(-)
diff --git a/pkg/controller/kameletbinding/common.go b/pkg/controller/kameletbinding/common.go
index a50b202..1fc8dc6 100644
--- a/pkg/controller/kameletbinding/common.go
+++ b/pkg/controller/kameletbinding/common.go
@@ -20,6 +20,8 @@ package kameletbinding
import (
"context"
"encoding/json"
+ "fmt"
+ "sort"
v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
"github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
@@ -90,6 +92,23 @@ func createIntegrationFor(ctx context.Context, c client.Client, kameletbinding *
}
}
+ if len(from.ApplicationProperties) > 0 || len(to.ApplicationProperties) > 0 {
+ propList := make([]string, 0, len(from.ApplicationProperties)+len(to.ApplicationProperties))
+ for k, v := range from.ApplicationProperties {
+ propList = append(propList, fmt.Sprintf("%s=%s", k, v))
+ }
+ for k, v := range to.ApplicationProperties {
+ propList = append(propList, fmt.Sprintf("%s=%s", k, v))
+ }
+ sort.Strings(propList)
+ for _, p := range propList {
+ it.Spec.Configuration = append(it.Spec.Configuration, v1.ConfigurationSpec{
+ Type: "property",
+ Value: p,
+ })
+ }
+ }
+
flow := map[string]interface{}{
"from": map[string]interface{}{
"uri": from.URI,
diff --git a/pkg/util/bindings/api.go b/pkg/util/bindings/api.go
index 05ea123..f5debd3 100644
--- a/pkg/util/bindings/api.go
+++ b/pkg/util/bindings/api.go
@@ -38,6 +38,8 @@ type Binding struct {
URI string
// Traits is a partial trait specification that should be merged into the integration
Traits map[string]v1.TraitSpec
+ // ApplicationProperties contain properties that should be set on the integration for the binding to work
+ ApplicationProperties map[string]string
}
// BindingProvider maps a KameletBinding endpoint into Camel K resources
diff --git a/pkg/util/bindings/bindings_test.go b/pkg/util/bindings/bindings_test.go
index 55d005f..084309a 100644
--- a/pkg/util/bindings/bindings_test.go
+++ b/pkg/util/bindings/bindings_test.go
@@ -39,6 +39,7 @@ func TestBindings(t *testing.T) {
profile camelv1.TraitProfile
uri string
traits map[string]camelv1.TraitSpec
+ props map[string]string
}{
{
endpointType: v1alpha1.EndpointTypeSink,
@@ -113,6 +114,7 @@ func TestBindings(t *testing.T) {
uri: "knative:event/myeventtype?apiVersion=eventing.knative.dev%2Fv1beta1&kind=Broker",
},
{
+ endpointType: v1alpha1.EndpointTypeSource,
endpoint: v1alpha1.Endpoint{
Ref: &corev1.ObjectReference{
Kind: "Kamelet",
@@ -120,9 +122,10 @@ func TestBindings(t *testing.T) {
Name: "mykamelet",
},
},
- uri: "kamelet:mykamelet",
+ uri: "kamelet:mykamelet/source",
},
{
+ endpointType: v1alpha1.EndpointTypeSink,
endpoint: v1alpha1.Endpoint{
Ref: &corev1.ObjectReference{
Kind: "Kamelet",
@@ -134,7 +137,11 @@ func TestBindings(t *testing.T) {
"encodedkey?": "encoded=val",
}),
},
- uri: "kamelet:mykamelet?encodedkey%3F=encoded%3Dval&mymessage=myval",
+ uri: "kamelet:mykamelet/sink",
+ props: map[string]string{
+ "camel.kamelet.mykamelet.sink.encodedkey?": "encoded=val",
+ "camel.kamelet.mykamelet.sink.mymessage": "myval",
+ },
},
{
endpoint: v1alpha1.Endpoint{
@@ -148,7 +155,10 @@ func TestBindings(t *testing.T) {
"mymessage": "myval",
}),
},
- uri: "kamelet:mykamelet/myid%3F?mymessage=myval",
+ uri: "kamelet:mykamelet/myid%3F",
+ props: map[string]string{
+ "camel.kamelet.mykamelet.myid?.mymessage": "myval",
+ },
},
{
endpointType: v1alpha1.EndpointTypeSink,
@@ -206,6 +216,7 @@ func TestBindings(t *testing.T) {
assert.NotNil(t, binding)
assert.Equal(t, tc.uri, binding.URI)
assert.Equal(t, tc.traits, binding.Traits)
+ assert.Equal(t, tc.props, binding.ApplicationProperties)
})
}
}
diff --git a/pkg/util/bindings/kamelet.go b/pkg/util/bindings/kamelet.go
index 089a7d4..ca83252 100644
--- a/pkg/util/bindings/kamelet.go
+++ b/pkg/util/bindings/kamelet.go
@@ -22,7 +22,6 @@ import (
"net/url"
"github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
- "github.com/apache/camel-k/pkg/util/uri"
"k8s.io/apimachinery/pkg/runtime/schema"
)
@@ -44,22 +43,35 @@ func (k KameletBindingProvider) Translate(ctx BindingContext, endpointType v1alp
}
// it translates only Kamelet refs
if e.Ref.Kind == v1alpha1.KameletKind && gv.Group == v1alpha1.SchemeGroupVersion.Group {
- kameletURI := fmt.Sprintf("kamelet:%s", url.PathEscape(e.Ref.Name))
+ kameletName := url.PathEscape(e.Ref.Name)
+ kameletURI := fmt.Sprintf("kamelet:%s", kameletName)
props, err := e.Properties.GetPropertyMap()
if err != nil {
return nil, err
}
- if id, ok := props[v1alpha1.KameletIDProperty]; ok && id != "" {
+ id, idPresent := props[v1alpha1.KameletIDProperty]
+ if idPresent {
delete(props, v1alpha1.KameletIDProperty)
- kameletURI = fmt.Sprintf("%s/%s", kameletURI, url.PathEscape(id))
+ } else {
+ // Let's use literal "source" or "sink" as ID for the Kamelet
+ id = string(endpointType)
}
+ kameletURI = fmt.Sprintf("%s/%s", kameletURI, url.PathEscape(id))
- kameletURI = uri.AppendParameters(kameletURI, props)
+ var applicationProperties map[string]string
+ if len(props) > 0 {
+ applicationProperties = make(map[string]string, len(props))
+ for k, v := range props {
+ propKey := fmt.Sprintf("camel.kamelet.%s.%s.%s", kameletName, id, k)
+ applicationProperties[propKey] = v
+ }
+ }
return &Binding{
- URI: kameletURI,
+ URI: kameletURI,
+ ApplicationProperties: applicationProperties,
}, nil
}
return nil, nil
diff --git a/script/gen_release_notes.sh b/script/gen_release_notes.sh
index 4caea9f..070e08d 100755
--- a/script/gen_release_notes.sh
+++ b/script/gen_release_notes.sh
@@ -23,8 +23,8 @@ if [ "$#" -ne 2 ]; then
fi
location=$(dirname $0)
-last_tag=$1
-new_tag=$2
+last_tag=v$1
+new_tag=v$2
echo "Generating release notes for version $new_tag starting from tag $last_tag"