mirror of
https://github.com/openfaas/faas.git
synced 2025-06-25 00:03:24 +00:00
**What** - Add the ability to specify secrets as a csv - Vendor the docker/cli/opts - Update the guide for secrets to use the `faas-cli` **Why** - Allowing the csv specification of secrets gives users more control about how those secrets are mounted into the container. This is good for things like key rotation and for developers that are building on top of OpenFaaS. Signed-off-by: Lucas Roesler <lucas.roesler@gmail.com>
47 lines
1.1 KiB
Go
47 lines
1.1 KiB
Go
package opts
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"runtime"
|
|
"strings"
|
|
)
|
|
|
|
// ValidateEnv validates an environment variable and returns it.
|
|
// If no value is specified, it returns the current value using os.Getenv.
|
|
//
|
|
// As on ParseEnvFile and related to #16585, environment variable names
|
|
// are not validate what so ever, it's up to application inside docker
|
|
// to validate them or not.
|
|
//
|
|
// The only validation here is to check if name is empty, per #25099
|
|
func ValidateEnv(val string) (string, error) {
|
|
arr := strings.Split(val, "=")
|
|
if arr[0] == "" {
|
|
return "", fmt.Errorf("invalid environment variable: %s", val)
|
|
}
|
|
if len(arr) > 1 {
|
|
return val, nil
|
|
}
|
|
if !doesEnvExist(val) {
|
|
return val, nil
|
|
}
|
|
return fmt.Sprintf("%s=%s", val, os.Getenv(val)), nil
|
|
}
|
|
|
|
func doesEnvExist(name string) bool {
|
|
for _, entry := range os.Environ() {
|
|
parts := strings.SplitN(entry, "=", 2)
|
|
if runtime.GOOS == "windows" {
|
|
// Environment variable are case-insensitive on Windows. PaTh, path and PATH are equivalent.
|
|
if strings.EqualFold(parts[0], name) {
|
|
return true
|
|
}
|
|
}
|
|
if parts[0] == name {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|