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.EnvPoolsize, flag.EnvBuilderImage, flag.EnvBuildCmd,
|
||||||
flag.RunTimeMinCPU, flag.RunTimeMaxCPU, flag.RunTimeMinMemory, flag.RunTimeMaxMemory,
|
flag.RunTimeMinCPU, flag.RunTimeMaxCPU, flag.RunTimeMinMemory, flag.RunTimeMaxMemory,
|
||||||
flag.EnvTerminationGracePeriod, flag.EnvVersion, flag.EnvImagePullSecret, flag.EnvKeepArchive,
|
flag.EnvTerminationGracePeriod, flag.EnvVersion, flag.EnvImagePullSecret, flag.EnvKeepArchive,
|
||||||
flag.NamespaceEnvironment, flag.EnvExternalNetwork,
|
flag.NamespaceEnvironment, flag.EnvExternalNetwork, flag.Labels, flag.Annotation,
|
||||||
flag.Labels, flag.Annotation,
|
flag.SpecSave, flag.SpecDry, flag.EnvBuilder, flag.EnvRuntime},
|
||||||
flag.SpecSave, flag.SpecDry},
|
|
||||||
})
|
})
|
||||||
|
|
||||||
getCmd := &cobra.Command{
|
getCmd := &cobra.Command{
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import (
|
|||||||
|
|
||||||
"github.com/hashicorp/go-multierror"
|
"github.com/hashicorp/go-multierror"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
|
apiv1 "k8s.io/api/core/v1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
|
||||||
fv1 "github.com/fission/fission/pkg/apis/core/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)
|
resourceReq, err := util.GetResourceReqs(input, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
e = multierror.Append(e, err)
|
e = multierror.Append(e, err)
|
||||||
@@ -165,10 +172,16 @@ func createEnvironmentFromCmd(input cli.Input) (*fv1.Environment, error) {
|
|||||||
Version: envVersion,
|
Version: envVersion,
|
||||||
Runtime: fv1.Runtime{
|
Runtime: fv1.Runtime{
|
||||||
Image: envImg,
|
Image: envImg,
|
||||||
|
Container: &apiv1.Container{
|
||||||
|
Env: runtimeEnvList,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
Builder: fv1.Builder{
|
Builder: fv1.Builder{
|
||||||
Image: envBuilderImg,
|
Image: envBuilderImg,
|
||||||
Command: envBuildCmd,
|
Command: envBuildCmd,
|
||||||
|
Container: &apiv1.Container{
|
||||||
|
Env: builderEnvList,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
Poolsize: poolsize,
|
Poolsize: poolsize,
|
||||||
Resources: *resourceReq,
|
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"}
|
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'"}
|
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}
|
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"}
|
KwName = Flag{Type: String, Name: flagkey.KwName, Usage: "Watch name"}
|
||||||
KwFnName = Flag{Type: String, Name: flagkey.KwFnName, Usage: "Function name"}
|
KwFnName = Flag{Type: String, Name: flagkey.KwFnName, Usage: "Function name"}
|
||||||
|
|||||||
@@ -131,6 +131,8 @@ const (
|
|||||||
EnvImagePullSecret = "imagepullsecret"
|
EnvImagePullSecret = "imagepullsecret"
|
||||||
EnvExecutorType = "executortype"
|
EnvExecutorType = "executortype"
|
||||||
EnvForce = force
|
EnvForce = force
|
||||||
|
EnvBuilder = "builder-env"
|
||||||
|
EnvRuntime = "runtime-env"
|
||||||
|
|
||||||
KwName = resourceName
|
KwName = resourceName
|
||||||
KwFnName = "function"
|
KwFnName = "function"
|
||||||
|
|||||||
@@ -372,6 +372,21 @@ func UpdateMapFromStringSlice(dataMap *map[string]string, params []string) bool
|
|||||||
return updated
|
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 {
|
func UrlForFunction(name, namespace string) string {
|
||||||
prefix := "/fission-function"
|
prefix := "/fission-function"
|
||||||
if namespace != metav1.NamespaceDefault {
|
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