mirror of
https://github.com/openfaas/faas.git
synced 2025-06-27 01:03:26 +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>
90 lines
2.3 KiB
Go
90 lines
2.3 KiB
Go
package opts
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
"strings"
|
|
|
|
"github.com/docker/docker/api/types/blkiodev"
|
|
)
|
|
|
|
// ValidatorWeightFctType defines a validator function that returns a validated struct and/or an error.
|
|
type ValidatorWeightFctType func(val string) (*blkiodev.WeightDevice, error)
|
|
|
|
// ValidateWeightDevice validates that the specified string has a valid device-weight format.
|
|
func ValidateWeightDevice(val string) (*blkiodev.WeightDevice, error) {
|
|
split := strings.SplitN(val, ":", 2)
|
|
if len(split) != 2 {
|
|
return nil, fmt.Errorf("bad format: %s", val)
|
|
}
|
|
if !strings.HasPrefix(split[0], "/dev/") {
|
|
return nil, fmt.Errorf("bad format for device path: %s", val)
|
|
}
|
|
weight, err := strconv.ParseUint(split[1], 10, 0)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("invalid weight for device: %s", val)
|
|
}
|
|
if weight > 0 && (weight < 10 || weight > 1000) {
|
|
return nil, fmt.Errorf("invalid weight for device: %s", val)
|
|
}
|
|
|
|
return &blkiodev.WeightDevice{
|
|
Path: split[0],
|
|
Weight: uint16(weight),
|
|
}, nil
|
|
}
|
|
|
|
// WeightdeviceOpt defines a map of WeightDevices
|
|
type WeightdeviceOpt struct {
|
|
values []*blkiodev.WeightDevice
|
|
validator ValidatorWeightFctType
|
|
}
|
|
|
|
// NewWeightdeviceOpt creates a new WeightdeviceOpt
|
|
func NewWeightdeviceOpt(validator ValidatorWeightFctType) WeightdeviceOpt {
|
|
values := []*blkiodev.WeightDevice{}
|
|
return WeightdeviceOpt{
|
|
values: values,
|
|
validator: validator,
|
|
}
|
|
}
|
|
|
|
// Set validates a WeightDevice and sets its name as a key in WeightdeviceOpt
|
|
func (opt *WeightdeviceOpt) Set(val string) error {
|
|
var value *blkiodev.WeightDevice
|
|
if opt.validator != nil {
|
|
v, err := opt.validator(val)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
value = v
|
|
}
|
|
(opt.values) = append((opt.values), value)
|
|
return nil
|
|
}
|
|
|
|
// String returns WeightdeviceOpt values as a string.
|
|
func (opt *WeightdeviceOpt) String() string {
|
|
var out []string
|
|
for _, v := range opt.values {
|
|
out = append(out, v.String())
|
|
}
|
|
|
|
return fmt.Sprintf("%v", out)
|
|
}
|
|
|
|
// GetList returns a slice of pointers to WeightDevices.
|
|
func (opt *WeightdeviceOpt) GetList() []*blkiodev.WeightDevice {
|
|
var weightdevice []*blkiodev.WeightDevice
|
|
for _, v := range opt.values {
|
|
weightdevice = append(weightdevice, v)
|
|
}
|
|
|
|
return weightdevice
|
|
}
|
|
|
|
// Type returns the option type
|
|
func (opt *WeightdeviceOpt) Type() string {
|
|
return "list"
|
|
}
|