@@ -183,6 +183,7 @@ func (d *Driver) GetURL() (string, error) {
183183 if ip == "" {
184184 return "" , nil
185185 }
186+
186187 return fmt .Sprintf ("tcp://%s:2376" , ip ), nil
187188}
188189
@@ -214,6 +215,39 @@ func (d *Driver) GetState() (state.State, error) {
214215 return state .Running , nil
215216}
216217
218+ func (d * Driver ) waitForIP () error {
219+ var ip string
220+ var err error
221+
222+ log .Infof ("Waiting for VM to come online..." )
223+ for i := 1 ; i <= 60 ; i ++ {
224+ ip , err = d .getIPfromDHCPLease ()
225+ if err != nil {
226+ log .Debugf ("Not there yet %d/%d, error: %s" , i , 60 , err )
227+ time .Sleep (2 * time .Second )
228+ continue
229+ }
230+
231+ if ip != "" {
232+ log .Debugf ("Got an ip: %s" , ip )
233+ d .IPAddress = ip
234+
235+ break
236+ }
237+ }
238+
239+ if ip == "" {
240+ return fmt .Errorf ("Machine didn't return an IP after 120 seconds, aborting" )
241+ }
242+
243+ // Wait for SSH over NAT to be available before returning to user
244+ if err := drivers .WaitForSSH (d ); err != nil {
245+ return err
246+ }
247+
248+ return nil
249+ }
250+
217251// Print driver version, Check VirtualBox version
218252func (d * Driver ) PreCreateCheck () error {
219253 //TODO:libmachine PLEASE output driver version API!
@@ -283,29 +317,6 @@ func (d *Driver) Create() error {
283317 if err := d .Start (); err != nil {
284318 return err
285319 }
286- log .Infof ("Waiting for VM to come online..." )
287-
288- var ip string
289- for i := 1 ; i <= 60 ; i ++ {
290- ip , err = d .getIPfromDHCPLease ()
291- if err != nil {
292- log .Debugf ("Not there yet %d/%d, error: %s" , i , 60 , err )
293- time .Sleep (2 * time .Second )
294- continue
295- }
296-
297- if ip != "" {
298- log .Debugf ("Got an ip: %s" , ip )
299- break
300- }
301- }
302-
303- if ip == "" {
304- return fmt .Errorf ("Machine didn't return an IP after 120 seconds, aborting" )
305- }
306-
307- // We got an IP, let's copy ssh keys over
308- d .IPAddress = ip
309320
310321 // Setup NFS sharing
311322 if d .NFSShare {
@@ -347,7 +358,7 @@ func (d *Driver) Start() error {
347358 }
348359 }()
349360
350- return nil
361+ return d . waitForIP ()
351362}
352363
353364func (d * Driver ) Stop () error {
@@ -410,7 +421,6 @@ func (d *Driver) Restart() error {
410421 if err != nil {
411422 return err
412423 }
413-
414424 if s == state .Running {
415425 if err := d .Stop (); err != nil {
416426 return err
@@ -421,7 +431,7 @@ func (d *Driver) Restart() error {
421431 return err
422432 }
423433
424- return nil
434+ return d . waitForIP ()
425435}
426436
427437func (d * Driver ) Kill () error {
0 commit comments