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 2020/09/17 09:10:01 UTC
[camel-k] 06/21: kamelets: adding support for kamelet dependencies
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
commit 7d17bfc3928e5b01f9f1127e1db3c2f87886190d
Author: Nicola Ferraro <ni...@gmail.com>
AuthorDate: Thu Jun 25 11:29:37 2020 +0200
kamelets: adding support for kamelet dependencies
---
pkg/trait/kamelets.go | 7 ++++
pkg/trait/kamelets_test.go | 100 +++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 107 insertions(+)
diff --git a/pkg/trait/kamelets.go b/pkg/trait/kamelets.go
index 180985a..55b61a2 100644
--- a/pkg/trait/kamelets.go
+++ b/pkg/trait/kamelets.go
@@ -86,6 +86,7 @@ func (t *kameletsTrait) Apply(e *Environment) error {
if err := t.addKamelets(e); err != nil {
return err
}
+
return nil
}
@@ -99,10 +100,16 @@ func (t *kameletsTrait) addKamelets(e *Environment) error {
if err := t.Client.Get(t.Ctx, key, &kamelet); err != nil {
return err
}
+
if err := t.addKameletAsSource(e, kamelet); err != nil {
return err
}
+
+ // Adding dependencies from Kamelets
+ util.StringSliceUniqueConcat(&e.Integration.Status.Dependencies, kamelet.Spec.Dependencies)
}
+ // resort dependencies
+ sort.Strings(e.Integration.Status.Dependencies)
return nil
}
diff --git a/pkg/trait/kamelets_test.go b/pkg/trait/kamelets_test.go
index 30585c3..500baba 100644
--- a/pkg/trait/kamelets_test.go
+++ b/pkg/trait/kamelets_test.go
@@ -84,6 +84,10 @@ func TestKameletLookup(t *testing.T) {
"uri": "timer:tick",
},
},
+ Dependencies: []string{
+ "camel:timer",
+ "camel:log",
+ },
},
})
enabled, err := trait.Configure(environment)
@@ -102,6 +106,8 @@ func TestKameletLookup(t *testing.T) {
source := environment.Integration.Status.GeneratedSources[0]
assert.Equal(t, "timer.yaml", source.Name)
assert.Equal(t, "kamelet", string(source.Type))
+
+ assert.Equal(t, []string{"camel:log", "camel:timer"}, environment.Integration.Status.Dependencies)
}
func TestKameletSecondarySourcesLookup(t *testing.T) {
@@ -237,6 +243,100 @@ func TestErrorMultipleKameletSources(t *testing.T) {
assert.Error(t, err)
}
+func TestMultipleKamelets(t *testing.T) {
+ trait, environment := createKameletsTestEnvironment(`
+- from:
+ uri: kamelet:timer
+ steps:
+ - to: kamelet:logger
+ - to: kamelet:logger
+`, &v1alpha1.Kamelet{
+ ObjectMeta: metav1.ObjectMeta{
+ Namespace: "test",
+ Name: "timer",
+ },
+ Spec: v1alpha1.KameletSpec{
+ Flow: &v1.Flow{
+ "from": map[string]interface{}{
+ "uri": "timer:tick",
+ },
+ },
+ Sources: []v1.SourceSpec{
+ {
+ DataSpec: v1.DataSpec{
+ Name: "support.groovy",
+ Content: "from('xxx:xxx').('to:log:info')",
+ },
+ Language: v1.LanguageGroovy,
+ },
+ },
+ Dependencies: []string{
+ "camel:timer",
+ "camel:xxx",
+ },
+ },
+ }, &v1alpha1.Kamelet{
+ ObjectMeta: metav1.ObjectMeta{
+ Namespace: "test",
+ Name: "logger",
+ },
+ Spec: v1alpha1.KameletSpec{
+ Flow: &v1.Flow{
+ "from": map[string]interface{}{
+ "uri": "tbd:endpoint",
+ "steps": []interface{}{
+ map[string]interface{}{
+ "to": map[string]interface{}{
+ "uri": "log:info",
+ },
+ },
+ },
+ },
+ },
+ Dependencies: []string{
+ "camel:log",
+ "camel:tbd",
+ },
+ },
+ })
+ enabled, err := trait.Configure(environment)
+ assert.NoError(t, err)
+ assert.True(t, enabled)
+ assert.Equal(t, []string{"logger", "timer"}, trait.getKamelets())
+
+ err = trait.Apply(environment)
+ assert.NoError(t, err)
+
+ cmFlow := environment.Resources.GetConfigMap(func(c *corev1.ConfigMap) bool { return c.Name == "it-kamelet-timer-flow" })
+ assert.NotNil(t, cmFlow)
+ cmRes := environment.Resources.GetConfigMap(func(c *corev1.ConfigMap) bool { return c.Name == "it-kamelet-timer-000" })
+ assert.NotNil(t, cmRes)
+ cmFlow2 := environment.Resources.GetConfigMap(func(c *corev1.ConfigMap) bool { return c.Name == "it-kamelet-logger-flow" })
+ assert.NotNil(t, cmFlow2)
+
+ assert.Len(t, environment.Integration.Status.GeneratedSources, 3)
+
+ flowSource2 := environment.Integration.Status.GeneratedSources[0]
+ assert.Equal(t, "logger.yaml", flowSource2.Name)
+ assert.Equal(t, "kamelet", string(flowSource2.Type))
+ assert.Equal(t, "it-kamelet-logger-flow", flowSource2.ContentRef)
+ assert.Equal(t, "content", flowSource2.ContentKey)
+
+ flowSource := environment.Integration.Status.GeneratedSources[1]
+ assert.Equal(t, "timer.yaml", flowSource.Name)
+ assert.Equal(t, "kamelet", string(flowSource.Type))
+ assert.Equal(t, "it-kamelet-timer-flow", flowSource.ContentRef)
+ assert.Equal(t, "content", flowSource.ContentKey)
+
+ supportSource := environment.Integration.Status.GeneratedSources[2]
+ assert.Equal(t, "support.groovy", supportSource.Name)
+ assert.Equal(t, "", string(supportSource.Type))
+ assert.Equal(t, "it-kamelet-timer-000", supportSource.ContentRef)
+ assert.Equal(t, "content", supportSource.ContentKey)
+
+ assert.Equal(t, []string{"camel:log", "camel:tbd", "camel:timer", "camel:xxx"}, environment.Integration.Status.Dependencies)
+}
+
func createKameletsTestEnvironment(flow string, objects ...runtime.Object) (*kameletsTrait, *Environment) {
catalog, _ := camel.DefaultCatalog()