You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by lb...@apache.org on 2018/12/05 06:33:55 UTC

[camel-k] branch master updated: chore: add debug trait

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

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


The following commit(s) were added to refs/heads/master by this push:
     new fccb914  chore: add debug trait
fccb914 is described below

commit fccb914b057dc600e5d06701499c13adc4a12ffc
Author: Zoran Regvart <zr...@apache.org>
AuthorDate: Tue Dec 4 16:39:02 2018 +0100

    chore: add debug trait
    
    This adds the `debug` trait, which can be activated via
    `--trait debug.enabled=true`.
    
    Fixes #190
---
 pkg/trait/builder_test.go |  1 +
 pkg/trait/catalog.go      | 15 +++++++--------
 pkg/trait/debug.go        | 43 +++++++++++++++++++++++++++++++++++++++++
 pkg/trait/debug_test.go   | 49 +++++++++++++++++++++++++++++++++++++++++++++++
 pkg/trait/trait_test.go   |  1 +
 pkg/trait/types.go        | 17 ++++++++++++++++
 6 files changed, 118 insertions(+), 8 deletions(-)

diff --git a/pkg/trait/builder_test.go b/pkg/trait/builder_test.go
index f26f010..03b2b04 100644
--- a/pkg/trait/builder_test.go
+++ b/pkg/trait/builder_test.go
@@ -134,6 +134,7 @@ func createBuilderTestEnv(cluster v1alpha1.IntegrationPlatformCluster, strategy
 				},
 			},
 		},
+		EnvVars:        make(map[string]string),
 		ExecutedTraits: make([]ID, 0),
 		Resources:      kubernetes.NewCollection(),
 	}
