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 <zregv...@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) +}