mirror of
https://github.com/openfaas/faas.git
synced 2025-06-14 19:26:48 +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>
80 lines
1.8 KiB
Go
80 lines
1.8 KiB
Go
package opts
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/docker/docker/api/types"
|
|
)
|
|
|
|
// RuntimeOpt defines a map of Runtimes
|
|
type RuntimeOpt struct {
|
|
name string
|
|
stockRuntimeName string
|
|
values *map[string]types.Runtime
|
|
}
|
|
|
|
// NewNamedRuntimeOpt creates a new RuntimeOpt
|
|
func NewNamedRuntimeOpt(name string, ref *map[string]types.Runtime, stockRuntime string) *RuntimeOpt {
|
|
if ref == nil {
|
|
ref = &map[string]types.Runtime{}
|
|
}
|
|
return &RuntimeOpt{name: name, values: ref, stockRuntimeName: stockRuntime}
|
|
}
|
|
|
|
// Name returns the name of the NamedListOpts in the configuration.
|
|
func (o *RuntimeOpt) Name() string {
|
|
return o.name
|
|
}
|
|
|
|
// Set validates and updates the list of Runtimes
|
|
func (o *RuntimeOpt) Set(val string) error {
|
|
parts := strings.SplitN(val, "=", 2)
|
|
if len(parts) != 2 {
|
|
return fmt.Errorf("invalid runtime argument: %s", val)
|
|
}
|
|
|
|
parts[0] = strings.TrimSpace(parts[0])
|
|
parts[1] = strings.TrimSpace(parts[1])
|
|
if parts[0] == "" || parts[1] == "" {
|
|
return fmt.Errorf("invalid runtime argument: %s", val)
|
|
}
|
|
|
|
parts[0] = strings.ToLower(parts[0])
|
|
if parts[0] == o.stockRuntimeName {
|
|
return fmt.Errorf("runtime name '%s' is reserved", o.stockRuntimeName)
|
|
}
|
|
|
|
if _, ok := (*o.values)[parts[0]]; ok {
|
|
return fmt.Errorf("runtime '%s' was already defined", parts[0])
|
|
}
|
|
|
|
(*o.values)[parts[0]] = types.Runtime{Path: parts[1]}
|
|
|
|
return nil
|
|
}
|
|
|
|
// String returns Runtime values as a string.
|
|
func (o *RuntimeOpt) String() string {
|
|
var out []string
|
|
for k := range *o.values {
|
|
out = append(out, k)
|
|
}
|
|
|
|
return fmt.Sprintf("%v", out)
|
|
}
|
|
|
|
// GetMap returns a map of Runtimes (name: path)
|
|
func (o *RuntimeOpt) GetMap() map[string]types.Runtime {
|
|
if o.values != nil {
|
|
return *o.values
|
|
}
|
|
|
|
return map[string]types.Runtime{}
|
|
}
|
|
|
|
// Type returns the type of the option
|
|
func (o *RuntimeOpt) Type() string {
|
|
return "runtime"
|
|
}
|