diff --git a/pkg/trait/camel.go b/pkg/trait/camel.go index d774cfca2b..9f573c5036 100644 --- a/pkg/trait/camel.go +++ b/pkg/trait/camel.go @@ -63,6 +63,13 @@ func (t *camelTrait) Matches(trait Trait) bool { } func (t *camelTrait) Configure(e *Environment) (bool, *TraitCondition, error) { + if e.IntegrationKit != nil && e.IntegrationKit.IsExternal() { + return false, newIntegrationConditionPlatformDisabledWithMessage("Camel", "integration kit was not created via Camel K operator"), nil + } + if e.Integration != nil && e.Integration.IsSynthetic() { + return false, newIntegrationConditionPlatformDisabledWithMessage("Camel", "syntetic integration"), nil + } + if t.RuntimeVersion == "" { if runtimeVersion, err := determineRuntimeVersion(e); err != nil { return false, nil, err @@ -71,21 +78,15 @@ func (t *camelTrait) Configure(e *Environment) (bool, *TraitCondition, error) { } } - // Don't run this trait for a synthetic Integration - return e.Integration == nil || !e.Integration.IsSynthetic(), nil, nil + return true, nil, nil } func (t *camelTrait) Apply(e *Environment) error { - if t.RuntimeVersion == "" { - return errors.New("unable to determine runtime version") - } - if e.CamelCatalog == nil { if err := t.loadOrCreateCatalog(e, t.RuntimeVersion); err != nil { return err } } - e.RuntimeVersion = e.CamelCatalog.Runtime.Version if e.Integration != nil { diff --git a/pkg/trait/camel_test.go b/pkg/trait/camel_test.go index 5d5a13a4f5..2ca58645e3 100644 --- a/pkg/trait/camel_test.go +++ b/pkg/trait/camel_test.go @@ -246,3 +246,32 @@ func TestCamelCatalogSemver(t *testing.T) { // 2.x will translate with 2.16.0 as it is already existing assert.Equal(t, environment.CamelCatalog.CamelCatalogSpec.Runtime.Version, environment.RuntimeVersion) } + +func TestCamelTraitExternalKit(t *testing.T) { + trait, environment := createNominalCamelTest(true) + environment.Integration.Status = v1.IntegrationStatus{} + environment.IntegrationKit.Labels[v1.IntegrationKitTypeLabel] = v1.IntegrationKitTypeExternal + + configured, condition, err := trait.Configure(environment) + require.NoError(t, err) + assert.Equal(t, "explicitly disabled by the platform: integration kit was not created via Camel K operator", condition.message) + assert.False(t, configured) + + assert.Equal(t, v1.RuntimeProvider(""), environment.Integration.Status.RuntimeProvider) + assert.Equal(t, "", environment.Integration.Status.RuntimeVersion) +} + +func TestCamelTraitSyntheticIntegration(t *testing.T) { + trait, environment := createNominalCamelTest(true) + environment.Integration.Status = v1.IntegrationStatus{} + environment.Integration.Annotations = make(map[string]string) + environment.Integration.Annotations[v1.IntegrationSyntheticLabel] = "true" + + configured, condition, err := trait.Configure(environment) + require.NoError(t, err) + assert.Equal(t, "explicitly disabled by the platform: syntetic integration", condition.message) + assert.False(t, configured) + + assert.Equal(t, v1.RuntimeProvider(""), environment.Integration.Status.RuntimeProvider) + assert.Equal(t, "", environment.Integration.Status.RuntimeVersion) +} diff --git a/pkg/trait/cron.go b/pkg/trait/cron.go index adf04f0c3a..3e81c8ea2d 100644 --- a/pkg/trait/cron.go +++ b/pkg/trait/cron.go @@ -83,6 +83,9 @@ func (t *cronTrait) Configure(e *Environment) (bool, *TraitCondition, error) { if !e.IntegrationInPhase(v1.IntegrationPhaseInitialization) && !e.IntegrationInRunningPhases() { return false, nil, nil } + if e.CamelCatalog == nil { + return false, newIntegrationConditionPlatformDisabledWithMessage("Cron", "no camel catalog available for this Integration"), nil + } if _, ok := e.CamelCatalog.Runtime.Capabilities[v1.CapabilityCron]; !ok { return false, NewIntegrationCondition( diff --git a/pkg/trait/jvm.go b/pkg/trait/jvm.go index c9e3b32645..0a72ee99ec 100644 --- a/pkg/trait/jvm.go +++ b/pkg/trait/jvm.go @@ -78,6 +78,9 @@ func (t *jvmTrait) Configure(e *Environment) (bool, *TraitCondition, error) { } } + if e.CamelCatalog == nil { + return false, newIntegrationConditionPlatformDisabledWithMessage("JVM", "no camel catalog available for this Integration"), nil + } return true, nil, nil } diff --git a/pkg/trait/logging.go b/pkg/trait/logging.go index 00d26369c5..1063e21e7e 100644 --- a/pkg/trait/logging.go +++ b/pkg/trait/logging.go @@ -52,10 +52,12 @@ func (l loggingTrait) Configure(e *Environment) (bool, *TraitCondition, error) { if e.Integration == nil { return false, nil, nil } - if !pointer.BoolDeref(l.Enabled, true) { return false, NewIntegrationConditionUserDisabled("Logging"), nil } + if e.CamelCatalog == nil { + return false, newIntegrationConditionPlatformDisabledWithMessage("Logging", "no camel catalog available for this Integration"), nil + } return e.IntegrationInRunningPhases(), nil, nil }