1package drivers 2 3import "github.com/docker/machine/libmachine/mcnflag" 4 5// CheckDriverOptions implements DriverOptions and is used to validate flag parsing 6type CheckDriverOptions struct { 7 FlagsValues map[string]interface{} 8 CreateFlags []mcnflag.Flag 9 InvalidFlags []string 10} 11 12func (o *CheckDriverOptions) String(key string) string { 13 for _, flag := range o.CreateFlags { 14 if flag.String() == key { 15 f, ok := flag.(mcnflag.StringFlag) 16 if !ok { 17 o.InvalidFlags = append(o.InvalidFlags, flag.String()) 18 } 19 20 value, present := o.FlagsValues[key].(string) 21 if present { 22 return value 23 } 24 return f.Value 25 } 26 } 27 28 return "" 29} 30 31func (o *CheckDriverOptions) StringSlice(key string) []string { 32 for _, flag := range o.CreateFlags { 33 if flag.String() == key { 34 f, ok := flag.(mcnflag.StringSliceFlag) 35 if !ok { 36 o.InvalidFlags = append(o.InvalidFlags, flag.String()) 37 } 38 39 value, present := o.FlagsValues[key].([]string) 40 if present { 41 return value 42 } 43 return f.Value 44 } 45 } 46 47 return nil 48} 49 50func (o *CheckDriverOptions) Int(key string) int { 51 for _, flag := range o.CreateFlags { 52 if flag.String() == key { 53 f, ok := flag.(mcnflag.IntFlag) 54 if !ok { 55 o.InvalidFlags = append(o.InvalidFlags, flag.String()) 56 } 57 58 value, present := o.FlagsValues[key].(int) 59 if present { 60 return value 61 } 62 return f.Value 63 } 64 } 65 66 return 0 67} 68 69func (o *CheckDriverOptions) Bool(key string) bool { 70 for _, flag := range o.CreateFlags { 71 if flag.String() == key { 72 _, ok := flag.(mcnflag.BoolFlag) 73 if !ok { 74 o.InvalidFlags = append(o.InvalidFlags, flag.String()) 75 } 76 } 77 } 78 79 value, present := o.FlagsValues[key].(bool) 80 if present { 81 return value 82 } 83 return false 84} 85