in pkg/cli/flags.go [36:65]
func (cl *CommandLineInterface) RatioFlag(name string, shorthand *string, defaultValue *string, description string) {
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.MatchString(`^[0-9]+:[0-9]+$`, 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
}
}