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

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


The following commit(s) were added to refs/heads/main by this push:
     new 0c9ef196d fix(trait): don't create a kit outside accepted namespaces
0c9ef196d is described below

commit 0c9ef196da7a533bcb9dfbea1a40d4362b1fdea5
Author: Pasquale Congiusti <[email protected]>
AuthorDate: Fri Aug 14 08:32:34 2026 +0200

    fix(trait): don't create a kit outside accepted namespaces
    
    Closes #6733
---
 pkg/trait/quarkus.go      | 45 +++++++++++++++++++++++++++++----------------
 pkg/trait/quarkus_test.go | 14 ++++++++++++++
 2 files changed, 43 insertions(+), 16 deletions(-)

diff --git a/pkg/trait/quarkus.go b/pkg/trait/quarkus.go
index bf8ca05e0..bb886b1e1 100644
--- a/pkg/trait/quarkus.go
+++ b/pkg/trait/quarkus.go
@@ -18,6 +18,7 @@ limitations under the License.
 package trait
 
 import (
+       "errors"
        "fmt"
        "slices"
        "sort"
@@ -224,34 +225,34 @@ func (t *quarkusTrait) validateNativeSupport(e 
*Environment) error {
 
 func (t *quarkusTrait) Apply(e *Environment) error {
        if e.IntegrationInPhase(v1.IntegrationPhaseBuildingKit) {
-               t.applyWhileBuildingKit(e)
-
-               return nil
+               return t.applyWhileBuildingKit(e)
        }
 
        switch e.IntegrationKit.Status.Phase {
        case v1.IntegrationKitPhaseBuildSubmitted:
-               if err := t.applyWhenBuildSubmitted(e); err != nil {
-                       return err
-               }
+               return t.applyWhenBuildSubmitted(e)
 
        case v1.IntegrationKitPhaseReady:
-               if err := t.applyWhenKitReady(e); err != nil {
-                       return err
-               }
+               return t.applyWhenKitReady(e)
        }
 
        return nil
 }
 
-func (t *quarkusTrait) applyWhileBuildingKit(e *Environment) {
+func (t *quarkusTrait) applyWhileBuildingKit(e *Environment) error {
        switch len(t.Modes) {
        case 0:
                // Default behavior
-               kit := t.newIntegrationKit(e, fastJarPackageType)
+               kit, err := t.newIntegrationKit(e, fastJarPackageType)
+               if err != nil {
+                       return err
+               }
                e.IntegrationKits = append(e.IntegrationKits, *kit)
        case 1:
-               kit := t.newIntegrationKit(e, packageType(t.Modes[0]))
+               kit, err := t.newIntegrationKit(e, packageType(t.Modes[0]))
+               if err != nil {
+                       return err
+               }
                e.IntegrationKits = append(e.IntegrationKits, *kit)
        default:
                // execute jvm mode before native mode
@@ -259,7 +260,10 @@ func (t *quarkusTrait) applyWhileBuildingKit(e 
*Environment) {
                        return t.Modes[i] != traitv1.NativeQuarkusMode
                })
                for _, md := range t.Modes {
-                       kit := t.newIntegrationKit(e, packageType(md))
+                       kit, err := t.newIntegrationKit(e, packageType(md))
+                       if err != nil {
+                               return err
+                       }
                        if kit.Spec.Traits.Quarkus == nil {
                                kit.Spec.Traits.Quarkus = 
&traitv1.QuarkusTrait{}
                        }
@@ -267,11 +271,20 @@ func (t *quarkusTrait) applyWhileBuildingKit(e 
*Environment) {
                        e.IntegrationKits = append(e.IntegrationKits, *kit)
                }
        }
+
+       return nil
 }
 
-func (t *quarkusTrait) newIntegrationKit(e *Environment, packageType 
quarkusPackageType) *v1.IntegrationKit {
+func (t *quarkusTrait) newIntegrationKit(e *Environment, packageType 
quarkusPackageType) (*v1.IntegrationKit, error) {
        integration := e.Integration
-       kit := 
v1.NewIntegrationKit(integration.GetIntegrationKitNamespace(e.Platform.CatalogNamespace),
 fmt.Sprintf("kit-%s", xid.New()))
+       namespace := 
integration.GetIntegrationKitNamespace(e.Platform.CatalogNamespace)
+
+       if namespace != e.Integration.Namespace && namespace != 
e.Platform.CatalogNamespace {
+               // Cannot create a new Integration Kit outside those namespaces
+               return nil, errors.New("cannot create a Kit outside Integration 
or Catalog namespaces")
+       }
+
+       kit := v1.NewIntegrationKit(namespace, fmt.Sprintf("kit-%s", xid.New()))
 
        kit.Labels = map[string]string{
                v1.IntegrationKitTypeLabel:            
v1.IntegrationKitTypePlatform,
@@ -317,7 +330,7 @@ func (t *quarkusTrait) newIntegrationKit(e *Environment, 
packageType quarkusPack
                kit.Spec.Capabilities = e.Integration.Status.Capabilities
        }
 
-       return kit
+       return kit, nil
 }
 
 func propagateKitTraits(e *Environment) v1.IntegrationKitTraits {
diff --git a/pkg/trait/quarkus_test.go b/pkg/trait/quarkus_test.go
index d6b744bc7..7aafe861d 100644
--- a/pkg/trait/quarkus_test.go
+++ b/pkg/trait/quarkus_test.go
@@ -22,6 +22,7 @@ import (
 
        "github.com/apache/camel-k/v2/pkg/platform"
        "github.com/apache/camel-k/v2/pkg/util/boolean"
+       corev1 "k8s.io/api/core/v1"
        metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 
        traitv1 "github.com/apache/camel-k/v2/pkg/apis/camel/v1/trait"
@@ -275,3 +276,16 @@ func TestConfigureQuarkusTraitDeprecatedLanguages(t 
*testing.T) {
        assert.NotNil(t, condition)
        assert.Equal(t, "The sources contains some language marked as 
deprecated. This Integration may not be supported in future release.", 
condition.message)
 }
+
+func TestFailNewIntegrationKit(t *testing.T) {
+       quarkusTrait, environment := createNominalQuarkusTest()
+       environment.Integration.Namespace = "it-ns"
+       environment.Integration.Spec.IntegrationKit = &corev1.ObjectReference{
+               Namespace: "rogue-ns",
+       }
+       environment.Platform.CatalogNamespace = "op-ns"
+
+       _, err := quarkusTrait.newIntegrationKit(environment, 
fastJarPackageType)
+       require.Error(t, err)
+       assert.Equal(t, "cannot create a Kit outside Integration or Catalog 
namespaces", err.Error())
+}

Reply via email to