From c045ceec1ed6ae1f4ca4785d7e191f49b6be534a Mon Sep 17 00:00:00 2001 From: Neil Wilson Date: Mon, 9 Nov 2015 12:58:56 +0000 Subject: [PATCH 1/2] Change host restart to use the driver implementation Fixes #2140 Signed-off-by: Neil Wilson --- libmachine/host/host.go | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/libmachine/host/host.go b/libmachine/host/host.go index 7179819c..b9cfb8fa 100644 --- a/libmachine/host/host.go +++ b/libmachine/host/host.go @@ -122,24 +122,15 @@ func (h *Host) Kill() error { } func (h *Host) Restart() error { + if drivers.MachineInState(h.Driver, state.Stopped)() { + return h.Start() + } if drivers.MachineInState(h.Driver, state.Running)() { - if err := h.Stop(); err != nil { - return err - } - - if err := mcnutils.WaitFor(drivers.MachineInState(h.Driver, state.Stopped)); err != nil { + if err := h.Driver.Restart(); err != nil { return err } + return mcnutils.WaitFor(drivers.MachineInState(h.Driver, state.Running)) } - - if err := h.Start(); err != nil { - return err - } - - if err := mcnutils.WaitFor(drivers.MachineInState(h.Driver, state.Running)); err != nil { - return err - } - return nil } From 1c6ceed28ee8d2868003ca3ba4622b8eca51a179 Mon Sep 17 00:00:00 2001 From: David Gageot Date: Tue, 22 Dec 2015 10:32:57 +0100 Subject: [PATCH 2/2] Fix Restart() for some drivers Signed-off-by: David Gageot --- drivers/google/google.go | 7 ++++++- drivers/virtualbox/virtualbox.go | 19 +++++++++++-------- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/drivers/google/google.go b/drivers/google/google.go index 0d1837a5..8de00670 100644 --- a/drivers/google/google.go +++ b/drivers/google/google.go @@ -342,6 +342,11 @@ func (d *Driver) Remove() error { return c.deleteDisk() } +// Restart restarts a machine which is known to be running. func (d *Driver) Restart() error { - return nil + if err := d.Stop(); err != nil { + return err + } + + return d.Start() } diff --git a/drivers/virtualbox/virtualbox.go b/drivers/virtualbox/virtualbox.go index fa14a1a9..a0370306 100644 --- a/drivers/virtualbox/virtualbox.go +++ b/drivers/virtualbox/virtualbox.go @@ -500,6 +500,10 @@ func (d *Driver) Start() error { return ErrMustEnableVTX } + return d.waitForIP() +} + +func (d *Driver) waitForIP() error { // Wait for SSH over NAT to be available before returning to user if err := drivers.WaitForSSH(d); err != nil { return err @@ -510,6 +514,7 @@ func (d *Driver) Start() error { return err } + var err error d.IPAddress, err = d.GetIP() return err @@ -572,18 +577,16 @@ func (d *Driver) Remove() error { return d.vbm("unregistervm", "--delete", d.MachineName) } +// Restart restarts a machine which is known to be running. func (d *Driver) Restart() error { - s, err := d.GetState() - if err != nil { + log.Infof("Restarting VM...") + if err := d.vbm("controlvm", d.MachineName, "reset"); err != nil { return err } - if s == state.Running { - if err := d.Stop(); err != nil { - return err - } - } - return d.Start() + d.IPAddress = "" + + return d.waitForIP() } func (d *Driver) Kill() error {