Logs for Restart

Signed-off-by: David Gageot <david@gageot.net>
This commit is contained in:
David Gageot 2015-12-30 11:57:37 +01:00
parent 783d2b124e
commit e9aa75f021
13 changed files with 138 additions and 196 deletions

View File

@ -625,6 +625,13 @@ func (d *Driver) Stop() error {
return err
}
func (d *Driver) Restart() error {
_, err := d.getClient().RebootInstances(&ec2.RebootInstancesInput{
InstanceIds: []*string{&d.InstanceId},
})
return err
}
func (d *Driver) Remove() error {
if err := d.terminate(); err != nil {
return fmt.Errorf("unable to terminate instance: %s", err)
@ -638,13 +645,6 @@ func (d *Driver) Remove() error {
return nil
}
func (d *Driver) Restart() error {
_, err := d.getClient().RebootInstances(&ec2.RebootInstancesInput{
InstanceIds: []*string{&d.InstanceId},
})
return err
}
func (d *Driver) Kill() error {
_, err := d.getClient().StopInstances(&ec2.StopInstancesInput{
InstanceIds: []*string{&d.InstanceId},

View File

@ -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"
)
@ -310,42 +309,35 @@ func (d *Driver) Stop() error {
return nil
}
func (d *Driver) Restart() error {
err := d.setUserSubscription()
if 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) 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
@ -368,11 +360,6 @@ func (d *Driver) Kill() error {
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)

View File

@ -290,6 +290,11 @@ func (d *Driver) Stop() error {
return err
}
func (d *Driver) Restart() error {
_, _, err := d.getClient().DropletActions.Reboot(d.DropletID)
return err
}
func (d *Driver) Remove() error {
client := d.getClient()
if resp, err := client.Keys.DeleteByID(d.SSHKeyID); err != nil {
@ -309,11 +314,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

View File

@ -343,6 +343,17 @@ func (d *Driver) Stop() error {
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 d.waitForJob(client, svmresp)
}
func (d *Driver) Remove() error {
client := egoscale.NewClient(d.URL, d.APIKey, d.APISecretKey)
@ -362,27 +373,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()
}

View File

@ -159,16 +159,15 @@ 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
}
func (d *Driver) Remove() error {
return nil
}
func (d *Driver) Kill() error {
return errors.New("generic driver does not support kill")
}

View File

@ -318,6 +318,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()
@ -341,12 +350,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()
}

View File

@ -400,6 +400,14 @@ func (d *Driver) Stop() error {
return d.client.StopInstance(d)
}
func (d *Driver) Restart() error {
if err := d.initCompute(); err != nil {
return err
}
return d.client.RestartInstance(d)
}
func (d *Driver) Remove() error {
log.Debug("deleting instance...", map[string]string{"MachineId": d.MachineId})
log.Info("Deleting OpenStack instance...")
@ -417,17 +425,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()
}

View File

@ -482,10 +482,6 @@ 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)
}
@ -493,3 +489,7 @@ func (d *Driver) Start() error {
func (d *Driver) Stop() error {
return d.getClient().VirtualGuest().PowerOff(d.Id)
}
func (d *Driver) Restart() error {
return d.getClient().VirtualGuest().Reboot(d.Id)
}

View File

@ -503,23 +503,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 {
@ -553,6 +536,34 @@ 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.vbm("controlvm", d.MachineName, "reset"); err != nil {
return err
}
d.IPAddress = ""
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) Remove() error {
s, err := d.GetState()
if err != nil {
@ -576,18 +587,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")
}

View File

@ -411,6 +411,11 @@ func (d *Driver) Stop() error {
return err
}
func (d *Driver) Restart() error {
_, _, err := vmrun("reset", d.vmxPath(), "nogui")
return err
}
func (d *Driver) Remove() error {
s, _ := d.GetState()
if s == state.Running {
@ -423,12 +428,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")

View File

@ -206,7 +206,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
@ -240,11 +239,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
@ -514,21 +511,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 {
@ -558,33 +546,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 {

View File

@ -607,6 +607,38 @@ 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) Remove() error {
machineState, err := d.GetState()
if err != nil {
@ -672,37 +704,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()

View File

@ -123,15 +123,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
}