diff --git a/drivers/amazonec2/amazonec2.go b/drivers/amazonec2/amazonec2.go index 4b38945ce2..eff8ba3df9 100644 --- a/drivers/amazonec2/amazonec2.go +++ b/drivers/amazonec2/amazonec2.go @@ -612,11 +612,7 @@ func (d *Driver) Start() error { return err } - if err := d.waitForInstance(); err != nil { - return err - } - - return nil + return d.waitForInstance() } func (d *Driver) Stop() error { @@ -627,20 +623,6 @@ func (d *Driver) Stop() error { return err } -func (d *Driver) Remove() error { - - if err := d.terminate(); err != nil { - return fmt.Errorf("unable to terminate instance: %s", err) - } - - // remove keypair - if err := d.deleteKeyPair(); err != nil { - return fmt.Errorf("unable to remove key pair: %s", err) - } - - return nil -} - func (d *Driver) Restart() error { _, err := d.getClient().RebootInstances(&ec2.RebootInstancesInput{ InstanceIds: []*string{&d.InstanceId}, @@ -656,6 +638,19 @@ func (d *Driver) Kill() error { return err } +func (d *Driver) Remove() error { + if err := d.terminate(); err != nil { + return fmt.Errorf("unable to terminate instance: %s", err) + } + + // remove keypair + if err := d.deleteKeyPair(); err != nil { + return fmt.Errorf("unable to remove key pair: %s", err) + } + + return nil +} + func (d *Driver) getClient() *ec2.EC2 { config := aws.NewConfig() config = config.WithRegion(d.Region) diff --git a/drivers/azure/azure.go b/drivers/azure/azure.go index 45656f0795..bc720f2c1a 100644 --- a/drivers/azure/azure.go +++ b/drivers/azure/azure.go @@ -13,7 +13,6 @@ import ( "github.com/docker/machine/libmachine/drivers" "github.com/docker/machine/libmachine/log" "github.com/docker/machine/libmachine/mcnflag" - "github.com/docker/machine/libmachine/mcnutils" "github.com/docker/machine/libmachine/ssh" "github.com/docker/machine/libmachine/state" ) @@ -286,8 +285,6 @@ func (d *Driver) Start() error { return nil } - log.Debugf("starting %s", d.MachineName) - if err := vmClient.StartRole(d.MachineName, d.MachineName, d.MachineName); err != nil { return err } @@ -302,15 +299,6 @@ func (d *Driver) Stop() error { return err } - if vmState, err := d.GetState(); err != nil { - return err - } else if vmState == state.Stopped { - log.Infof("Host is already stopped") - return nil - } - - log.Debugf("stopping %s", d.MachineName) - if err := vmClient.ShutdownRole(d.MachineName, d.MachineName, d.MachineName); err != nil { return err } @@ -319,69 +307,38 @@ func (d *Driver) Stop() error { return nil } +func (d *Driver) Restart() error { + if err := d.setUserSubscription(); err != nil { + return err + } + + if err := vmClient.RestartRole(d.MachineName, d.MachineName, d.MachineName); err != nil { + return err + } + + var err error + d.IPAddress, err = d.GetIP() + return err +} + +func (d *Driver) Kill() error { + return d.Stop() +} + func (d *Driver) Remove() error { if err := d.setUserSubscription(); err != nil { return err } + if available, _, err := vmClient.CheckHostedServiceNameAvailability(d.MachineName); err != nil { return err } else if available { return nil } - log.Debugf("removing %s", d.MachineName) - return vmClient.DeleteHostedService(d.MachineName) } -func (d *Driver) Restart() error { - err := d.setUserSubscription() - if err != nil { - return err - } - if vmState, err := d.GetState(); err != nil { - return err - } else if vmState == state.Stopped { - return errors.New("Host is already stopped, use start command to run it") - } - - log.Debugf("restarting %s", d.MachineName) - - if err := vmClient.RestartRole(d.MachineName, d.MachineName, d.MachineName); err != nil { - return err - } - - d.IPAddress, err = d.GetIP() - return err -} - -func (d *Driver) Kill() error { - if err := d.setUserSubscription(); err != nil { - return err - } - - if vmState, err := d.GetState(); err != nil { - return err - } else if vmState == state.Stopped { - log.Infof("Host is already stopped") - return nil - } - - log.Debugf("killing %s", d.MachineName) - - if err := vmClient.ShutdownRole(d.MachineName, d.MachineName, d.MachineName); err != nil { - return err - } - - d.IPAddress = "" - return nil -} - -func generateVMName() string { - randomID := mcnutils.TruncateID(mcnutils.GenerateRandomID()) - return fmt.Sprintf("docker-host-%s", randomID) -} - func (d *Driver) setUserSubscription() error { if d.PublishSettingsFilePath != "" { return azure.ImportPublishSettingsFile(d.PublishSettingsFilePath) diff --git a/drivers/digitalocean/digitalocean.go b/drivers/digitalocean/digitalocean.go index 32f2ffc4ec..ae2bb3a577 100644 --- a/drivers/digitalocean/digitalocean.go +++ b/drivers/digitalocean/digitalocean.go @@ -288,6 +288,16 @@ func (d *Driver) Stop() error { return err } +func (d *Driver) Restart() error { + _, _, err := d.getClient().DropletActions.Reboot(d.DropletID) + return err +} + +func (d *Driver) Kill() error { + _, _, err := d.getClient().DropletActions.PowerOff(d.DropletID) + return err +} + func (d *Driver) Remove() error { client := d.getClient() if resp, err := client.Keys.DeleteByID(d.SSHKeyID); err != nil { @@ -307,16 +317,6 @@ func (d *Driver) Remove() error { return nil } -func (d *Driver) Restart() error { - _, _, err := d.getClient().DropletActions.Reboot(d.DropletID) - return err -} - -func (d *Driver) Kill() error { - _, _, err := d.getClient().DropletActions.PowerOff(d.DropletID) - return err -} - func (d *Driver) getClient() *godo.Client { token := &oauth2.Token{AccessToken: d.AccessToken} tokenSource := oauth2.StaticTokenSource(token) diff --git a/drivers/exoscale/exoscale.go b/drivers/exoscale/exoscale.go index da53c45da7..bce106a3f3 100644 --- a/drivers/exoscale/exoscale.go +++ b/drivers/exoscale/exoscale.go @@ -320,45 +320,40 @@ func (d *Driver) Create() error { } func (d *Driver) Start() error { - vmstate, err := d.GetState() - if err != nil { - return err - } - if vmstate == state.Running || vmstate == state.Starting { - log.Infof("Host is already running or starting") - return nil - } - client := egoscale.NewClient(d.URL, d.APIKey, d.APISecretKey) + svmresp, err := client.StartVirtualMachine(d.ID) if err != nil { return err } - if err = d.waitForJob(client, svmresp); err != nil { - return err - } - return nil + + return d.waitForJob(client, svmresp) } func (d *Driver) Stop() error { - vmstate, err := d.GetState() - if err != nil { - return err - } - if vmstate == state.Stopped { - log.Infof("Host is already stopped") - return nil - } - client := egoscale.NewClient(d.URL, d.APIKey, d.APISecretKey) + svmresp, err := client.StopVirtualMachine(d.ID) if err != nil { return err } - if err = d.waitForJob(client, svmresp); err != nil { + + return d.waitForJob(client, svmresp) +} + +func (d *Driver) Restart() error { + client := egoscale.NewClient(d.URL, d.APIKey, d.APISecretKey) + + svmresp, err := client.RebootVirtualMachine(d.ID) + if err != nil { return err } - return nil + + return d.waitForJob(client, svmresp) +} + +func (d *Driver) Kill() error { + return d.Stop() } func (d *Driver) Remove() error { @@ -380,31 +375,6 @@ func (d *Driver) Remove() error { return nil } -func (d *Driver) Restart() error { - vmstate, err := d.GetState() - if err != nil { - return err - } - if vmstate == state.Stopped { - return fmt.Errorf("Host is stopped, use start command to start it") - } - - client := egoscale.NewClient(d.URL, d.APIKey, d.APISecretKey) - svmresp, err := client.RebootVirtualMachine(d.ID) - if err != nil { - return err - } - if err = d.waitForJob(client, svmresp); err != nil { - return err - } - - return nil -} - -func (d *Driver) Kill() error { - return d.Stop() -} - func (d *Driver) jobIsDone(client *egoscale.Client, jobid string) (bool, error) { resp, err := client.PollAsyncJob(jobid) if err != nil { diff --git a/drivers/fakedriver/fakedriver.go b/drivers/fakedriver/fakedriver.go index 34caa78599..953db88df2 100644 --- a/drivers/fakedriver/fakedriver.go +++ b/drivers/fakedriver/fakedriver.go @@ -80,10 +80,6 @@ func (d *Driver) Create() error { return nil } -func (d *Driver) Remove() error { - return nil -} - func (d *Driver) Start() error { d.MockState = state.Running return nil @@ -104,6 +100,10 @@ func (d *Driver) Kill() error { return nil } +func (d *Driver) Remove() error { + return nil +} + func (d *Driver) Upgrade() error { return nil } diff --git a/drivers/generic/generic.go b/drivers/generic/generic.go index 7bfd27b91a..918ea9d45b 100644 --- a/drivers/generic/generic.go +++ b/drivers/generic/generic.go @@ -159,12 +159,7 @@ func (d *Driver) Stop() error { return errors.New("generic driver does not support stop") } -func (d *Driver) Remove() error { - return nil -} - func (d *Driver) Restart() error { - log.Debug("Restarting...") _, err := drivers.RunSSHCommandFromDriver(d, "sudo shutdown -r now") return err } @@ -172,3 +167,7 @@ func (d *Driver) Restart() error { func (d *Driver) Kill() error { return errors.New("generic driver does not support kill") } + +func (d *Driver) Remove() error { + return nil +} diff --git a/drivers/google/compute_util.go b/drivers/google/compute_util.go index 846b9deae4..87a4768d0c 100644 --- a/drivers/google/compute_util.go +++ b/drivers/google/compute_util.go @@ -340,7 +340,6 @@ func (c *ComputeUtil) deleteInstance() error { // stopInstance stops the instance. func (c *ComputeUtil) stopInstance() error { - log.Infof("Stopping instance.") op, err := c.service.Instances.Stop(c.project, c.zone, c.instanceName).Do() if err != nil { return err @@ -352,7 +351,6 @@ func (c *ComputeUtil) stopInstance() error { // startInstance starts the instance. func (c *ComputeUtil) startInstance() error { - log.Infof("Starting instance.") op, err := c.service.Instances.Start(c.project, c.zone, c.instanceName).Do() if err != nil { return err diff --git a/drivers/google/google.go b/drivers/google/google.go index 15346e267f..efdac41f29 100644 --- a/drivers/google/google.go +++ b/drivers/google/google.go @@ -316,6 +316,15 @@ func (d *Driver) Stop() error { return nil } +// Restart restarts a machine which is known to be running. +func (d *Driver) Restart() error { + if err := d.Stop(); err != nil { + return err + } + + return d.Start() +} + // Kill stops an existing GCE instance. func (d *Driver) Kill() error { return d.Stop() @@ -339,12 +348,3 @@ func (d *Driver) Remove() error { } return c.deleteDisk() } - -// Restart restarts a machine which is known to be running. -func (d *Driver) Restart() error { - if err := d.Stop(); err != nil { - return err - } - - return d.Start() -} diff --git a/drivers/openstack/openstack.go b/drivers/openstack/openstack.go index 87cbcd1555..001b7c721b 100644 --- a/drivers/openstack/openstack.go +++ b/drivers/openstack/openstack.go @@ -383,26 +383,31 @@ func (d *Driver) Create() error { } func (d *Driver) Start() error { - log.Debug("Starting OpenStack instance...", map[string]string{"MachineId": d.MachineId}) if err := d.initCompute(); err != nil { return err } - if err := d.client.StartInstance(d); err != nil { - return err - } - return nil + + return d.client.StartInstance(d) } func (d *Driver) Stop() error { - log.Debug("Stopping OpenStack instance...", map[string]string{"MachineId": d.MachineId}) if err := d.initCompute(); err != nil { return err } - if err := d.client.StopInstance(d); err != nil { + + return d.client.StopInstance(d) +} + +func (d *Driver) Restart() error { + if err := d.initCompute(); err != nil { return err } - return nil + return d.client.RestartInstance(d) +} + +func (d *Driver) Kill() error { + return d.Stop() } func (d *Driver) Remove() error { @@ -422,21 +427,6 @@ func (d *Driver) Remove() error { return nil } -func (d *Driver) Restart() error { - log.Info("Restarting OpenStack instance...", map[string]string{"MachineId": d.MachineId}) - if err := d.initCompute(); err != nil { - return err - } - if err := d.client.RestartInstance(d); err != nil { - return err - } - return nil -} - -func (d *Driver) Kill() error { - return d.Stop() -} - const ( errorMandatoryEnvOrOption string = "%s must be specified either using the environment variable %s or the CLI option %s" errorMandatoryOption string = "%s must be specified using the CLI option %s" diff --git a/drivers/softlayer/driver.go b/drivers/softlayer/driver.go index 38aaf677a5..dec96a6648 100644 --- a/drivers/softlayer/driver.go +++ b/drivers/softlayer/driver.go @@ -454,10 +454,6 @@ func (d *Driver) publicSSHKeyPath() string { return d.GetSSHKeyPath() + ".pub" } -func (d *Driver) Kill() error { - return d.getClient().VirtualGuest().PowerOff(d.Id) -} - func (d *Driver) Remove() error { log.Infof("Canceling SoftLayer instance %d...", d.Id) var err error @@ -479,12 +475,19 @@ func (d *Driver) Remove() error { return nil } -func (d *Driver) Restart() error { - return d.getClient().VirtualGuest().Reboot(d.Id) -} + func (d *Driver) Start() error { return d.getClient().VirtualGuest().PowerOn(d.Id) } + func (d *Driver) Stop() error { return d.getClient().VirtualGuest().PowerOff(d.Id) } + +func (d *Driver) Restart() error { + return d.getClient().VirtualGuest().Reboot(d.Id) +} + +func (d *Driver) Kill() error { + return d.Stop() +} diff --git a/drivers/virtualbox/virtualbox.go b/drivers/virtualbox/virtualbox.go index 695d54a9bf..a2d2a035b5 100644 --- a/drivers/virtualbox/virtualbox.go +++ b/drivers/virtualbox/virtualbox.go @@ -479,7 +479,6 @@ func (d *Driver) Start() error { if err := d.vbm("startvm", d.MachineName, "--type", "headless"); err != nil { return err } - log.Infof("Starting VM...") case state.Paused: if err := d.vbm("controlvm", d.MachineName, "resume", "--type", "headless"); err != nil { return err @@ -502,23 +501,6 @@ func (d *Driver) Start() error { 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 - } - - // Bail if we don't get an IP from DHCP after a given number of seconds. - if err := mcnutils.WaitForSpecific(d.hostOnlyIPAvailable, 5, 4*time.Second); err != nil { - return err - } - - var err error - d.IPAddress, err = d.GetIP() - - return err -} - func (d *Driver) Stop() error { currentState, err := d.GetState() if err != nil { @@ -546,13 +528,44 @@ func (d *Driver) Stop() error { break } } - log.Infof("Stopping VM...") d.IPAddress = "" return nil } +// Restart restarts a machine which is known to be running. +func (d *Driver) Restart() error { + if err := d.vbm("controlvm", d.MachineName, "reset"); err != nil { + return err + } + + d.IPAddress = "" + + return d.waitForIP() +} + +func (d *Driver) Kill() error { + return d.vbm("controlvm", d.MachineName, "poweroff") +} + +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 + } + + // Bail if we don't get an IP from DHCP after a given number of seconds. + if err := mcnutils.WaitForSpecific(d.hostOnlyIPAvailable, 5, 4*time.Second); err != nil { + return err + } + + var err error + d.IPAddress, err = d.GetIP() + + return err +} + func (d *Driver) Remove() error { s, err := d.GetState() if err != nil { @@ -576,22 +589,6 @@ 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 { - log.Infof("Restarting VM...") - if err := d.vbm("controlvm", d.MachineName, "reset"); err != nil { - return err - } - - d.IPAddress = "" - - return d.waitForIP() -} - -func (d *Driver) Kill() error { - return d.vbm("controlvm", d.MachineName, "poweroff") -} - func (d *Driver) GetState() (state.State, error) { stdout, stderr, err := d.vbmOutErr("showvminfo", d.MachineName, "--machinereadable") diff --git a/drivers/vmwarefusion/fusion_darwin.go b/drivers/vmwarefusion/fusion_darwin.go index 0919d94bfd..c876a348aa 100644 --- a/drivers/vmwarefusion/fusion_darwin.go +++ b/drivers/vmwarefusion/fusion_darwin.go @@ -374,7 +374,6 @@ func (d *Driver) Create() error { } func (d *Driver) Start() error { - log.Infof("Starting %s...", d.MachineName) vmrun("start", d.vmxPath(), "nogui") // Do not execute the rest of boot2docker specific configuration, exit here @@ -406,13 +405,21 @@ func (d *Driver) Start() error { } func (d *Driver) Stop() error { - log.Infof("Gracefully shutting down %s...", d.MachineName) - vmrun("stop", d.vmxPath(), "nogui") - return nil + _, _, err := vmrun("stop", d.vmxPath(), "nogui") + return err +} + +func (d *Driver) Restart() error { + _, _, err := vmrun("reset", d.vmxPath(), "nogui") + return err +} + +func (d *Driver) Kill() error { + _, _, err := vmrun("stop", d.vmxPath(), "hard nogui") + return err } func (d *Driver) Remove() error { - s, _ := d.GetState() if s == state.Running { if err := d.Kill(); err != nil { @@ -424,18 +431,6 @@ func (d *Driver) Remove() error { return nil } -func (d *Driver) Restart() error { - log.Infof("Gracefully restarting %s...", d.MachineName) - vmrun("reset", d.vmxPath(), "nogui") - return nil -} - -func (d *Driver) Kill() error { - log.Infof("Forcibly halting %s...", d.MachineName) - vmrun("stop", d.vmxPath(), "hard nogui") - return nil -} - func (d *Driver) Upgrade() error { return fmt.Errorf("VMware Fusion does not currently support the upgrade operation") } diff --git a/drivers/vmwarevcloudair/vcloudair.go b/drivers/vmwarevcloudair/vcloudair.go index 97290d5fe9..fbef99d216 100644 --- a/drivers/vmwarevcloudair/vcloudair.go +++ b/drivers/vmwarevcloudair/vcloudair.go @@ -204,7 +204,6 @@ func (d *Driver) GetIP() (string, error) { } func (d *Driver) GetState() (state.State, error) { - p, err := govcloudair.NewClient() if err != nil { return state.Error, err @@ -238,11 +237,9 @@ func (d *Driver) GetState() (state.State, error) { return state.Stopped, nil } return state.None, nil - } func (d *Driver) Create() error { - key, err := d.createSSHKey() if err != nil { return err @@ -452,7 +449,6 @@ func (d *Driver) Remove() error { } func (d *Driver) Start() error { - p, err := govcloudair.NewClient() if err != nil { return err @@ -496,7 +492,6 @@ func (d *Driver) Start() error { } func (d *Driver) Stop() error { - p, err := govcloudair.NewClient() if err != nil { return err @@ -514,21 +509,12 @@ func (d *Driver) Stop() error { return err } - status, err := vapp.GetStatus() + task, err := vapp.Shutdown() if err != nil { return err } - - if status == "POWERED_ON" { - log.Infof("Shutting down %s...", d.MachineName) - task, err := vapp.Shutdown() - if err != nil { - return err - } - if err = task.WaitTaskCompletion(); err != nil { - return err - } - + if err = task.WaitTaskCompletion(); err != nil { + return err } if err = p.Disconnect(); err != nil { @@ -541,7 +527,6 @@ func (d *Driver) Stop() error { } func (d *Driver) Restart() error { - p, err := govcloudair.NewClient() if err != nil { return err @@ -559,33 +544,12 @@ func (d *Driver) Restart() error { return err } - status, err := vapp.GetStatus() + task, err := vapp.Reset() if err != nil { return err } - - if status == "POWERED_ON" { - // If it's powered on, restart the machine - log.Infof("Restarting %s...", d.MachineName) - task, err := vapp.Reset() - if err != nil { - return err - } - if err = task.WaitTaskCompletion(); err != nil { - return err - } - - } else { - // If it's not powered on, start it. - log.Infof("Docker host %s is powered off, powering it back on...", d.MachineName) - task, err := vapp.PowerOn() - if err != nil { - return err - } - if err = task.WaitTaskCompletion(); err != nil { - return err - } - + if err = task.WaitTaskCompletion(); err != nil { + return err } if err = p.Disconnect(); err != nil { @@ -614,21 +578,12 @@ func (d *Driver) Kill() error { return err } - status, err := vapp.GetStatus() + task, err := vapp.PowerOff() if err != nil { return err } - - if status == "POWERED_ON" { - log.Infof("Stopping %s...", d.MachineName) - task, err := vapp.PowerOff() - if err != nil { - return err - } - if err = task.WaitTaskCompletion(); err != nil { - return err - } - + if err = task.WaitTaskCompletion(); err != nil { + return err } if err = p.Disconnect(); err != nil { diff --git a/drivers/vmwarevsphere/vsphere.go b/drivers/vmwarevsphere/vsphere.go index e27ab68177..f2e646782c 100644 --- a/drivers/vmwarevsphere/vsphere.go +++ b/drivers/vmwarevsphere/vsphere.go @@ -563,7 +563,7 @@ func (d *Driver) Start() error { if err != nil { return err } - log.Infof("Powering on VM...") + task, err := vm.PowerOn(ctx) if err != nil { return err @@ -595,7 +595,7 @@ func (d *Driver) Stop() error { if err != nil { return err } - log.Infof("Powering off VM...") + if err := vm.ShutdownGuest(ctx); err != nil { return err } @@ -605,6 +605,67 @@ func (d *Driver) Stop() error { return nil } +func (d *Driver) Restart() error { + if err := d.Stop(); err != nil { + return err + } + + // Check for 120 seconds for the machine to stop + for i := 1; i <= 60; i++ { + machineState, err := d.GetState() + if err != nil { + return err + } + if machineState == state.Running { + log.Debugf("Not there yet %d/%d", i, 60) + time.Sleep(2 * time.Second) + continue + } + if machineState == state.Stopped { + break + } + } + + machineState, err := d.GetState() + // If the VM is still running after 120 seconds just kill it. + if machineState == state.Running { + if err = d.Kill(); err != nil { + return fmt.Errorf("can't stop VM: %s", err) + } + } + + return d.Start() +} + +func (d *Driver) Kill() error { + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + c, err := d.vsphereLogin(ctx) + if err != nil { + return err + } + + vm, err := d.fetchVM(c, ctx, d.MachineName) + if err != nil { + return err + } + + task, err := vm.PowerOff(ctx) + if err != nil { + return err + } + + _, err = task.WaitForResult(ctx, nil) + if err != nil { + return err + } + + d.IPAddress = "" + + return nil +} + func (d *Driver) Remove() error { machineState, err := d.GetState() if err != nil { @@ -670,66 +731,6 @@ func (d *Driver) Remove() error { return nil } -func (d *Driver) Restart() error { - if err := d.Stop(); err != nil { - return err - } - // Check for 120 seconds for the machine to stop - for i := 1; i <= 60; i++ { - machineState, err := d.GetState() - if err != nil { - return err - } - if machineState == state.Running { - log.Debugf("Not there yet %d/%d", i, 60) - time.Sleep(2 * time.Second) - continue - } - if machineState == state.Stopped { - break - } - } - - machineState, err := d.GetState() - // If the VM is still running after 120 seconds just kill it. - if machineState == state.Running { - if err = d.Kill(); err != nil { - return fmt.Errorf("can't stop VM: %s", err) - } - } - - return d.Start() -} - -func (d *Driver) Kill() error { - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - c, err := d.vsphereLogin(ctx) - if err != nil { - return err - } - - vm, err := d.fetchVM(c, ctx, d.MachineName) - if err != nil { - return err - } - log.Infof("Powering off VM forcibly...") - task, err := vm.PowerOff(ctx) - if err != nil { - return err - } - - _, err = task.WaitForResult(ctx, nil) - if err != nil { - return err - } - - d.IPAddress = "" - - return nil -} - func (d *Driver) Upgrade() error { return fmt.Errorf("upgrade is not supported for vsphere driver at this moment") } diff --git a/libmachine/host/host.go b/libmachine/host/host.go index 0156ba2871..44ee25d21b 100644 --- a/libmachine/host/host.go +++ b/libmachine/host/host.go @@ -89,6 +89,7 @@ func (h *Host) runActionForState(action func() error, desiredState state.State) } func (h *Host) Start() error { + log.Infof("Starting %q...", h.Name) if err := h.runActionForState(h.Driver.Start, state.Running); err != nil { return err } @@ -98,6 +99,7 @@ func (h *Host) Start() error { } func (h *Host) Stop() error { + log.Infof("Stopping %q...", h.Name) if err := h.runActionForState(h.Driver.Stop, state.Stopped); err != nil { return err } @@ -107,6 +109,7 @@ func (h *Host) Stop() error { } func (h *Host) Kill() error { + log.Infof("Killing %q...", h.Name) if err := h.runActionForState(h.Driver.Kill, state.Stopped); err != nil { return err } @@ -116,15 +119,18 @@ func (h *Host) Kill() error { } func (h *Host) Restart() error { + log.Infof("Restarting %q...", h.Name) if drivers.MachineInState(h.Driver, state.Stopped)() { return h.Start() } + if drivers.MachineInState(h.Driver, state.Running)() { if err := h.Driver.Restart(); err != nil { return err } return mcnutils.WaitFor(drivers.MachineInState(h.Driver, state.Running)) } + return nil }