feature: Added commandline flags to set env var on the runtime and builder containers (#2369)
This commit is contained in:
@@ -35,9 +35,8 @@ func Commands() *cobra.Command {
|
||||
flag.EnvPoolsize, flag.EnvBuilderImage, flag.EnvBuildCmd,
|
||||
flag.RunTimeMinCPU, flag.RunTimeMaxCPU, flag.RunTimeMinMemory, flag.RunTimeMaxMemory,
|
||||
flag.EnvTerminationGracePeriod, flag.EnvVersion, flag.EnvImagePullSecret, flag.EnvKeepArchive,
|
||||
flag.NamespaceEnvironment, flag.EnvExternalNetwork,
|
||||
flag.Labels, flag.Annotation,
|
||||
flag.SpecSave, flag.SpecDry},
|
||||
flag.NamespaceEnvironment, flag.EnvExternalNetwork, flag.Labels, flag.Annotation,
|
||||
flag.SpecSave, flag.SpecDry, flag.EnvBuilder, flag.EnvRuntime},
|
||||
})
|
||||
|
||||
getCmd := &cobra.Command{
|
||||
|
||||
@@ -21,6 +21,7 @@ import (
|
||||
|
||||
"github.com/hashicorp/go-multierror"
|
||||
"github.com/pkg/errors"
|
||||
apiv1 "k8s.io/api/core/v1"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
|
||||
fv1 "github.com/fission/fission/pkg/apis/core/v1"
|
||||
@@ -143,6 +144,12 @@ func createEnvironmentFromCmd(input cli.Input) (*fv1.Environment, error) {
|
||||
}
|
||||
}
|
||||
|
||||
builderEnvParams := input.StringSlice(flagkey.EnvBuilder)
|
||||
builderEnvList := util.GetEnvVarFromStringSlice(builderEnvParams)
|
||||
|
||||
runtimeEnvParams := input.StringSlice(flagkey.EnvRuntime)
|
||||
runtimeEnvList := util.GetEnvVarFromStringSlice(runtimeEnvParams)
|
||||
|
||||
resourceReq, err := util.GetResourceReqs(input, nil)
|
||||
if err != nil {
|
||||
e = multierror.Append(e, err)
|
||||
@@ -165,10 +172,16 @@ func createEnvironmentFromCmd(input cli.Input) (*fv1.Environment, error) {
|
||||
Version: envVersion,
|
||||
Runtime: fv1.Runtime{
|
||||
Image: envImg,
|
||||
Container: &apiv1.Container{
|
||||
Env: runtimeEnvList,
|
||||
},
|
||||
},
|
||||
Builder: fv1.Builder{
|
||||
Image: envBuilderImg,
|
||||
Command: envBuildCmd,
|
||||
Container: &apiv1.Container{
|
||||
Env: builderEnvList,
|
||||
},
|
||||
},
|
||||
Poolsize: poolsize,
|
||||
Resources: *resourceReq,
|
||||
|
||||
@@ -181,6 +181,8 @@ var (
|
||||
EnvImagePullSecret = Flag{Type: String, Name: flagkey.EnvImagePullSecret, Usage: "Secret for Kubernetes to pull an image from a private registry"}
|
||||
EnvExecutorType = Flag{Type: String, Name: flagkey.EnvExecutorType, Usage: "Executor type of pod in environment; one of 'poolmgr', 'newdeploy', 'container'"}
|
||||
EnvForce = Flag{Type: Bool, Name: flagkey.EnvForce, Short: "f", Usage: "Force delete env even if one or more functions exist", DefaultValue: false}
|
||||
EnvBuilder = Flag{Type: StringSlice, Name: flagkey.EnvBuilder, Usage: "Environment variable to be set in the builder container"}
|
||||
EnvRuntime = Flag{Type: StringSlice, Name: flagkey.EnvRuntime, Usage: "Environment variable to be set in the runtime container"}
|
||||
|
||||
KwName = Flag{Type: String, Name: flagkey.KwName, Usage: "Watch name"}
|
||||
KwFnName = Flag{Type: String, Name: flagkey.KwFnName, Usage: "Function name"}
|
||||
|
||||
@@ -131,6 +131,8 @@ const (
|
||||
EnvImagePullSecret = "imagepullsecret"
|
||||
EnvExecutorType = "executortype"
|
||||
EnvForce = force
|
||||
EnvBuilder = "builder-env"
|
||||
EnvRuntime = "runtime-env"
|
||||
|
||||
KwName = resourceName
|
||||
KwFnName = "function"
|
||||
|
||||
@@ -372,6 +372,21 @@ func UpdateMapFromStringSlice(dataMap *map[string]string, params []string) bool
|
||||
return updated
|
||||
}
|
||||
|
||||
// GetEnvVarFromStringSlice parses key, val from "key=val" string array and updates passed []v1.EnvVar
|
||||
func GetEnvVarFromStringSlice(params []string) []v1.EnvVar {
|
||||
envVarList := []v1.EnvVar{}
|
||||
for _, m := range params {
|
||||
keyValue := strings.SplitN(m, "=", 2)
|
||||
if len(keyValue) == 2 && keyValue[1] != "" {
|
||||
envVarList = append(envVarList, v1.EnvVar{
|
||||
Name: keyValue[0],
|
||||
Value: keyValue[1],
|
||||
})
|
||||
}
|
||||
}
|
||||
return envVarList
|
||||
}
|
||||
|
||||
func UrlForFunction(name, namespace string) string {
|
||||
prefix := "/fission-function"
|
||||
if namespace != metav1.NamespaceDefault {
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
/*
|
||||
Copyright 2022 The Fission Authors.
|
||||
|
||||
Licensed 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 util
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
"testing"
|
||||
|
||||
v1 "k8s.io/api/core/v1"
|
||||
)
|
||||
|
||||
func TestGetEnvVarFromStringSlice(t *testing.T) {
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
args []string
|
||||
want []v1.EnvVar
|
||||
}{
|
||||
{
|
||||
name: "params-with-key-value",
|
||||
args: []string{"serverless=fission", "container=docker"},
|
||||
want: []v1.EnvVar{
|
||||
{
|
||||
Name: "serverless",
|
||||
Value: "fission",
|
||||
},
|
||||
{
|
||||
Name: "container",
|
||||
Value: "docker",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "params-with-nil-value",
|
||||
args: []string{"serverless=", "container="},
|
||||
want: []v1.EnvVar{},
|
||||
},
|
||||
{
|
||||
name: "params-with-only-key",
|
||||
args: []string{"serverless", "container"},
|
||||
want: []v1.EnvVar{},
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
if got := GetEnvVarFromStringSlice(tt.args); !reflect.DeepEqual(got, tt.want) {
|
||||
t.Errorf("GetEnvVarFromStringSlice() = %v, want %v", got, tt.want)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user