This is an automated email from the ASF dual-hosted git repository.

pcongiusti pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-k.git

commit bea48df579362ac2125ea96d8fc17b21a4c000de
Author: Pasquale Congiusti <[email protected]>
AuthorDate: Wed Apr 17 16:20:37 2024 +0200

    fix(trait): don't report runtime version...
    
    ... for external kit or syntetic Integrations.
    
    As a side effect, we had to introduce a further check to avoid leveraging a 
Camel catalog which was taken as default.
    
    Closes #5309
---
 pkg/trait/camel.go      | 15 ++++++++-------
 pkg/trait/camel_test.go | 29 +++++++++++++++++++++++++++++
 pkg/trait/cron.go       |  3 +++
 pkg/trait/jvm.go        |  3 +++
 pkg/trait/logging.go    |  4 +++-
 5 files changed, 46 insertions(+), 8 deletions(-)

diff --git a/pkg/trait/camel.go b/pkg/trait/camel.go
index d774cfca2..9f573c503 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 5d5a13a4f..2ca58645e 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 adf04f0c3..3e81c8ea2 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 858ac33e4..a47e59f6f 100644
--- a/pkg/trait/jvm.go
+++ b/pkg/trait/jvm.go
@@ -74,6 +74,9 @@ func (t *jvmTrait) Configure(e *Environment) (bool, 
*TraitCondition, error) {
                return false, 
newIntegrationConditionPlatformDisabledWithMessage("JVM", "integration kit was 
not created via Camel K operator"), nil
        }
 
+       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 00d26369c..1063e21e7 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
 }

Reply via email to