Skip to content

Commit fa8fa69

Browse files
committed
Wait for machine to start/stop
Signed-off-by: David Gageot <david@gageot.net>
1 parent 8b31854 commit fa8fa69

File tree

1 file changed

+28
-29
lines changed

1 file changed

+28
-29
lines changed

drivers/hyperv/hyperv.go

Lines changed: 28 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -246,19 +246,36 @@ func (d *Driver) chooseVirtualSwitch() (string, error) {
246246
return d.VSwitch, nil
247247
}
248248

249-
func (d *Driver) wait() error {
249+
// waitForIP waits until the host has a valid IP
250+
func (d *Driver) waitForIP() (string, error) {
250251
log.Infof("Waiting for host to start...")
251252

252253
for {
253254
ip, _ := d.GetIP()
254255
if ip != "" {
255-
break
256+
return ip, nil
256257
}
257258

258259
time.Sleep(1 * time.Second)
259260
}
261+
}
260262

261-
return nil
263+
// waitStopped waits until the host is stopped
264+
func (d *Driver) waitStopped() error {
265+
log.Infof("Waiting for host to stop...")
266+
267+
for {
268+
s, err := d.GetState()
269+
if err != nil {
270+
return err
271+
}
272+
273+
if s != state.Running {
274+
return nil
275+
}
276+
277+
time.Sleep(1 * time.Second)
278+
}
262279
}
263280

264281
// Start starts an host
@@ -267,14 +284,14 @@ func (d *Driver) Start() error {
267284
return err
268285
}
269286

270-
if err := d.wait(); err != nil {
287+
ip, err := d.waitForIP()
288+
if err != nil {
271289
return err
272290
}
273291

274-
var err error
275-
d.IPAddress, err = d.GetIP()
292+
d.IPAddress = ip
276293

277-
return err
294+
return nil
278295
}
279296

280297
// Stop stops an host
@@ -283,17 +300,8 @@ func (d *Driver) Stop() error {
283300
return err
284301
}
285302

286-
for {
287-
s, err := d.GetState()
288-
if err != nil {
289-
return err
290-
}
291-
292-
if s != state.Running {
293-
break
294-
}
295-
296-
time.Sleep(1 * time.Second)
303+
if err := d.waitStopped(); err != nil {
304+
return err
297305
}
298306

299307
d.IPAddress = ""
@@ -333,17 +341,8 @@ func (d *Driver) Kill() error {
333341
return err
334342
}
335343

336-
for {
337-
s, err := d.GetState()
338-
if err != nil {
339-
return err
340-
}
341-
342-
if s != state.Running {
343-
break
344-
}
345-
346-
time.Sleep(1 * time.Second)
344+
if err := d.waitStopped(); err != nil {
345+
return err
347346
}
348347

349348
d.IPAddress = ""

0 commit comments

Comments
 (0)