Exemple #1
0
func configureDriver(driver drivers.Driver, driverOpts map[string]interface{}) error {
	opts := &rpcdriver.RPCFlags{Values: driverOpts}
	for _, c := range driver.GetCreateFlags() {
		val, ok := opts.Values[c.String()]
		if !ok {
			opts.Values[c.String()] = c.Default()
			if c.Default() == nil {
				opts.Values[c.String()] = false
			}
		} else {
			if strVal, ok := val.(string); ok {
				switch c.(type) {
				case *mcnflag.StringSliceFlag, mcnflag.StringSliceFlag:
					opts.Values[c.String()] = strings.Split(strVal, ",")
				case *mcnflag.IntFlag, mcnflag.IntFlag:
					v, err := strconv.Atoi(strVal)
					if err != nil {
						return errors.Wrapf(err, "failed to set %s flag: %s is not an int", c.String(), strVal)
					}
					opts.Values[c.String()] = v
				case *mcnflag.BoolFlag, mcnflag.BoolFlag:
					v, err := strconv.ParseBool(strVal)
					if err != nil {
						return errors.Wrapf(err, "failed to set %s flag: %s is not a bool", c.String(), strVal)
					}
					opts.Values[c.String()] = v
				}
			}
		}
	}
	err := driver.SetConfigFromFlags(opts)
	return errors.Wrap(err, "failed to set driver configuration")
}