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 d179ded  Fix #722: filter allowed env variables in Knative
d179ded is described below

commit d179dedeead6c886edf03dde197260b20baf9660
Author: nferraro <ni.ferr...@gmail.com>
AuthorDate: Tue Jun 4 18:14:37 2019 +0200

    Fix #722: filter allowed env variables in Knative
---
 pkg/trait/knative_service.go | 26 +++++++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)

diff --git a/pkg/trait/knative_service.go b/pkg/trait/knative_service.go
index cb04bc6..042470d 100644
--- a/pkg/trait/knative_service.go
+++ b/pkg/trait/knative_service.go
@@ -207,7 +207,7 @@ func (t *knativeServiceTrait) getServiceFor(e *Environment) 
*serving.Service {
        envvar.SetVal(environment, "CAMEL_K_CONF_D", "/etc/camel/conf.d")
 
        // add env vars from traits
-       for _, envVar := range e.EnvVars {
+       for _, envVar := range t.getAllowedEnvVars(e) {
                
envvar.SetVar(&svc.Spec.RunLatest.Configuration.RevisionTemplate.Spec.Container.Env,
 envVar)
        }
 
@@ -218,3 +218,27 @@ func (t *knativeServiceTrait) getServiceFor(e 
*Environment) *serving.Service {
 
        return &svc
 }
+
+func (t *knativeServiceTrait) getAllowedEnvVars(e *Environment) 
[]corev1.EnvVar {
+       res := make([]corev1.EnvVar, 0, len(e.EnvVars))
+       for _, env := range e.EnvVars {
+               if env.ValueFrom == nil {
+                       // Standard env vars are supported
+                       res = append(res, env)
+               } else if env.ValueFrom.FieldRef != nil && 
env.ValueFrom.FieldRef.FieldPath == "metadata.namespace" {
+                       // Namespace is known to the operator
+                       res = append(res, corev1.EnvVar{
+                               Name:  env.Name,
+                               Value: e.Integration.Namespace,
+                       })
+               } else if env.ValueFrom.FieldRef != nil {
+                       t.L.Infof("Environment variable %s uses fieldRef and 
cannot be set on a Knative service", env.Name)
+               } else if env.ValueFrom.ResourceFieldRef != nil {
+                       t.L.Infof("Environment variable %s uses 
resourceFieldRef and cannot be set on a Knative service", env.Name)
+               } else {
+                       // Other downward APIs should be supported
+                       res = append(res, env)
+               }
+       }
+       return res
+}

Reply via email to