Merge pull request #995 from exoscale/fix/dont-wait-in-drivers

Don't let drivers wait for SSH/Docker/State
This commit is contained in:
Evan Hazlett 2015-04-21 07:31:12 -07:00
commit 191564564e
8 changed files with 10 additions and 131 deletions

View File

@ -398,12 +398,6 @@ func (d *Driver) Create() error {
d.PrivateIPAddress,
)
log.Infof("Waiting for SSH on %s:%d", d.IPAddress, 22)
if err := ssh.WaitForTCP(fmt.Sprintf("%s:%d", d.IPAddress, 22)); err != nil {
return err
}
log.Debug("Settings tags for instance")
tags := map[string]string{
"Name": d.MachineName,

View File

@ -3,12 +3,10 @@ package azure
import (
"errors"
"fmt"
"net"
"os"
"os/exec"
"path/filepath"
"strings"
"time"
azure "github.com/MSOpenTech/azure-sdk-for-go"
"github.com/MSOpenTech/azure-sdk-for-go/clients/vmClient"
@ -257,9 +255,7 @@ func (d *Driver) Create() error {
return err
}
log.Info("Waiting for SSH...")
log.Debugf("Host: %s SSH Port: %d", d.getHostname(), d.SSHPort)
return ssh.WaitForTCP(fmt.Sprintf("%s:%d", d.getHostname(), d.SSHPort))
return nil
}
func (d *Driver) GetURL() (string, error) {
@ -315,10 +311,8 @@ func (d *Driver) Start() error {
if err := vmClient.StartRole(d.MachineName, d.MachineName, d.MachineName); err != nil {
return err
}
if err := d.waitForSSH(); err != nil {
return err
}
return d.waitForDocker()
return nil
}
func (d *Driver) Stop() error {
@ -369,10 +363,8 @@ func (d *Driver) Restart() error {
if err := vmClient.RestartRole(d.MachineName, d.MachineName, d.MachineName); err != nil {
return err
}
if err := d.waitForSSH(); err != nil {
return err
}
return d.waitForDocker()
return nil
}
func (d *Driver) Kill() error {
@ -424,40 +416,6 @@ func (d *Driver) addDockerEndpoint(vmConfig *vmClient.Role) error {
return nil
}
func (d *Driver) waitForSSH() error {
log.Infof("Waiting for SSH...")
return ssh.WaitForTCP(fmt.Sprintf("%s:%v", d.getHostname(), d.SSHPort))
}
func (d *Driver) waitForDocker() error {
log.Infof("Waiting for docker daemon on host to be available...")
maxRepeats := 48
url := fmt.Sprintf("%s:%v", d.getHostname(), d.DockerPort)
success := waitForDockerEndpoint(url, maxRepeats)
if !success {
return errors.New("Can not run docker daemon on remote machine. Please try again.")
}
return nil
}
func waitForDockerEndpoint(url string, maxRepeats int) bool {
counter := 0
for {
conn, err := net.Dial("tcp", url)
if err != nil {
time.Sleep(10 * time.Second)
counter++
if counter == maxRepeats {
return false
}
continue
}
defer conn.Close()
break
}
return true
}
func (d *Driver) generateCertForAzure() error {
if err := ssh.GenerateSSHKey(d.sshKeyPath()); err != nil {
return err

View File

@ -194,13 +194,6 @@ func (c *ComputeUtil) createInstance(d *Driver) error {
return err
}
instance, err = c.instance()
if err != nil {
return err
}
ip := instance.NetworkInterfaces[0].AccessConfigs[0].NatIP
c.waitForSSH(ip)
// Update the SSH Key
sshKey, err := ioutil.ReadFile(d.GetSSHKeyPath() + ".pub")
if err != nil {
@ -280,12 +273,6 @@ func (c *ComputeUtil) waitForGlobalOp(name string) error {
})
}
// waitForSSH waits for SSH to become ready on the instance.
func (c *ComputeUtil) waitForSSH(ip string) error {
log.Infof("Waiting for SSH...")
return ssh.WaitForTCP(fmt.Sprintf("%s:22", ip))
}
// ip retrieves and returns the external IP address of the instance.
func (c *ComputeUtil) ip() (string, error) {
if c.ipAddress == "" {

View File

@ -323,12 +323,7 @@ func (d *Driver) wait() error {
}
time.Sleep(1 * time.Second)
}
log.Infof("Got IP, waiting for SSH")
ip, err := d.GetIP()
if err != nil {
return err
}
return ssh.WaitForTCP(fmt.Sprintf("%s:22", ip))
return nil
}
func (d *Driver) Start() error {

View File

@ -369,9 +369,6 @@ func (d *Driver) Create() error {
if err := d.lookForIpAddress(); err != nil {
return err
}
if err := d.waitForSSHServer(); err != nil {
return err
}
return nil
}
@ -383,7 +380,7 @@ func (d *Driver) Start() error {
if err := d.client.StartInstance(d); err != nil {
return err
}
return d.waitForInstanceToStart()
return nil
}
func (d *Driver) Stop() error {
@ -395,10 +392,6 @@ func (d *Driver) Stop() error {
return err
}
log.WithField("MachineId", d.MachineId).Info("Waiting for the OpenStack instance to stop...")
if err := d.client.WaitForInstanceStatus(d, "SHUTOFF", 200); err != nil {
return err
}
return nil
}
@ -426,7 +419,7 @@ func (d *Driver) Restart() error {
if err := d.client.RestartInstance(d); err != nil {
return err
}
return d.waitForInstanceToStart()
return nil
}
func (d *Driver) Kill() error {
@ -695,25 +688,6 @@ func (d *Driver) lookForIpAddress() error {
return nil
}
func (d *Driver) waitForSSHServer() error {
ip, err := d.GetIP()
if err != nil {
return err
}
log.WithFields(log.Fields{
"MachineId": d.MachineId,
"IP": ip,
}).Debug("Waiting for the SSH server to be started...")
return ssh.WaitForTCP(fmt.Sprintf("%s:%d", ip, d.SSHPort))
}
func (d *Driver) waitForInstanceToStart() error {
if err := d.waitForInstanceActive(); err != nil {
return err
}
return d.waitForSSHServer()
}
func (d *Driver) publicSSHKeyPath() string {
return d.GetSSHKeyPath() + ".pub"
}

View File

@ -399,17 +399,6 @@ func (d *Driver) Create() error {
d.getIp()
d.waitForStart()
d.waitForSetupTransactions()
ssh.WaitForTCP(d.IPAddress + ":22")
cmd, err := drivers.GetSSHCommandFromDriver(d, "sudo apt-get update && DEBIAN_FRONTEND=noninteractive sudo apt-get install -yq curl")
if err != nil {
return err
}
if err := cmd.Run(); err != nil {
return err
}
return nil
}

View File

@ -343,7 +343,7 @@ func (d *Driver) Start() error {
if err := vbm("startvm", d.MachineName, "--type", "headless"); err != nil {
return err
}
log.Infof("Waiting for VM to start...")
log.Infof("Starting VM...")
case state.Paused:
if err := vbm("controlvm", d.MachineName, "resume", "--type", "headless"); err != nil {
return err
@ -353,7 +353,7 @@ func (d *Driver) Start() error {
log.Infof("VM not in restartable state")
}
return ssh.WaitForTCP(fmt.Sprintf("localhost:%d", d.SSHPort))
return nil
}
func (d *Driver) Stop() error {

View File

@ -409,24 +409,6 @@ func (d *Driver) Create() error {
return err
}
log.Infof("Waiting for SSH...")
if err := ssh.WaitForTCP(fmt.Sprintf("%s:%d", d.PublicIP, d.SSHPort)); err != nil {
return err
}
connTest := "ping -c 3 www.google.com >/dev/null 2>&1 && ( echo \"Connectivity and DNS tests passed.\" ) || ( echo \"Connectivity and DNS tests failed, trying to add Nameserver to resolv.conf\"; echo \"nameserver 8.8.8.8\" >> /etc/resolv.conf )"
log.Debugf("Connectivity and DNS sanity test...")
cmd, err := drivers.GetSSHCommandFromDriver(d, connTest)
if err != nil {
return err
}
if err := cmd.Run(); err != nil {
return err
}
log.Debugf("Disconnecting from vCloud Air...")
if err = p.Disconnect(); err != nil {