You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by nf...@apache.org on 2021/01/28 15:37:16 UTC

[camel-k] branch master updated: fix(trait): using proper contentKey for sources

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

nferraro 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 c06ef01  fix(trait): using proper contentKey for sources
c06ef01 is described below

commit c06ef01abdb5c376a6909040c502f5520cd2597f
Author: Pasquale Congiusti <pa...@gmail.com>
AuthorDate: Thu Jan 28 10:12:31 2021 +0100

    fix(trait): using proper contentKey for sources
    
    * If an integration is providing specifically a ConfigMap's item we now use its key, leaving "content" as default
    * Added some unit test to check default and content ref behavior also for sources
    
    Fix #1951
---
 pkg/trait/trait_test.go  | 60 +++++++++++++++++++++++++++++++++++++++++++++++-
 pkg/trait/trait_types.go |  7 ++++--
 2 files changed, 64 insertions(+), 3 deletions(-)

diff --git a/pkg/trait/trait_test.go b/pkg/trait/trait_test.go
index 491a856..6336fd7 100644
--- a/pkg/trait/trait_test.go
+++ b/pkg/trait/trait_test.go
@@ -207,7 +207,65 @@ func TestTraitHierarchyDecode(t *testing.T) {
 	assert.Equal(t, 15, *kns.Target)
 }
 
-func TestConfigureVolumesAndMounts(t *testing.T) {
+func TestConfigureVolumesAndMountsSources(t *testing.T) {
+	env := Environment{
+		Resources: kubernetes.NewCollection(),
+		Integration: &v1.Integration{
+			ObjectMeta: metav1.ObjectMeta{
+				Name:      TestDeploymentName,
+				Namespace: "ns",
+			},
+			Spec: v1.IntegrationSpec{
+				Sources: []v1.SourceSpec{
+					{
+						DataSpec: v1.DataSpec{
+							Name:       "source1.java",
+							ContentRef: "my-cm1",
+							ContentKey: "source1.java",
+						},
+						Type: "data",
+					},
+					{
+						DataSpec: v1.DataSpec{
+							Name:       "source2.java",
+							ContentRef: "my-cm2",
+						},
+						Type: "data",
+					},
+				},
+			},
+		},
+	}
+
+	vols := make([]corev1.Volume, 0)
+	mnts := make([]corev1.VolumeMount, 0)
+
+	env.Resources.AddAll(env.ComputeConfigMaps())
+	env.ConfigureVolumesAndMounts(&vols, &mnts)
+
+	assert.Len(t, vols, 2)
+	assert.Len(t, mnts, 2)
+
+	v := findVolume(vols, func(v corev1.Volume) bool { return v.ConfigMap.Name == "my-cm1" })
+	assert.NotNil(t, v)
+	assert.NotNil(t, v.VolumeSource.ConfigMap)
+	assert.Len(t, v.VolumeSource.ConfigMap.Items, 1)
+	assert.Equal(t, "source1.java", v.VolumeSource.ConfigMap.Items[0].Key)
+
+	m := findVVolumeMount(mnts, func(m corev1.VolumeMount) bool { return m.Name == v.Name })
+	assert.NotNil(t, m)
+
+	v = findVolume(vols, func(v corev1.Volume) bool { return v.ConfigMap.Name == "my-cm2" })
+	assert.NotNil(t, v)
+	assert.NotNil(t, v.VolumeSource.ConfigMap)
+	assert.Len(t, v.VolumeSource.ConfigMap.Items, 1)
+	assert.Equal(t, "content", v.VolumeSource.ConfigMap.Items[0].Key)
+
+	m = findVVolumeMount(mnts, func(m corev1.VolumeMount) bool { return m.Name == v.Name })
+	assert.NotNil(t, m)
+}
+
+func TestConfigureVolumesAndMountsResourcesAndProperties(t *testing.T) {
 	env := Environment{
 		Resources: kubernetes.NewCollection(),
 		Integration: &v1.Integration{
diff --git a/pkg/trait/trait_types.go b/pkg/trait/trait_types.go
index f28fc8f..e896b3b 100644
--- a/pkg/trait/trait_types.go
+++ b/pkg/trait/trait_types.go
@@ -529,12 +529,15 @@ func (e *Environment) ConfigureVolumesAndMounts(vols *[]corev1.Volume, mnts *[]c
 	//
 	// Volumes :: Sources
 	//
-
 	for i, s := range e.Integration.Sources() {
 		cmName := fmt.Sprintf("%s-source-%03d", e.Integration.Name, i)
 		if s.ContentRef != "" {
 			cmName = s.ContentRef
 		}
+		cmKey := "content"
+		if s.ContentKey != "" {
+			cmKey = s.ContentKey
+		}
 		resName := strings.TrimPrefix(s.Name, "/")
 		refName := fmt.Sprintf("i-source-%03d", i)
 		resPath := path.Join(SourcesMountPath, refName)
@@ -548,7 +551,7 @@ func (e *Environment) ConfigureVolumesAndMounts(vols *[]corev1.Volume, mnts *[]c
 					},
 					Items: []corev1.KeyToPath{
 						{
-							Key:  "content",
+							Key:  cmKey,
 							Path: resName,
 						},
 					},