Skip to content

Commit bec7705

Browse files
committed
Merge pull request #57 from zchee/wait-available-ssh
Add wait for SSH when (Re)Start
2 parents 40d1a04 + 849ee66 commit bec7705

File tree

1 file changed

+36
-26
lines changed

1 file changed

+36
-26
lines changed

xhyve/xhyve.go

Lines changed: 36 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -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
218252
func (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

353364
func (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

427437
func (d *Driver) Kill() error {

0 commit comments

Comments
 (0)