This is an automated email from the ASF dual-hosted git repository. tsato pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel-k.git
commit f3d5764432b7983fc35487b5d0ff5324929a60e0 Author: Tadayoshi Sato <[email protected]> AuthorDate: Tue Aug 23 14:34:26 2022 +0900 fix(metadata): add error handling on metadata extraction --- addons/keda/keda.go | 6 +- addons/master/master.go | 5 +- pkg/cmd/local/local.go | 6 +- pkg/metadata/metadata.go | 31 ++++++--- pkg/metadata/metadata_capabilities_test.go | 5 +- pkg/metadata/metadata_dependencies_test.go | 105 +++++++++++++++++------------ pkg/metadata/metadata_http_test.go | 50 ++++++++------ pkg/metadata/metadata_uri_test.go | 40 ++++++----- pkg/trait/cron.go | 6 +- pkg/trait/dependencies.go | 13 +++- pkg/trait/knative.go | 36 ++++++---- pkg/trait/knative_service.go | 10 ++- pkg/trait/service.go | 5 +- pkg/trait/util.go | 10 ++- pkg/util/kamelets/util.go | 7 +- 15 files changed, 217 insertions(+), 118 deletions(-) diff --git a/addons/keda/keda.go b/addons/keda/keda.go index 26ded971b..1b5aa0ab4 100644 --- a/addons/keda/keda.go +++ b/addons/keda/keda.go @@ -318,7 +318,7 @@ func (t *kedaTrait) populateTriggersFromKamelets(e *trait.Environment) error { return err } kameletURIs := make(map[string][]string) - metadata.Each(e.CamelCatalog, sources, func(_ int, meta metadata.IntegrationMetadata) bool { + if err := metadata.Each(e.CamelCatalog, sources, func(_ int, meta metadata.IntegrationMetadata) bool { for _, kameletURI := range meta.FromURIs { if kameletStr := source.ExtractKamelet(kameletURI); kameletStr != "" && camelv1alpha1.ValidKameletName(kameletStr) { kamelet := kameletStr @@ -332,7 +332,9 @@ func (t *kedaTrait) populateTriggersFromKamelets(e *trait.Environment) error { } } return true - }) + }); err != nil { + return err + } if len(kameletURIs) == 0 { return nil diff --git a/addons/master/master.go b/addons/master/master.go index 5c79ffde2..80d7a36ba 100644 --- a/addons/master/master.go +++ b/addons/master/master.go @@ -100,7 +100,10 @@ func (t *masterTrait) Configure(e *trait.Environment) (bool, error) { return false, err } - meta := metadata.ExtractAll(e.CamelCatalog, sources) + meta, err := metadata.ExtractAll(e.CamelCatalog, sources) + if err != nil { + return false, err + } if t.Enabled == nil { for _, endpoint := range meta.FromURIs { diff --git a/pkg/cmd/local/local.go b/pkg/cmd/local/local.go index 8f150ad6c..9ba54dd66 100644 --- a/pkg/cmd/local/local.go +++ b/pkg/cmd/local/local.go @@ -100,7 +100,11 @@ func getTopLevelDependencies(ctx context.Context, catalog *camel.RuntimeCatalog, } // Extract list of top-level dependencies - dependencies.Merge(trait.AddSourceDependencies(sourceSpec, catalog)) + srcDeps, err := trait.ExtractSourceDependencies(sourceSpec, catalog) + if err != nil { + return nil, err + } + dependencies.Merge(srcDeps) } return dependencies.List(), nil diff --git a/pkg/metadata/metadata.go b/pkg/metadata/metadata.go index 02ab8f838..d73c7b221 100644 --- a/pkg/metadata/metadata.go +++ b/pkg/metadata/metadata.go @@ -26,18 +26,23 @@ import ( ) // ExtractAll returns metadata information from all listed source codes. -func ExtractAll(catalog *camel.RuntimeCatalog, sources []v1.SourceSpec) IntegrationMetadata { +func ExtractAll(catalog *camel.RuntimeCatalog, sources []v1.SourceSpec) (IntegrationMetadata, error) { // neutral metadata meta := src.NewMetadata() meta.PassiveEndpoints = true meta.ExposesHTTPServices = false for _, source := range sources { - meta = merge(meta, Extract(catalog, source).Metadata) + m, err := Extract(catalog, source) + if err != nil { + return IntegrationMetadata{}, err + } + meta = merge(meta, m.Metadata) } + return IntegrationMetadata{ Metadata: meta, - } + }, nil } func merge(m1 src.Metadata, m2 src.Metadata) src.Metadata { @@ -60,7 +65,7 @@ func merge(m1 src.Metadata, m2 src.Metadata) src.Metadata { } // Extract returns metadata information from the source code. -func Extract(catalog *camel.RuntimeCatalog, source v1.SourceSpec) IntegrationMetadata { +func Extract(catalog *camel.RuntimeCatalog, source v1.SourceSpec) (IntegrationMetadata, error) { if source.ContentRef != "" { panic("source must be dereferenced before calling this method") } @@ -74,21 +79,27 @@ func Extract(catalog *camel.RuntimeCatalog, source v1.SourceSpec) IntegrationMet meta.PassiveEndpoints = true meta.ExposesHTTPServices = false - // TODO: handle error - _ = src.InspectorForLanguage(catalog, language).Extract(source, &meta) + if err := src.InspectorForLanguage(catalog, language).Extract(source, &meta); err != nil { + return IntegrationMetadata{}, err + } return IntegrationMetadata{ Metadata: meta, - } + }, nil } -// Each --. -func Each(catalog *camel.RuntimeCatalog, sources []v1.SourceSpec, consumer func(int, IntegrationMetadata) bool) { +// Each traverses the sources with the provided consumer function. +func Each(catalog *camel.RuntimeCatalog, sources []v1.SourceSpec, consumer func(int, IntegrationMetadata) bool) error { for i, s := range sources { - meta := Extract(catalog, s) + meta, err := Extract(catalog, s) + if err != nil { + return err + } if !consumer(i, meta) { break } } + + return nil } diff --git a/pkg/metadata/metadata_capabilities_test.go b/pkg/metadata/metadata_capabilities_test.go index 349e4850e..e283e9a6f 100644 --- a/pkg/metadata/metadata_capabilities_test.go +++ b/pkg/metadata/metadata_capabilities_test.go @@ -36,9 +36,10 @@ func TestPlatformHttpCapabilities(t *testing.T) { } catalog, err := camel.DefaultCatalog() - assert.Nil(t, err) + assert.NoError(t, err) - meta := Extract(catalog, code) + meta, err := Extract(catalog, code) + assert.NoError(t, err) assert.ElementsMatch( t, diff --git a/pkg/metadata/metadata_dependencies_test.go b/pkg/metadata/metadata_dependencies_test.go index c3a014b94..61593de53 100644 --- a/pkg/metadata/metadata_dependencies_test.go +++ b/pkg/metadata/metadata_dependencies_test.go @@ -44,9 +44,10 @@ func TestDependenciesJavaSource(t *testing.T) { } catalog, err := camel.DefaultCatalog() - assert.Nil(t, err) + assert.NoError(t, err) - meta := Extract(catalog, code) + meta, err := Extract(catalog, code) + assert.NoError(t, err) assert.ElementsMatch( t, @@ -78,9 +79,10 @@ func TestDependenciesJavaScript(t *testing.T) { } catalog, err := camel.DefaultCatalog() - assert.Nil(t, err) + assert.NoError(t, err) - meta := Extract(catalog, code) + meta, err := Extract(catalog, code) + assert.NoError(t, err) assert.ElementsMatch( t, @@ -113,9 +115,10 @@ func TestDependenciesGroovy(t *testing.T) { } catalog, err := camel.DefaultCatalog() - assert.Nil(t, err) + assert.NoError(t, err) - meta := Extract(catalog, code) + meta, err := Extract(catalog, code) + assert.NoError(t, err) assert.ElementsMatch( t, @@ -144,9 +147,10 @@ func TestDependencies(t *testing.T) { } catalog, err := camel.DefaultCatalog() - assert.Nil(t, err) + assert.NoError(t, err) - meta := Extract(catalog, code) + meta, err := Extract(catalog, code) + assert.NoError(t, err) assert.ElementsMatch(t, []string{ @@ -176,10 +180,11 @@ func TestDependenciesQuarkus(t *testing.T) { } catalog, err := camel.QuarkusCatalog() - assert.Nil(t, err) + assert.NoError(t, err) assert.NotNil(t, catalog) - meta := Extract(catalog, code) + meta, err := Extract(catalog, code) + assert.NoError(t, err) assert.ElementsMatch(t, []string{ @@ -207,9 +212,10 @@ func TestJacksonDependency(t *testing.T) { } catalog, err := camel.DefaultCatalog() - assert.Nil(t, err) + assert.NoError(t, err) - meta := Extract(catalog, code) + meta, err := Extract(catalog, code) + assert.NoError(t, err) assert.ElementsMatch( t, @@ -235,9 +241,10 @@ func TestJacksonImplicitDependency(t *testing.T) { } catalog, err := camel.DefaultCatalog() - assert.Nil(t, err) + assert.NoError(t, err) - meta := Extract(catalog, code) + meta, err := Extract(catalog, code) + assert.NoError(t, err) assert.ElementsMatch( t, @@ -269,9 +276,10 @@ func TestLanguageDependencies(t *testing.T) { } catalog, err := camel.DefaultCatalog() - assert.Nil(t, err) + assert.NoError(t, err) - meta := Extract(catalog, code) + meta, err := Extract(catalog, code) + assert.NoError(t, err) assert.ElementsMatch( t, []string{ @@ -303,9 +311,10 @@ func TestLanguageDependenciesTransformExpression(t *testing.T) { } catalog, err := camel.DefaultCatalog() - assert.Nil(t, err) + assert.NoError(t, err) - meta := Extract(catalog, code) + meta, err := Extract(catalog, code) + assert.NoError(t, err) assert.ElementsMatch( t, []string{ @@ -333,9 +342,10 @@ func TestCircuitBreakerDependency(t *testing.T) { } catalog, err := camel.DefaultCatalog() - assert.Nil(t, err) + assert.NoError(t, err) - meta := Extract(catalog, code) + meta, err := Extract(catalog, code) + assert.NoError(t, err) assert.ElementsMatch(t, []string{ @@ -363,9 +373,10 @@ func TestRestDependency(t *testing.T) { } catalog, err := camel.DefaultCatalog() - assert.Nil(t, err) + assert.NoError(t, err) - meta := Extract(catalog, code) + meta, err := Extract(catalog, code) + assert.NoError(t, err) assert.ElementsMatch( t, @@ -395,9 +406,10 @@ func TestRestWithPathDependency(t *testing.T) { } catalog, err := camel.DefaultCatalog() - assert.Nil(t, err) + assert.NoError(t, err) - meta := Extract(catalog, code) + meta, err := Extract(catalog, code) + assert.NoError(t, err) assert.ElementsMatch( t, []string{ @@ -425,9 +437,10 @@ func TestRestConfigurationDependency(t *testing.T) { } catalog, err := camel.DefaultCatalog() - assert.Nil(t, err) + assert.NoError(t, err) - meta := Extract(catalog, code) + meta, err := Extract(catalog, code) + assert.NoError(t, err) assert.ElementsMatch( t, []string{ @@ -454,9 +467,10 @@ func TestRestClosureDependencyGroovy(t *testing.T) { } catalog, err := camel.DefaultCatalog() - assert.Nil(t, err) + assert.NoError(t, err) - meta := Extract(catalog, code) + meta, err := Extract(catalog, code) + assert.NoError(t, err) assert.ElementsMatch( t, @@ -484,9 +498,10 @@ func TestRestClosureDependencyKotlin(t *testing.T) { } catalog, err := camel.DefaultCatalog() - assert.Nil(t, err) + assert.NoError(t, err) - meta := Extract(catalog, code) + meta, err := Extract(catalog, code) + assert.NoError(t, err) assert.ElementsMatch( t, @@ -518,9 +533,10 @@ func TestXMLCircuitBreakerDependency(t *testing.T) { } catalog, err := camel.DefaultCatalog() - assert.Nil(t, err) + assert.NoError(t, err) - meta := Extract(catalog, code) + meta, err := Extract(catalog, code) + assert.NoError(t, err) assert.ElementsMatch( t, @@ -557,9 +573,10 @@ func TestXMLRestDependency(t *testing.T) { } catalog, err := camel.DefaultCatalog() - assert.Nil(t, err) + assert.NoError(t, err) - meta := Extract(catalog, code) + meta, err := Extract(catalog, code) + assert.NoError(t, err) assert.ElementsMatch( t, @@ -614,9 +631,10 @@ func TestXMLLanguageDependencies(t *testing.T) { } catalog, err := camel.DefaultCatalog() - assert.Nil(t, err) + assert.NoError(t, err) - meta := Extract(catalog, code) + meta, err := Extract(catalog, code) + assert.NoError(t, err) assert.ElementsMatch( t, []string{ @@ -684,9 +702,10 @@ func TestYAMLRestDependency(t *testing.T) { } catalog, err := camel.DefaultCatalog() - assert.Nil(t, err) + assert.NoError(t, err) - meta := Extract(catalog, code) + meta, err := Extract(catalog, code) + assert.NoError(t, err) assert.ElementsMatch( t, @@ -710,9 +729,10 @@ func TestYAMLCircuitBreakerDependency(t *testing.T) { } catalog, err := camel.DefaultCatalog() - assert.Nil(t, err) + assert.NoError(t, err) - meta := Extract(catalog, code) + meta, err := Extract(catalog, code) + assert.NoError(t, err) assert.ElementsMatch( t, @@ -733,9 +753,10 @@ func TestYAMLLanguageDependencies(t *testing.T) { } catalog, err := camel.DefaultCatalog() - assert.Nil(t, err) + assert.NoError(t, err) - meta := Extract(catalog, code) + meta, err := Extract(catalog, code) + assert.NoError(t, err) assert.ElementsMatch( t, diff --git a/pkg/metadata/metadata_http_test.go b/pkg/metadata/metadata_http_test.go index 3f653acdf..15ebacf65 100644 --- a/pkg/metadata/metadata_http_test.go +++ b/pkg/metadata/metadata_http_test.go @@ -40,9 +40,10 @@ func TestHttpJavaSource(t *testing.T) { } catalog, err := camel.DefaultCatalog() - assert.Nil(t, err) + assert.NoError(t, err) - meta := Extract(catalog, code) + meta, err := Extract(catalog, code) + assert.NoError(t, err) assert.True(t, meta.ExposesHTTPServices) assert.False(t, meta.PassiveEndpoints) @@ -64,9 +65,10 @@ func TestHttpOnlyJavaSource(t *testing.T) { } catalog, err := camel.DefaultCatalog() - assert.Nil(t, err) + assert.NoError(t, err) - meta := Extract(catalog, code) + meta, err := Extract(catalog, code) + assert.NoError(t, err) assert.True(t, meta.ExposesHTTPServices) assert.True(t, meta.PassiveEndpoints) @@ -85,9 +87,10 @@ func TestHttpOnlyJavaSourceRest(t *testing.T) { } catalog, err := camel.DefaultCatalog() - assert.Nil(t, err) + assert.NoError(t, err) - meta := Extract(catalog, code) + meta, err := Extract(catalog, code) + assert.NoError(t, err) assert.True(t, meta.ExposesHTTPServices) assert.True(t, meta.PassiveEndpoints) @@ -106,9 +109,10 @@ func TestHttpOnlyJavaSourceRest2(t *testing.T) { } catalog, err := camel.DefaultCatalog() - assert.Nil(t, err) + assert.NoError(t, err) - meta := Extract(catalog, code) + meta, err := Extract(catalog, code) + assert.NoError(t, err) assert.True(t, meta.ExposesHTTPServices) assert.True(t, meta.PassiveEndpoints) @@ -128,9 +132,10 @@ func TestNoHttpGroovySource(t *testing.T) { } catalog, err := camel.DefaultCatalog() - assert.Nil(t, err) + assert.NoError(t, err) - meta := Extract(catalog, code) + meta, err := Extract(catalog, code) + assert.NoError(t, err) assert.False(t, meta.ExposesHTTPServices) assert.False(t, meta.PassiveEndpoints) @@ -150,9 +155,10 @@ func TestHttpOnlyGroovySource(t *testing.T) { } catalog, err := camel.DefaultCatalog() - assert.Nil(t, err) + assert.NoError(t, err) - meta := Extract(catalog, code) + meta, err := Extract(catalog, code) + assert.NoError(t, err) assert.True(t, meta.ExposesHTTPServices) assert.True(t, meta.PassiveEndpoints) @@ -172,9 +178,10 @@ func TestHttpXMLSource(t *testing.T) { } catalog, err := camel.DefaultCatalog() - assert.Nil(t, err) + assert.NoError(t, err) - meta := Extract(catalog, code) + meta, err := Extract(catalog, code) + assert.NoError(t, err) assert.True(t, meta.ExposesHTTPServices) assert.False(t, meta.PassiveEndpoints) @@ -195,9 +202,10 @@ func TestHttpOnlyXMLSource(t *testing.T) { } catalog, err := camel.DefaultCatalog() - assert.Nil(t, err) + assert.NoError(t, err) - meta := Extract(catalog, code) + meta, err := Extract(catalog, code) + assert.NoError(t, err) assert.True(t, meta.ExposesHTTPServices) assert.True(t, meta.PassiveEndpoints) @@ -229,9 +237,10 @@ func TestMultilangHTTPOnlySource(t *testing.T) { } catalog, err := camel.DefaultCatalog() - assert.Nil(t, err) + assert.NoError(t, err) - meta := ExtractAll(catalog, codes) + meta, err := ExtractAll(catalog, codes) + assert.NoError(t, err) assert.True(t, meta.ExposesHTTPServices) assert.True(t, meta.PassiveEndpoints) @@ -265,9 +274,10 @@ func TestMultilangHTTPSource(t *testing.T) { } catalog, err := camel.DefaultCatalog() - assert.Nil(t, err) + assert.NoError(t, err) - meta := ExtractAll(catalog, codes) + meta, err := ExtractAll(catalog, codes) + assert.NoError(t, err) assert.True(t, meta.ExposesHTTPServices) assert.False(t, meta.PassiveEndpoints) diff --git a/pkg/metadata/metadata_uri_test.go b/pkg/metadata/metadata_uri_test.go index 90d526e9e..e046b4827 100644 --- a/pkg/metadata/metadata_uri_test.go +++ b/pkg/metadata/metadata_uri_test.go @@ -47,9 +47,10 @@ func TestJava1(t *testing.T) { } catalog, err := camel.DefaultCatalog() - assert.Nil(t, err) + assert.NoError(t, err) - metadata := Extract(catalog, source) + metadata, err := Extract(catalog, source) + assert.NoError(t, err) assert.Contains(t, metadata.FromURIs, "timer:tick") assert.Len(t, metadata.FromURIs, 1) @@ -84,9 +85,10 @@ func TestJava2(t *testing.T) { } catalog, err := camel.DefaultCatalog() - assert.Nil(t, err) + assert.NoError(t, err) - metadata := Extract(catalog, source) + metadata, err := Extract(catalog, source) + assert.NoError(t, err) assert.Contains(t, metadata.FromURIs, "timer:tick") assert.Len(t, metadata.FromURIs, 1) @@ -116,9 +118,10 @@ func TestGroovy1(t *testing.T) { } catalog, err := camel.DefaultCatalog() - assert.Nil(t, err) + assert.NoError(t, err) - metadata := Extract(catalog, source) + metadata, err := Extract(catalog, source) + assert.NoError(t, err) assert.Contains(t, metadata.FromURIs, "timer:tick") assert.Contains(t, metadata.FromURIs, "uri:2") @@ -146,9 +149,10 @@ func TestGroovy2(t *testing.T) { } catalog, err := camel.DefaultCatalog() - assert.Nil(t, err) + assert.NoError(t, err) - metadata := Extract(catalog, source) + metadata, err := Extract(catalog, source) + assert.NoError(t, err) assert.Empty(t, metadata.FromURIs) assert.Contains(t, metadata.ToURIs, "log:info?skipBodyLineSeparator=false") @@ -181,9 +185,10 @@ func TestXml1(t *testing.T) { } catalog, err := camel.DefaultCatalog() - assert.Nil(t, err) + assert.NoError(t, err) - metadata := Extract(catalog, source) + metadata, err := Extract(catalog, source) + assert.NoError(t, err) assert.Contains(t, metadata.FromURIs, "timer:hello?period=3000") assert.Len(t, metadata.FromURIs, 1) @@ -215,9 +220,10 @@ func TestKotlin1(t *testing.T) { } catalog, err := camel.DefaultCatalog() - assert.Nil(t, err) + assert.NoError(t, err) - metadata := Extract(catalog, source) + metadata, err := Extract(catalog, source) + assert.NoError(t, err) assert.Contains(t, metadata.FromURIs, "timer:tick") assert.Contains(t, metadata.FromURIs, "uri:2") @@ -246,9 +252,10 @@ func TestJavascript1(t *testing.T) { } catalog, err := camel.DefaultCatalog() - assert.Nil(t, err) + assert.NoError(t, err) - metadata := Extract(catalog, source) + metadata, err := Extract(catalog, source) + assert.NoError(t, err) assert.Empty(t, metadata.FromURIs) assert.Contains(t, metadata.ToURIs, "log:info?skipBodyLineSeparator=false") @@ -282,9 +289,10 @@ func TestJYaml(t *testing.T) { } catalog, err := camel.DefaultCatalog() - assert.Nil(t, err) + assert.NoError(t, err) - metadata := Extract(catalog, source) + metadata, err := Extract(catalog, source) + assert.NoError(t, err) assert.NotEmpty(t, metadata.FromURIs) assert.Contains(t, metadata.FromURIs, "timer:tick") diff --git a/pkg/trait/cron.go b/pkg/trait/cron.go index c39e8cbd4..7d28867bd 100644 --- a/pkg/trait/cron.go +++ b/pkg/trait/cron.go @@ -353,7 +353,11 @@ func (t *cronTrait) getSourcesFromURIs(e *Environment) ([]string, error) { if sources, err = kubernetes.ResolveIntegrationSources(e.Ctx, t.Client, e.Integration, e.Resources); err != nil { return nil, err } - meta := metadata.ExtractAll(e.CamelCatalog, sources) + meta, err := metadata.ExtractAll(e.CamelCatalog, sources) + if err != nil { + return nil, err + } + return meta.FromURIs, nil } diff --git a/pkg/trait/dependencies.go b/pkg/trait/dependencies.go index 440291c9a..5a68c3cef 100644 --- a/pkg/trait/dependencies.go +++ b/pkg/trait/dependencies.go @@ -70,9 +70,16 @@ func (t *dependenciesTrait) Apply(e *Environment) error { } for _, s := range sources { // Add source-related dependencies - dependencies.Merge(AddSourceDependencies(s, e.CamelCatalog)) - - meta := metadata.Extract(e.CamelCatalog, s) + srcDeps, err := ExtractSourceDependencies(s, e.CamelCatalog) + if err != nil { + return err + } + dependencies.Merge(srcDeps) + + meta, err := metadata.Extract(e.CamelCatalog, s) + if err != nil { + return err + } meta.RequiredCapabilities.Each(func(item string) bool { util.StringSliceUniqueAdd(&e.Integration.Status.Capabilities, item) return true diff --git a/pkg/trait/knative.go b/pkg/trait/knative.go index 935e0d03f..146f75506 100644 --- a/pkg/trait/knative.go +++ b/pkg/trait/knative.go @@ -84,10 +84,12 @@ func (t *knativeTrait) Configure(e *Environment) (bool, error) { if err != nil { return false, err } - metadata.Each(e.CamelCatalog, sources, func(_ int, meta metadata.IntegrationMetadata) bool { + if err := metadata.Each(e.CamelCatalog, sources, func(_ int, meta metadata.IntegrationMetadata) bool { items = append(items, knativeutil.FilterURIs(meta.FromURIs, knativeapi.CamelServiceTypeChannel)...) return true - }) + }); err != nil { + return false, err + } t.ChannelSources = items } @@ -97,10 +99,12 @@ func (t *knativeTrait) Configure(e *Environment) (bool, error) { if err != nil { return false, err } - metadata.Each(e.CamelCatalog, sources, func(_ int, meta metadata.IntegrationMetadata) bool { + if err := metadata.Each(e.CamelCatalog, sources, func(_ int, meta metadata.IntegrationMetadata) bool { items = append(items, knativeutil.FilterURIs(meta.ToURIs, knativeapi.CamelServiceTypeChannel)...) return true - }) + }); err != nil { + return false, err + } t.ChannelSinks = items } @@ -110,10 +114,12 @@ func (t *knativeTrait) Configure(e *Environment) (bool, error) { if err != nil { return false, err } - metadata.Each(e.CamelCatalog, sources, func(_ int, meta metadata.IntegrationMetadata) bool { + if err := metadata.Each(e.CamelCatalog, sources, func(_ int, meta metadata.IntegrationMetadata) bool { items = append(items, knativeutil.FilterURIs(meta.FromURIs, knativeapi.CamelServiceTypeEndpoint)...) return true - }) + }); err != nil { + return false, err + } t.EndpointSources = items } @@ -123,10 +129,12 @@ func (t *knativeTrait) Configure(e *Environment) (bool, error) { if err != nil { return false, err } - metadata.Each(e.CamelCatalog, sources, func(_ int, meta metadata.IntegrationMetadata) bool { + if err := metadata.Each(e.CamelCatalog, sources, func(_ int, meta metadata.IntegrationMetadata) bool { items = append(items, knativeutil.FilterURIs(meta.ToURIs, knativeapi.CamelServiceTypeEndpoint)...) return true - }) + }); err != nil { + return false, err + } t.EndpointSinks = items } @@ -136,10 +144,12 @@ func (t *knativeTrait) Configure(e *Environment) (bool, error) { if err != nil { return false, err } - metadata.Each(e.CamelCatalog, sources, func(_ int, meta metadata.IntegrationMetadata) bool { + if err := metadata.Each(e.CamelCatalog, sources, func(_ int, meta metadata.IntegrationMetadata) bool { items = append(items, knativeutil.FilterURIs(meta.FromURIs, knativeapi.CamelServiceTypeEvent)...) return true - }) + }); err != nil { + return false, err + } t.EventSources = items } @@ -149,10 +159,12 @@ func (t *knativeTrait) Configure(e *Environment) (bool, error) { if err != nil { return false, err } - metadata.Each(e.CamelCatalog, sources, func(_ int, meta metadata.IntegrationMetadata) bool { + if err := metadata.Each(e.CamelCatalog, sources, func(_ int, meta metadata.IntegrationMetadata) bool { items = append(items, knativeutil.FilterURIs(meta.ToURIs, knativeapi.CamelServiceTypeEvent)...) return true - }) + }); err != nil { + return false, err + } t.EventSinks = items } diff --git a/pkg/trait/knative_service.go b/pkg/trait/knative_service.go index 606aafd14..258e38bb5 100644 --- a/pkg/trait/knative_service.go +++ b/pkg/trait/knative_service.go @@ -132,7 +132,10 @@ func (t *knativeServiceTrait) Configure(e *Environment) (bool, error) { return false, err } - meta := metadata.ExtractAll(e.CamelCatalog, sources) + meta, err := metadata.ExtractAll(e.CamelCatalog, sources) + if err != nil { + return false, err + } if !meta.ExposesHTTPServices || !meta.PassiveEndpoints { single := 1 t.MinScale = &single @@ -180,7 +183,10 @@ func (t *knativeServiceTrait) SelectControllerStrategy(e *Environment) (*Control return nil, err } - meta := metadata.ExtractAll(e.CamelCatalog, sources) + meta, err := metadata.ExtractAll(e.CamelCatalog, sources) + if err != nil { + return nil, err + } if meta.ExposesHTTPServices { return &knativeServiceStrategy, nil } diff --git a/pkg/trait/service.go b/pkg/trait/service.go index eb46b5cb5..c707ce281 100644 --- a/pkg/trait/service.go +++ b/pkg/trait/service.go @@ -80,7 +80,10 @@ func (t *serviceTrait) Configure(e *Environment) (bool, error) { return false, err } - meta := metadata.ExtractAll(e.CamelCatalog, sources) + meta, err := metadata.ExtractAll(e.CamelCatalog, sources) + if err != nil { + return false, err + } if !meta.ExposesHTTPServices { e.Integration.Status.SetCondition( v1.IntegrationConditionServiceAvailable, diff --git a/pkg/trait/util.go b/pkg/trait/util.go index ef9a5d323..69d9c3db2 100644 --- a/pkg/trait/util.go +++ b/pkg/trait/util.go @@ -211,11 +211,15 @@ func toHostDir(host string) string { return toFileName.ReplaceAllString(h, "_") } -func AddSourceDependencies(source v1.SourceSpec, catalog *camel.RuntimeCatalog) *strset.Set { +// ExtractSourceDependencies extracts dependencies from source. +func ExtractSourceDependencies(source v1.SourceSpec, catalog *camel.RuntimeCatalog) (*strset.Set, error) { dependencies := strset.New() // Add auto-detected dependencies - meta := metadata.Extract(catalog, source) + meta, err := metadata.Extract(catalog, source) + if err != nil { + return nil, err + } dependencies.Merge(meta.Dependencies) // Add loader dependencies @@ -240,7 +244,7 @@ func AddSourceDependencies(source v1.SourceSpec, catalog *camel.RuntimeCatalog) } } - return dependencies + return dependencies, nil } // AssertTraitsType asserts that traits is either v1.Traits or v1.IntegrationKitTraits. diff --git a/pkg/util/kamelets/util.go b/pkg/util/kamelets/util.go index 2db03c7fc..c849ce729 100644 --- a/pkg/util/kamelets/util.go +++ b/pkg/util/kamelets/util.go @@ -39,10 +39,13 @@ func ExtractKameletFromSources(context context.Context, c client.Client, catalog if err != nil { return nil, err } - metadata.Each(catalog, sources, func(_ int, meta metadata.IntegrationMetadata) bool { + + if err := metadata.Each(catalog, sources, func(_ int, meta metadata.IntegrationMetadata) bool { util.StringSliceUniqueConcat(&kamelets, meta.Kamelets) return true - }) + }); err != nil { + return nil, err + } // Check if a Kamelet is configured as default error handler URI defaultErrorHandlerURI := it.Spec.GetConfigurationProperty(v1alpha1.ErrorHandlerAppPropertiesPrefix + ".deadLetterUri")
