in pkg/cli/flags.go [20:50]
func (cl *CommandLineInterface) RatioFlag(name string, shorthand *string, defaultValue *string, description string) error {
if defaultValue == nil {
cl.nilDefaults[name] = true
defaultValue = cl.StringMe("")
}
if shorthand != nil {
cl.Flags[name] = cl.Command.Flags().StringP(name, string(*shorthand), *defaultValue, description)
} else {
cl.Flags[name] = cl.Command.Flags().String(name, *defaultValue, description)
}
cl.validators[name] = func(val interface{}) error {
if val == nil {
return nil
}
vcpuToMemRatioVal := *val.(*string)
valid, err := regexp.Match(`^[0-9]+:[0-9]+$`, []byte(vcpuToMemRatioVal))
if err != nil || !valid {
return fmt.Errorf("Invalid input for --%s. A valid example is 1:2", name)
}
vals := strings.Split(vcpuToMemRatioVal, ":")
vcpusRatioVal, err1 := strconv.Atoi(vals[0])
memRatioVal, err2 := strconv.Atoi(vals[1])
if err1 != nil || err2 != nil {
return fmt.Errorf("Invalid input for --%s. Ratio values must be integers. A valid example is 1:2", name)
}
cl.Flags[name] = cl.Float64Me(float64(memRatioVal) / float64(vcpusRatioVal))
return nil
}
return nil
}