diff --git a/pkg/volume/flocker/util.go b/pkg/util/env.go similarity index 52% rename from pkg/volume/flocker/util.go rename to pkg/util/env.go index 25e54f7b1dc..6a479bd9499 100644 --- a/pkg/volume/flocker/util.go +++ b/pkg/util/env.go @@ -14,15 +14,38 @@ See the License for the specific language governing permissions and limitations under the License. */ -package flocker +package util -import "os" +import ( + "os" + "strconv" +) -// getenvOrDefault returns the value of the enviroment variable if it's set, -// otherwise it return the default value provided. -func getenvOrFallback(key, defaultValue string) string { +func GetEnvAsStringOrFallback(key, defaultValue string) string { if v := os.Getenv(key); v != "" { return v } return defaultValue } + +func GetEnvAsIntOrFallback(key string, defaultValue int) (int, error) { + if v := os.Getenv(key); v != "" { + value, err := strconv.Atoi(v) + if err != nil { + return defaultValue, err + } + return value, nil + } + return defaultValue, nil +} + +func GetEnvAsFloat64OrFallback(key string, defaultValue float64) (float64, error) { + if v := os.Getenv(key); v != "" { + value, err := strconv.ParseFloat(v, 64) + if err != nil { + return defaultValue, err + } + return value, nil + } + return defaultValue, nil +} diff --git a/pkg/util/env_test.go b/pkg/util/env_test.go new file mode 100644 index 00000000000..a640fbe2a73 --- /dev/null +++ b/pkg/util/env_test.go @@ -0,0 +1,68 @@ +/* +Copyright 2015 The Kubernetes Authors All rights reserved. + +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 ( + "os" + "strconv" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestGetEnvAsStringOrFallback(t *testing.T) { + const expected = "foo" + + assert := assert.New(t) + + key := "FLOCKER_SET_VAR" + os.Setenv(key, expected) + assert.Equal(expected, GetEnvAsStringOrFallback(key, "~"+expected)) + + key = "FLOCKER_UNSET_VAR" + assert.Equal(expected, GetEnvAsStringOrFallback(key, expected)) +} + +func TestGetEnvAsIntOrFallback(t *testing.T) { + const expected = 1 + + assert := assert.New(t) + + key := "FLOCKER_SET_VAR" + os.Setenv(key, strconv.Itoa(expected)) + returnVal, _ := GetEnvAsIntOrFallback(key, 1) + assert.Equal(expected, returnVal) + + key = "FLOCKER_UNSET_VAR" + returnVal, _ = GetEnvAsIntOrFallback(key, expected) + assert.Equal(expected, returnVal) +} + +func TestGetEnvAsFloat64OrFallback(t *testing.T) { + const expected = 1.0 + + assert := assert.New(t) + + key := "FLOCKER_SET_VAR" + os.Setenv(key, "1.0") + returnVal, _ := GetEnvAsFloat64OrFallback(key, 2.0) + assert.Equal(expected, returnVal) + + key = "FLOCKER_UNSET_VAR" + returnVal, _ = GetEnvAsFloat64OrFallback(key, 1.0) + assert.Equal(expected, returnVal) +} diff --git a/pkg/volume/flocker/plugin.go b/pkg/volume/flocker/plugin.go index a7c6a9c7af6..980744aeeb7 100644 --- a/pkg/volume/flocker/plugin.go +++ b/pkg/volume/flocker/plugin.go @@ -19,12 +19,12 @@ package flocker import ( "fmt" "path" - "strconv" "time" flockerclient "github.com/ClusterHQ/flocker-go" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/types" + "k8s.io/kubernetes/pkg/util" "k8s.io/kubernetes/pkg/util/exec" "k8s.io/kubernetes/pkg/util/mount" "k8s.io/kubernetes/pkg/util/strings" @@ -134,15 +134,15 @@ func (b flockerBuilder) SetUp() error { // newFlockerClient uses environment variables and pod attributes to return a // flocker client capable of talking with the Flocker control service. func (b flockerBuilder) newFlockerClient() (*flockerclient.Client, error) { - host := getenvOrFallback("FLOCKER_CONTROL_SERVICE_HOST", defaultHost) - portConfig := getenvOrFallback("FLOCKER_CONTROL_SERVICE_PORT", strconv.Itoa(defaultPort)) - port, err := strconv.Atoi(portConfig) + host := util.GetEnvAsStringOrFallback("FLOCKER_CONTROL_SERVICE_HOST", defaultHost) + port, err := util.GetEnvAsIntOrFallback("FLOCKER_CONTROL_SERVICE_PORT", defaultPort) + if err != nil { return nil, err } - caCertPath := getenvOrFallback("FLOCKER_CONTROL_SERVICE_CA_FILE", defaultCACertFile) - keyPath := getenvOrFallback("FLOCKER_CONTROL_SERVICE_CLIENT_KEY_FILE", defaultClientKeyFile) - certPath := getenvOrFallback("FLOCKER_CONTROL_SERVICE_CLIENT_CERT_FILE", defaultClientCertFile) + caCertPath := util.GetEnvAsStringOrFallback("FLOCKER_CONTROL_SERVICE_CA_FILE", defaultCACertFile) + keyPath := util.GetEnvAsStringOrFallback("FLOCKER_CONTROL_SERVICE_CLIENT_KEY_FILE", defaultClientKeyFile) + certPath := util.GetEnvAsStringOrFallback("FLOCKER_CONTROL_SERVICE_CLIENT_CERT_FILE", defaultClientCertFile) c, err := flockerclient.NewClient(host, port, b.flocker.pod.Status.HostIP, caCertPath, keyPath, certPath) return c, err diff --git a/pkg/volume/flocker/util_test.go b/pkg/volume/flocker/util_test.go deleted file mode 100644 index 72812f2b06b..00000000000 --- a/pkg/volume/flocker/util_test.go +++ /dev/null @@ -1,37 +0,0 @@ -/* -Copyright 2015 The Kubernetes Authors All rights reserved. - -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 flocker - -import ( - "os" - "testing" - - "github.com/stretchr/testify/assert" -) - -func TestGetenvOrFallback(t *testing.T) { - const expected = "foo" - - assert := assert.New(t) - - key := "FLOCKER_SET_VAR" - os.Setenv(key, expected) - assert.Equal(expected, getenvOrFallback(key, "~"+expected)) - - key = "FLOCKER_UNSET_VAR" - assert.Equal(expected, getenvOrFallback(key, expected)) -}