@@ -83,26 +83,45 @@ func config() (*flag.FlagSet, error) {
8383 flags := flag .NewFlagSet (os .Args [0 ], flag .ContinueOnError )
8484 flags .Usage = func () { usageLong (flags ) }
8585
86+ // Find out which driver we're usng and add its flags
87+ flags .StringVar (& B2D .Driver , "driver" , "virtualbox" , "hypervisor driver." )
88+ flags .BoolVarP (& B2D .Verbose , "verbose" , "v" , false , "display verbose command invocations." )
89+
90+ if err := flags .Parse ([]string {}); err != nil {
91+ return nil , err
92+ }
93+ // Over-ride from the profile file
94+ filename := cfgFilename (B2D .Dir )
95+ if _ , err := os .Lstat (filename ); err == nil {
96+ if _ , err := toml .DecodeFile (filename , & B2D ); err != nil {
97+ return nil , err
98+ }
99+ }
100+ // for cmd==ssh only:
101+ // only pass the params up to and including the `ssh` command - after that,
102+ // there might be other -flags that are destined for the ssh cmd
103+ sshIdx := 1
104+ for sshIdx < len (os .Args ) && os .Args [sshIdx - 1 ] != "ssh" {
105+ sshIdx ++
106+ }
107+ // Command-line overrides profile config.
108+ if err := flags .Parse (os .Args [1 :sshIdx ]); err != nil {
109+ return nil , err
110+ }
111+ if B2D .Verbose {
112+ fmt .Printf ("Using %s driver\n " , B2D .Driver )
113+ }
114+ driver .ConfigFlags (& B2D , flags )
115+
116+ // Add the generic flags
117+
86118 flags .StringVar (& B2D .VM , "vm" , "boot2docker-vm" , "virtual machine name." )
87119 // removed for now, requires re-parsing a new config file which is too messy
88120 //flags.StringVarP(&B2D.Dir, "dir", "d", dir, "boot2docker config directory.")
89121 B2D .Dir = dir
90122 flags .StringVar (& B2D .ISO , "iso" , filepath .Join (dir , "boot2docker.iso" ), "path to boot2docker ISO image." )
91- flags .StringVar (& B2D .VMDK , "basevmdk" , "" , "Path to VMDK to use as base for persistent partition" )
92- vbm := "VBoxManage"
93- if runtime .GOOS == "windows" {
94- p := "C:\\ Program Files\\ Oracle\\ VirtualBox"
95- if t := os .Getenv ("VBOX_INSTALL_PATH" ); t != "" {
96- p = t
97- } else if t = os .Getenv ("VBOX_MSI_INSTALL_PATH" ); t != "" {
98- p = t
99- }
100- vbm = filepath .Join (p , "VBoxManage.exe" )
101- }
123+
102124 flags .BoolVarP (& B2D .Init , "init" , "i" , false , "auto initialize vm instance." )
103- flags .StringVar (& B2D .VBM , "vbm" , vbm , "path to VirtualBox management utility." )
104- flags .BoolVarP (& B2D .Verbose , "verbose" , "v" , false , "display verbose command invocations." )
105- flags .StringVar (& B2D .Driver , "driver" , "virtualbox" , "hypervisor driver." )
106125 flags .StringVar (& B2D .SSH , "ssh" , "ssh" , "path to SSH client utility." )
107126 flags .StringVar (& B2D .SSHGen , "ssh-keygen" , "ssh-keygen" , "path to ssh-keygen utility." )
108127
@@ -132,22 +151,14 @@ func config() (*flag.FlagSet, error) {
132151 return nil , err
133152 }
134153 // Over-ride from the profile file
135- filename := cfgFilename (B2D .Dir )
136154 if _ , err := os .Lstat (filename ); err == nil {
137155 if _ , err := toml .DecodeFile (filename , & B2D ); err != nil {
138156 return nil , err
139157 }
140158 }
141159
142- // for cmd==ssh only:
143- // only pass the params up to and including the `ssh` command - after that,
144- // there might be other -flags that are destined for the ssh cmd
145- i := 1
146- for i < len (os .Args ) && os .Args [i - 1 ] != "ssh" {
147- i ++
148- }
149160 // Command-line overrides profile config.
150- if err := flags .Parse (os .Args [1 :i ]); err != nil {
161+ if err := flags .Parse (os .Args [1 :sshIdx ]); err != nil {
151162 return nil , err
152163 }
153164
0 commit comments