Wait for machine to start/stop

Signed-off-by: David Gageot <david@gageot.net>
This commit is contained in:
David Gageot 2015-12-23 10:06:59 +01:00
parent 8b31854a80
commit fa8fa69e7c
1 changed files with 36 additions and 37 deletions

View File

@ -246,42 +246,23 @@ func (d *Driver) chooseVirtualSwitch() (string, error) {
return d.VSwitch, nil return d.VSwitch, nil
} }
func (d *Driver) wait() error { // waitForIP waits until the host has a valid IP
func (d *Driver) waitForIP() (string, error) {
log.Infof("Waiting for host to start...") log.Infof("Waiting for host to start...")
for { for {
ip, _ := d.GetIP() ip, _ := d.GetIP()
if ip != "" { if ip != "" {
break return ip, nil
} }
time.Sleep(1 * time.Second) time.Sleep(1 * time.Second)
} }
return nil
} }
// Start starts an host // waitStopped waits until the host is stopped
func (d *Driver) Start() error { func (d *Driver) waitStopped() error {
if err := cmd("Start-VM", d.MachineName); err != nil { log.Infof("Waiting for host to stop...")
return err
}
if err := d.wait(); err != nil {
return err
}
var err error
d.IPAddress, err = d.GetIP()
return err
}
// Stop stops an host
func (d *Driver) Stop() error {
if err := cmd("Stop-VM", d.MachineName); err != nil {
return err
}
for { for {
s, err := d.GetState() s, err := d.GetState()
@ -290,11 +271,38 @@ func (d *Driver) Stop() error {
} }
if s != state.Running { if s != state.Running {
break return nil
} }
time.Sleep(1 * time.Second) time.Sleep(1 * time.Second)
} }
}
// Start starts an host
func (d *Driver) Start() error {
if err := cmd("Start-VM", d.MachineName); err != nil {
return err
}
ip, err := d.waitForIP()
if err != nil {
return err
}
d.IPAddress = ip
return nil
}
// Stop stops an host
func (d *Driver) Stop() error {
if err := cmd("Stop-VM", d.MachineName); err != nil {
return err
}
if err := d.waitStopped(); err != nil {
return err
}
d.IPAddress = "" d.IPAddress = ""
@ -333,17 +341,8 @@ func (d *Driver) Kill() error {
return err return err
} }
for { if err := d.waitStopped(); err != nil {
s, err := d.GetState() return err
if err != nil {
return err
}
if s != state.Running {
break
}
time.Sleep(1 * time.Second)
} }
d.IPAddress = "" d.IPAddress = ""