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 ddcc1b6 Allow to inject data from externally crafted secrets #1261 (camel-k bits) ddcc1b6 is described below commit ddcc1b66a5a8cfc51d099a7a5a7e65f70b10ec41 Author: lburgazzoli <lburgazz...@gmail.com> AuthorDate: Tue Feb 11 13:20:48 2020 +0100 Allow to inject data from externally crafted secrets #1261 (camel-k bits) --- pkg/trait/environment.go | 11 +++++++++++ pkg/trait/environment_test.go | 10 ++++++++++ pkg/trait/trait_test.go | 5 +++-- pkg/trait/trait_types.go | 38 +++++++++++++++++++++++++++++--------- 4 files changed, 53 insertions(+), 11 deletions(-) diff --git a/pkg/trait/environment.go b/pkg/trait/environment.go index aca2bee..a0670ca 100644 --- a/pkg/trait/environment.go +++ b/pkg/trait/environment.go @@ -37,6 +37,15 @@ const ( envVarPodName = "POD_NAME" envVarCamelKVersion = "CAMEL_K_VERSION" envVarCamelKRuntimeVersion = "CAMEL_K_RUNTIME_VERSION" + envVarMountPathConfigMaps = "CAMEL_K_MOUNT_PATH_CONFIGMAPS" + + // Disabling gosec linter as it may triggers: + // + // pkg/trait/environment.go:41: G101: Potential hardcoded credentials (gosec) + // envVarMountPathSecrets = "CAMEL_K_MOUNT_PATH_SECRETS" + // + // nolint: gosec + envVarMountPathSecrets = "CAMEL_K_MOUNT_PATH_SECRETS" ) func newEnvironmentTrait() *environmentTrait { @@ -58,6 +67,8 @@ func (t *environmentTrait) Configure(e *Environment) (bool, error) { func (t *environmentTrait) Apply(e *Environment) error { envvar.SetVal(&e.EnvVars, envVarCamelKVersion, defaults.Version) envvar.SetVal(&e.EnvVars, envVarCamelKRuntimeVersion, e.RuntimeVersion) + envvar.SetVal(&e.EnvVars, envVarMountPathConfigMaps, ConfigMapsMountPath) + envvar.SetVal(&e.EnvVars, envVarMountPathSecrets, SecretsMountPath) if t.ContainerMeta { envvar.SetValFrom(&e.EnvVars, envVarNamespace, "metadata.namespace") diff --git a/pkg/trait/environment_test.go b/pkg/trait/environment_test.go index fbcbfc9..016fb60 100644 --- a/pkg/trait/environment_test.go +++ b/pkg/trait/environment_test.go @@ -73,6 +73,8 @@ func TestDefaultEnvironment(t *testing.T) { ns := false name := false ck := false + cms := false + secrets := false env.Resources.VisitDeployment(func(deployment *appsv1.Deployment) { for _, e := range deployment.Spec.Template.Spec.Containers[0].Env { @@ -85,12 +87,20 @@ func TestDefaultEnvironment(t *testing.T) { if e.Name == envVarCamelKVersion { ck = true } + if e.Name == envVarMountPathConfigMaps { + cms = true + } + if e.Name == envVarMountPathSecrets { + secrets = true + } } }) assert.True(t, ns) assert.True(t, name) assert.True(t, ck) + assert.True(t, cms) + assert.True(t, secrets) } func TestEnabledContainerMetaDataEnvVars(t *testing.T) { diff --git a/pkg/trait/trait_test.go b/pkg/trait/trait_test.go index 72a8da0..d1ba501 100644 --- a/pkg/trait/trait_test.go +++ b/pkg/trait/trait_test.go @@ -19,6 +19,7 @@ package trait import ( "context" + "path" "testing" "github.com/stretchr/testify/assert" @@ -339,7 +340,7 @@ func TestConfigureVolumesAndMounts(t *testing.T) { m = findVVolumeMount(mnts, func(m corev1.VolumeMount) bool { return m.Name == "test-configmap" }) assert.NotNil(t, m) - assert.Equal(t, "/etc/camel/conf.d/integration-cm-test-configmap", m.MountPath) + assert.Equal(t, path.Join(ConfigMapsMountPath, "test-configmap"), m.MountPath) v = findVolume(vols, func(v corev1.Volume) bool { return v.Name == "test-secret" }) assert.NotNil(t, v) @@ -348,7 +349,7 @@ func TestConfigureVolumesAndMounts(t *testing.T) { m = findVVolumeMount(mnts, func(m corev1.VolumeMount) bool { return m.Name == "test-secret" }) assert.NotNil(t, m) - assert.Equal(t, "/etc/camel/conf.d/integration-secret-test-secret", m.MountPath) + assert.Equal(t, path.Join(SecretsMountPath, "test-secret"), m.MountPath) v = findVolume(vols, func(v corev1.Volume) bool { return v.Name == "testvolume-data" }) assert.NotNil(t, v) diff --git a/pkg/trait/trait_types.go b/pkg/trait/trait_types.go index 1664214..f52e46e 100644 --- a/pkg/trait/trait_types.go +++ b/pkg/trait/trait_types.go @@ -42,6 +42,29 @@ import ( // True -- const True = "true" +var ( + // BasePath -- + BasePath = "/etc/camel" + + // ConfPath -- + ConfPath = path.Join(BasePath, "conf") + + // ConfdPath -- + ConfdPath = path.Join(BasePath, "conf.d") + + // SourcesMountPath -- + SourcesMountPath = path.Join(BasePath, "sources") + + // ResourcesMountPath -- + ResourcesMountPath = path.Join(BasePath, "resources") + + // ConfigMapsMountPath -- + ConfigMapsMountPath = path.Join(ConfdPath, "_configmaps") + + // SecretsMountPath -- + SecretsMountPath = path.Join(ConfdPath, "_secrets") +) + // Identifiable represent an identifiable type type Identifiable interface { ID() ID @@ -389,8 +412,7 @@ func (e *Environment) ComputeSourcesURI() []string { paths := make([]string, 0, len(sources)) for i, s := range sources { - root := "/etc/camel/sources" - root = path.Join(root, fmt.Sprintf("i-source-%03d", i)) + root := path.Join(SourcesMountPath, fmt.Sprintf("i-source-%03d", i)) srcName := strings.TrimPrefix(s.Name, "/") src := path.Join(root, srcName) @@ -427,7 +449,7 @@ func (e *Environment) ConfigureVolumesAndMounts(vols *[]corev1.Volume, mnts *[]c cmName := fmt.Sprintf("%s-source-%03d", e.Integration.Name, i) refName := fmt.Sprintf("i-source-%03d", i) resName := strings.TrimPrefix(s.Name, "/") - resPath := path.Join("/etc/camel/sources", refName) + resPath := path.Join(SourcesMountPath, refName) if s.ContentRef != "" { cmName = s.ContentRef @@ -465,7 +487,7 @@ func (e *Environment) ConfigureVolumesAndMounts(vols *[]corev1.Volume, mnts *[]c refName := fmt.Sprintf("i-resource-%03d", i) resName := strings.TrimPrefix(r.Name, "/") cmKey := "content" - resPath := path.Join("/etc/camel/resources", refName) + resPath := path.Join(ResourcesMountPath, refName) if r.ContentRef != "" { cmName = r.ContentRef @@ -523,7 +545,7 @@ func (e *Environment) ConfigureVolumesAndMounts(vols *[]corev1.Volume, mnts *[]c *mnts = append(*mnts, corev1.VolumeMount{ Name: "integration-properties", - MountPath: "/etc/camel/conf", + MountPath: ConfPath, }) // @@ -532,7 +554,6 @@ func (e *Environment) ConfigureVolumesAndMounts(vols *[]corev1.Volume, mnts *[]c for _, cmName := range e.CollectConfigurationValues("configmap") { refName := kubernetes.SanitizeLabel(cmName) - fileName := "integration-cm-" + strings.ToLower(cmName) *vols = append(*vols, corev1.Volume{ Name: refName, @@ -547,7 +568,7 @@ func (e *Environment) ConfigureVolumesAndMounts(vols *[]corev1.Volume, mnts *[]c *mnts = append(*mnts, corev1.VolumeMount{ Name: refName, - MountPath: path.Join("/etc/camel/conf.d", fileName), + MountPath: path.Join(ConfigMapsMountPath, strings.ToLower(cmName)), }) } @@ -557,7 +578,6 @@ func (e *Environment) ConfigureVolumesAndMounts(vols *[]corev1.Volume, mnts *[]c for _, secretName := range e.CollectConfigurationValues("secret") { refName := kubernetes.SanitizeLabel(secretName) - fileName := "integration-secret-" + strings.ToLower(secretName) *vols = append(*vols, corev1.Volume{ Name: refName, @@ -570,7 +590,7 @@ func (e *Environment) ConfigureVolumesAndMounts(vols *[]corev1.Volume, mnts *[]c *mnts = append(*mnts, corev1.VolumeMount{ Name: refName, - MountPath: path.Join("/etc/camel/conf.d", fileName), + MountPath: path.Join(SecretsMountPath, strings.ToLower(secretName)), }) }