mirror of
https://github.com/moby/moby.git
synced 2026-07-11 09:08:27 +00:00
48 lines
1.1 KiB
Go
48 lines
1.1 KiB
Go
package genericresource
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
"strings"
|
|
|
|
"github.com/docker/swarmkit/api"
|
|
)
|
|
|
|
func newParseError(format string, args ...interface{}) error {
|
|
return fmt.Errorf("could not parse GenericResource: "+format, args...)
|
|
}
|
|
|
|
// Parse parses the GenericResource resources given by the arguments
|
|
func Parse(cmd string) ([]*api.GenericResource, error) {
|
|
var rs []*api.GenericResource
|
|
|
|
for _, term := range strings.Split(cmd, ";") {
|
|
kva := strings.Split(term, "=")
|
|
if len(kva) != 2 {
|
|
return nil, newParseError("incorrect term %s, missing '=' or malformed expr", term)
|
|
}
|
|
|
|
key := strings.TrimSpace(kva[0])
|
|
val := strings.TrimSpace(kva[1])
|
|
|
|
u, err := strconv.ParseInt(val, 10, 64)
|
|
if err == nil {
|
|
if u < 0 {
|
|
return nil, newParseError("cannot ask for negative resource %s", key)
|
|
}
|
|
rs = append(rs, NewDiscrete(key, u))
|
|
continue
|
|
}
|
|
|
|
if len(val) > 2 && val[0] == '{' && val[len(val)-1] == '}' {
|
|
val = val[1 : len(val)-1]
|
|
rs = append(rs, NewSet(key, strings.Split(val, ",")...)...)
|
|
continue
|
|
}
|
|
|
|
return nil, newParseError("could not parse expression '%s'", term)
|
|
}
|
|
|
|
return rs, nil
|
|
}
|