diff --git a/pkg/trait/catalog.go b/pkg/trait/catalog.go
index 4684202..d381aeb 100644
--- a/pkg/trait/catalog.go
+++ b/pkg/trait/catalog.go
@@ -24,12 +24,12 @@ import (
 	"github.com/sirupsen/logrus"
 
 	"github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
-	"github.com/apache/camel-k/pkg/platform"
 	"github.com/fatih/structs"
 )
 
 // Catalog collects all information about traits in one place
 type Catalog struct {
+	tDebug        Trait
 	tDependencies Trait
 	tDeployment   Trait
 	tKnative      Trait
@@ -44,6 +44,7 @@ type Catalog struct {
 // NewCatalog creates a new trait Catalog
 func NewCatalog() *Catalog {
 	return &Catalog{
+		tDebug:        newDebugTrait(),
 		tDependencies: newDependenciesTrait(),
 		tDeployment:   newDeploymentTrait(),
 		tKnative:      newKnativeTrait(),
@@ -58,6 +59,7 @@ func NewCatalog() *Catalog {
 
 func (c *Catalog) allTraits() []Trait {
 	return []Trait{
+		c.tDebug,
 		c.tDependencies,
 		c.tDeployment,
 		c.tKnative,
@@ -71,17 +73,12 @@ func (c *Catalog) allTraits() []Trait {
 }
 
 func (c *Catalog) traitsFor(environment *Environment) []Trait {
-	profile := platform.GetProfile(environment.Platform)
-	if environment.Context != nil && environment.Context.Spec.Profile != "" {
-		profile = environment.Context.Spec.Profile
-	}
-	if environment.Integration != nil && environment.Integration.Spec.Profile != "" {
-		profile = environment.Integration.Spec.Profile
-	}
+	profile := environment.DetermineProfile()
 
 	switch profile {
 	case v1alpha1.TraitProfileOpenShift:
 		return []Trait{
+			c.tDebug,
 			c.tDependencies,
 			c.tService,
 			c.tRoute,
@@ -92,6 +89,7 @@ func (c *Catalog) traitsFor(environment *Environment) []Trait {
 		}
 	case v1alpha1.TraitProfileKubernetes:
 		return []Trait{
+			c.tDebug,
 			c.tDependencies,
 			c.tService,
 			c.tIngress,
@@ -102,6 +100,7 @@ func (c *Catalog) traitsFor(environment *Environment) []Trait {
 		}
 	case v1alpha1.TraitProfileKnative:
 		return []Trait{
+			c.tDebug,
 			c.tDependencies,
 			c.tKnative,
 			c.tBuilder,
diff --git a/pkg/trait/debug.go b/pkg/trait/debug.go
new file mode 100644
index 0000000..984a10e
--- /dev/null
+++ b/pkg/trait/debug.go
@@ -0,0 +1,43 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package trait
+
+import (
+	"github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
+)
+
+type debugTrait struct {
+	BaseTrait `property:",squash"`
+}
+
+func newDebugTrait() *debugTrait {
+	return &debugTrait{
+		BaseTrait: newBaseTrait("debug"),
+	}
+}
+
+func (r *debugTrait) appliesTo(e *Environment) bool {
+	return e.Integration != nil && e.Integration.Status.Phase == v1alpha1.IntegrationPhaseDeploying
+}
+
+func (r *debugTrait) apply(e *Environment) error {
+	// this is all that's needed as long as the base image is `fabric8/s2i-java` look into builder/builder.go
+	e.EnvVars["JAVA_DEBUG"] = "true"
+
+	return nil
+}
diff --git a/pkg/trait/debug_test.go b/pkg/trait/debug_test.go
new file mode 100644
index 0000000..17ebb6d
--- /dev/null
+++ b/pkg/trait/debug_test.go
@@ -0,0 +1,49 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package trait
+
+import (
+	"testing"
+
+	"github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
+	"github.com/stretchr/testify/assert"
+)
+
+var (
+	env = &Environment{
+		Integration: &v1alpha1.Integration{
+			Status: v1alpha1.IntegrationStatus{
+				Phase: v1alpha1.IntegrationPhaseDeploying,
+			},
+		},
+		EnvVars: make(map[string]string)}
+
+	trait = newDebugTrait()
+)
+
+func TestApplicability(t *testing.T) {
+	assert.True(t, trait.appliesTo(env))
+
+	env.Integration.Status.Phase = v1alpha1.IntegrationPhaseRunning
+	assert.False(t, trait.appliesTo(env))
+}
+
+func TestApply(t *testing.T) {
+	assert.Nil(t, trait.apply(env))
+	assert.Equal(t, "true", env.EnvVars["JAVA_DEBUG"])
+}
diff --git a/pkg/trait/trait_test.go b/pkg/trait/trait_test.go
index cb3acd5..5211395 100644
--- a/pkg/trait/trait_test.go
+++ b/pkg/trait/trait_test.go
@@ -179,6 +179,7 @@ func createTestEnv(cluster v1alpha1.IntegrationPlatformCluster, dependencies ...
 				Cluster: cluster,
 			},
 		},
+		EnvVars:        make(map[string]string),
 		ExecutedTraits: make([]ID, 0),
 		Resources:      kubernetes.NewCollection(),
 	}
diff --git a/pkg/trait/types.go b/pkg/trait/types.go
index 6b87029..8e9e223 100644
--- a/pkg/trait/types.go
+++ b/pkg/trait/types.go
@@ -20,6 +20,7 @@ package trait
 import (
 	"github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
 	"github.com/apache/camel-k/pkg/builder"
+	"github.com/apache/camel-k/pkg/platform"
 	"github.com/apache/camel-k/pkg/util/kubernetes"
 )
 
@@ -112,3 +113,19 @@ func (e *Environment) IntegrationInPhase(phase v1alpha1.IntegrationPhase) bool {
 func (e *Environment) IntegrationContextInPhase(phase v1alpha1.IntegrationContextPhase) bool {
 	return e.Context != nil && e.Context.Status.Phase == phase
 }
+
+// DeterimeProfile determines the TraitProfile of the environment.
+// First looking at the Integration.Spec for a Profile,
+// next looking at the Context.Spec
+// and lastly the Platform Profile
+func (e *Environment) DetermineProfile() v1alpha1.TraitProfile {
+	if e.Integration != nil && e.Integration.Spec.Profile != "" {
+		return e.Integration.Spec.Profile
+	}
+
+	if e.Context != nil && e.Context.Spec.Profile != "" {
+		return e.Context.Spec.Profile
+	}
+
+	return platform.GetProfile(e.Platform)
+}