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

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

commit 2836a5e0dfa10b8a2dd09fa67df85dca8e355c03
Author: Antonin Stefanutti <anto...@stefanutti.fr>
AuthorDate: Tue Jan 21 11:44:28 2020 +0100

    chore(trait): Use container args to configure JVM debugging
---
 pkg/trait/classpath.go     | 12 ++----------
 pkg/trait/debug.go         | 14 +++++++++-----
 pkg/trait/debug_test.go    | 29 ++++++++++++++++++++++++-----
 pkg/trait/jolokia.go       |  8 +-------
 pkg/trait/prometheus.go    |  8 +-------
 pkg/trait/quarkus.go       |  4 ----
 pkg/trait/trait_catalog.go |  6 +++---
 pkg/trait/trait_types.go   | 10 ++++++++++
 8 files changed, 50 insertions(+), 41 deletions(-)

diff --git a/pkg/trait/classpath.go b/pkg/trait/classpath.go
index 0405ee3..71b7cc4 100644
--- a/pkg/trait/classpath.go
+++ b/pkg/trait/classpath.go
@@ -85,9 +85,7 @@ func (t *classpathTrait) Apply(e *Environment) error {
        classpath.Add("./resources")
 
        quarkus := e.Catalog.GetTrait("quarkus").(*quarkusTrait)
-       if quarkus.isEnabled() {
-               quarkus.addClasspath(e)
-       } else {
+       if !quarkus.isEnabled() {
                for _, artifact := range kit.Status.Artifacts {
                        classpath.Add(artifact.Target)
                }
@@ -100,13 +98,7 @@ func (t *classpathTrait) Apply(e *Environment) error {
                classpath.Add("/deployments/dependencies/*")
        }
 
-       containerName := defaultContainerName
-       dt := e.Catalog.GetTrait(containerTraitID)
-       if dt != nil {
-               containerName = dt.(*containerTrait).Name
-       }
-
-       container := e.Resources.GetContainerByName(containerName)
+       container := e.getIntegrationContainer()
        if container != nil {
                // Add mounted resources to the class path
                for _, m := range container.VolumeMounts {
diff --git a/pkg/trait/debug.go b/pkg/trait/debug.go
index 9ecaed8..38d3c5f 100644
--- a/pkg/trait/debug.go
+++ b/pkg/trait/debug.go
@@ -18,15 +18,14 @@ limitations under the License.
 package trait
 
 import (
+       "fmt"
+
        v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
-       "github.com/apache/camel-k/pkg/util/envvar"
 )
 
 // The Debug trait can be used to enable debugging on the integration 
container,
 // so that a remote debugger can be attached.
 //
-// Enabling the trait will inject the `JAVA_DEBUG` environment variable into 
the integration container.
-//
 // +camel-k:trait=debug
 type debugTrait struct {
        BaseTrait `property:",squash"`
@@ -47,8 +46,13 @@ func (t *debugTrait) Configure(e *Environment) (bool, error) 
{
 }
 
 func (t *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
-       envvar.SetVal(&e.EnvVars, "JAVA_DEBUG", True)
+       container := e.getIntegrationContainer()
+       if container == nil {
+               return fmt.Errorf("unable to find integration container")
+       }
+
+       // TODO: Add options to configure debugging agent
+       container.Args = append(container.Args, 
"-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005")
 
        return nil
 }
diff --git a/pkg/trait/debug_test.go b/pkg/trait/debug_test.go
index 71ea9d1..32b3e1d 100644
--- a/pkg/trait/debug_test.go
+++ b/pkg/trait/debug_test.go
@@ -18,15 +18,17 @@ limitations under the License.
 package trait
 
 import (
+       "context"
        "testing"
 
        "github.com/stretchr/testify/assert"
 
+       appsv1 "k8s.io/api/apps/v1"
        corev1 "k8s.io/api/core/v1"
 
        v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
        "github.com/apache/camel-k/pkg/util/camel"
-       "github.com/apache/camel-k/pkg/util/envvar"
+       "github.com/apache/camel-k/pkg/util/kubernetes"
 )
 
 func TestDebugTraitApplicability(t *testing.T) {
@@ -49,7 +51,6 @@ func TestDebugTraitApplicability(t *testing.T) {
                                },
                        },
                },
-               EnvVars: make([]corev1.EnvVar, 0),
        }
 
        trait := newDebugTrait()
@@ -67,6 +68,7 @@ func TestDebugTraitApplicability(t *testing.T) {
 
 func TestApplyDebugTrait(t *testing.T) {
        environment := Environment{
+               Catalog: NewCatalog(context.TODO(), nil),
                Integration: &v1.Integration{
                        Status: v1.IntegrationStatus{
                                Phase: v1.IntegrationPhaseDeploying,
@@ -81,12 +83,29 @@ func TestApplyDebugTrait(t *testing.T) {
                                },
                        },
                },
-               EnvVars: make([]corev1.EnvVar, 0),
+               Resources: kubernetes.NewCollection(),
        }
 
+       d := appsv1.Deployment{
+               Spec: appsv1.DeploymentSpec{
+                       Template: corev1.PodTemplateSpec{
+                               Spec: corev1.PodSpec{
+                                       Containers: []corev1.Container{
+                                               {
+                                                       Name: 
defaultContainerName,
+                                               },
+                                       },
+                               },
+                       },
+               },
+       }
+
+       environment.Resources.Add(&d)
+
        trait := newDebugTrait()
 
        assert.Nil(t, trait.Apply(&environment))
-       assert.NotNil(t, envvar.Get(environment.EnvVars, "JAVA_DEBUG"))
-       assert.Equal(t, True, envvar.Get(environment.EnvVars, 
"JAVA_DEBUG").Value)
+       assert.Equal(t, d.Spec.Template.Spec.Containers[0].Args, []string{
+               
"-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005",
+       })
 }
diff --git a/pkg/trait/jolokia.go b/pkg/trait/jolokia.go
index 5022d90..4f1ef04 100644
--- a/pkg/trait/jolokia.go
+++ b/pkg/trait/jolokia.go
@@ -128,13 +128,7 @@ func (t *jolokiaTrait) Apply(e *Environment) (err error) {
                return nil
        }
 
-       containerName := defaultContainerName
-       dt := e.Catalog.GetTrait(containerTraitID)
-       if dt != nil {
-               containerName = dt.(*containerTrait).Name
-       }
-
-       container := e.Resources.GetContainerByName(containerName)
+       container := e.getIntegrationContainer()
        if container == nil {
                e.Integration.Status.SetCondition(
                        v1.IntegrationConditionJolokiaAvailable,
diff --git a/pkg/trait/prometheus.go b/pkg/trait/prometheus.go
index b995f63..f489874 100644
--- a/pkg/trait/prometheus.go
+++ b/pkg/trait/prometheus.go
@@ -68,13 +68,7 @@ func (t *prometheusTrait) Configure(e *Environment) (bool, 
error) {
 }
 
 func (t *prometheusTrait) Apply(e *Environment) (err error) {
-       containerName := defaultContainerName
-       dt := e.Catalog.GetTrait(containerTraitID)
-       if dt != nil {
-               containerName = dt.(*containerTrait).Name
-       }
-
-       container := e.Resources.GetContainerByName(containerName)
+       container := e.getIntegrationContainer()
        if container == nil {
                e.Integration.Status.SetCondition(
                        v1.IntegrationConditionPrometheusAvailable,
diff --git a/pkg/trait/quarkus.go b/pkg/trait/quarkus.go
index c814675..50e9c1f 100644
--- a/pkg/trait/quarkus.go
+++ b/pkg/trait/quarkus.go
@@ -148,10 +148,6 @@ func (t *quarkusTrait) addBuildSteps(task *v1.BuilderTask) 
{
        task.Steps = append(task.Steps, 
builder.StepIDsFor(runtime.QuarkusSteps...)...)
 }
 
-func (t *quarkusTrait) addClasspath(_ *Environment) {
-       // No-op as we rely on the Quarkus runner
-}
-
 func (t *quarkusTrait) addRuntimeDependencies(e *Environment) error {
        dependencies := &e.Integration.Status.Dependencies
 
diff --git a/pkg/trait/trait_catalog.go b/pkg/trait/trait_catalog.go
index 42b2069..a045f30 100644
--- a/pkg/trait/trait_catalog.go
+++ b/pkg/trait/trait_catalog.go
@@ -151,7 +151,6 @@ func (c *Catalog) TraitsForProfile(profile v1.TraitProfile) 
[]Trait {
                return []Trait{
                        c.tPlatform,
                        c.tCamel,
-                       c.tDebug,
                        c.tRestDsl,
                        c.tDependencies,
                        c.tBuilder,
@@ -167,6 +166,7 @@ func (c *Catalog) TraitsForProfile(profile v1.TraitProfile) 
[]Trait {
                        c.tPullSecret,
                        c.tJolokia,
                        c.tPrometheus,
+                       c.tDebug,
                        c.tClasspath,
                        c.tProbes,
                        c.tRoute,
@@ -177,7 +177,6 @@ func (c *Catalog) TraitsForProfile(profile v1.TraitProfile) 
[]Trait {
                return []Trait{
                        c.tPlatform,
                        c.tCamel,
-                       c.tDebug,
                        c.tRestDsl,
                        c.tDependencies,
                        c.tBuilder,
@@ -193,6 +192,7 @@ func (c *Catalog) TraitsForProfile(profile v1.TraitProfile) 
[]Trait {
                        c.tPullSecret,
                        c.tJolokia,
                        c.tPrometheus,
+                       c.tDebug,
                        c.tClasspath,
                        c.tProbes,
                        c.tIngress,
@@ -203,7 +203,6 @@ func (c *Catalog) TraitsForProfile(profile v1.TraitProfile) 
[]Trait {
                return []Trait{
                        c.tPlatform,
                        c.tCamel,
-                       c.tDebug,
                        c.tRestDsl,
                        c.tKnative,
                        c.tDependencies,
@@ -220,6 +219,7 @@ func (c *Catalog) TraitsForProfile(profile v1.TraitProfile) 
[]Trait {
                        c.tPullSecret,
                        c.tJolokia,
                        c.tPrometheus,
+                       c.tDebug,
                        c.tClasspath,
                        c.tProbes,
                        c.tIstio,
diff --git a/pkg/trait/trait_types.go b/pkg/trait/trait_types.go
index de8a6c9..f3c8e4b 100644
--- a/pkg/trait/trait_types.go
+++ b/pkg/trait/trait_types.go
@@ -613,3 +613,13 @@ func (e *Environment) 
CollectConfigurationValues(configurationType string) []str
 func (e *Environment) CollectConfigurationPairs(configurationType string) 
map[string]string {
        return CollectConfigurationPairs(configurationType, e.Platform, 
e.IntegrationKit, e.Integration)
 }
+
+func (e *Environment) getIntegrationContainer() *corev1.Container {
+       containerName := defaultContainerName
+       dt := e.Catalog.GetTrait(containerTraitID)
+       if dt != nil {
+               containerName = dt.(*containerTrait).Name
+       }
+
+       return e.Resources.GetContainerByName(containerName)
+}

Reply via email to