diff --git a/drivers/amazonec2/amazonec2.go b/drivers/amazonec2/amazonec2.go index 6eba9f2487..871c3c88d8 100644 --- a/drivers/amazonec2/amazonec2.go +++ b/drivers/amazonec2/amazonec2.go @@ -308,18 +308,6 @@ func (d *Driver) Create() error { return err } - log.Debugf("Installing Docker") - - cmd, err = d.GetSSHCommand("if [ ! -e /usr/bin/docker ]; then curl -sL https://get.docker.com | sh -; fi") - if err != nil { - return err - - } - if err := cmd.Run(); err != nil { - return err - - } - return nil } diff --git a/drivers/azure/azure.go b/drivers/azure/azure.go index 68151f97a5..fc22bfef04 100644 --- a/drivers/azure/azure.go +++ b/drivers/azure/azure.go @@ -226,14 +226,6 @@ func (driver *Driver) Create() error { return err } - cmd, err := driver.GetSSHCommand("if [ ! -e /usr/bin/docker ]; then curl -sL https://get.docker.com | sh -; fi") - if err != nil { - return err - } - if err := cmd.Run(); err != nil { - return err - } - return nil } diff --git a/drivers/digitalocean/digitalocean.go b/drivers/digitalocean/digitalocean.go index bdfb0bc6be..0cac929515 100644 --- a/drivers/digitalocean/digitalocean.go +++ b/drivers/digitalocean/digitalocean.go @@ -178,18 +178,6 @@ func (d *Driver) Create() error { return err } - log.Debugf("Installing Docker") - - cmd, err = d.GetSSHCommand("if [ ! -e /usr/bin/docker ]; then curl -sL https://get.docker.com | sh -; fi") - if err != nil { - return err - - } - if err := cmd.Run(); err != nil { - return err - - } - return nil } @@ -335,7 +323,8 @@ func (d *Driver) Upgrade() error { } func (d *Driver) GetSSHCommand(args ...string) (*exec.Cmd, error) { - return ssh.GetSSHCommand(d.IPAddress, 22, "root", d.sshKeyPath(), args...), nil + cmd := ssh.GetSSHCommand(d.IPAddress, 22, "root", d.sshKeyPath(), args...) + return cmd, nil } func (d *Driver) getClient() *godo.Client { diff --git a/drivers/google/compute_util.go b/drivers/google/compute_util.go index d9f5f7092f..5aa011df74 100644 --- a/drivers/google/compute_util.go +++ b/drivers/google/compute_util.go @@ -237,18 +237,6 @@ func (c *ComputeUtil) createInstance(d *Driver) error { return err } - log.Debugf("Installing Docker") - - cmd, err = d.GetSSHCommand("if [ ! -e /usr/bin/docker ]; then curl -sL https://get.docker.com | sudo sh -; fi") - if err != nil { - return err - - } - if err := cmd.Run(); err != nil { - return err - - } - return nil } diff --git a/drivers/openstack/openstack.go b/drivers/openstack/openstack.go index caa2baac3c..5e794b05b8 100644 --- a/drivers/openstack/openstack.go +++ b/drivers/openstack/openstack.go @@ -5,7 +5,6 @@ import ( "io/ioutil" "os/exec" "path" - "strconv" "strings" "time" @@ -22,36 +21,35 @@ const ( ) type Driver struct { - AuthUrl string - Username string - Password string - TenantName string - TenantId string - Region string - EndpointType string - MachineName string - MachineId string - FlavorName string - FlavorId string - ImageName string - ImageId string - KeyPairName string - NetworkName string - NetworkId string - SecurityGroups []string - FloatingIpPool string - FloatingIpPoolId string - SSHUser string - SSHPort int - Ip string - EnableDockerInstall bool - CaCertPath string - PrivateKeyPath string - storePath string - SwarmMaster bool - SwarmHost string - SwarmDiscovery string - client Client + AuthUrl string + Username string + Password string + TenantName string + TenantId string + Region string + EndpointType string + MachineName string + MachineId string + FlavorName string + FlavorId string + ImageName string + ImageId string + KeyPairName string + NetworkName string + NetworkId string + SecurityGroups []string + FloatingIpPool string + FloatingIpPoolId string + SSHUser string + SSHPort int + Ip string + CaCertPath string + PrivateKeyPath string + storePath string + SwarmMaster bool + SwarmHost string + SwarmDiscovery string + client Client } type CreateFlags struct { @@ -175,13 +173,6 @@ func GetCreateFlags() []cli.Flag { Usage: "OpenStack SSH port", Value: 22, }, - // Using a StringFlag rather than a BoolFlag because - // the BoolFlag default value is always false - cli.StringFlag{ - Name: "openstack-docker-install", - Usage: "Openstack should install docker on the machine", - Value: "true", - }, } } @@ -234,11 +225,6 @@ func (d *Driver) SetConfigFromFlags(flags drivers.DriverOptions) error { d.SwarmHost = flags.String("swarm-host") d.SwarmDiscovery = flags.String("swarm-discovery") - installDocker, err := strconv.ParseBool(flags.String("openstack-docker-install")) - if err != nil { - return err - } - d.EnableDockerInstall = installDocker return d.checkConfig() } @@ -348,11 +334,6 @@ func (d *Driver) Create() error { if err := d.waitForSSHServer(); err != nil { return err } - if d.EnableDockerInstall { - if err := d.installDocker(); err != nil { - return err - } - } return nil } @@ -757,29 +738,6 @@ func (d *Driver) waitForInstanceToStart() error { return d.waitForSSHServer() } -func (d *Driver) installDocker() error { - log.WithField("MachineId", d.MachineId).Debug("Installing docker daemon on the machine") - - if err := d.sshExec([]string{ - `apt-get install -y curl`, - `curl -sSL https://get.docker.com | sh`, - }); err != nil { - log.Error("The docker installation failed.") - log.Error( - "The driver assumes that your instance is running Ubuntu. If this is not the case, you should ", - "use the option --openstack-docker-install=false (or --{provider}-docker-install=false) when ", - "creating a machine, and then install and configure docker manually.", - ) - log.Error( - `Also, you can use "machine ssh" to manually configure docker on this host.`, - ) - - // Don't return this ssh error so that host creation succeeds and "machine ssh" and "machine rm" - // are usable. - } - return nil -} - func (d *Driver) sshExec(commands []string) error { for _, command := range commands { sshCmd, err := d.GetSSHCommand(command) diff --git a/drivers/rackspace/rackspace.go b/drivers/rackspace/rackspace.go index e8882097bb..3d7e87f70f 100644 --- a/drivers/rackspace/rackspace.go +++ b/drivers/rackspace/rackspace.go @@ -149,7 +149,6 @@ func (d *Driver) SetConfigFromFlags(flags drivers.DriverOptions) error { d.FlavorId = flags.String("rackspace-flavor-id") d.SSHUser = flags.String("rackspace-ssh-user") d.SSHPort = flags.Int("rackspace-ssh-port") - d.EnableDockerInstall = flags.String("rackspace-docker-install") == "true" d.SwarmMaster = flags.Bool("swarm-master") d.SwarmHost = flags.String("swarm-host") d.SwarmDiscovery = flags.String("swarm-discovery") diff --git a/drivers/softlayer/driver.go b/drivers/softlayer/driver.go index f6c96b15af..a4bbe7de22 100644 --- a/drivers/softlayer/driver.go +++ b/drivers/softlayer/driver.go @@ -17,9 +17,8 @@ import ( ) const ( - dockerConfigDir = "/etc/docker" - ApiEndpoint = "https://api.softlayer.com/rest/v3" - DockerInstallUrl = "https://get.docker.com" + dockerConfigDir = "/etc/docker" + ApiEndpoint = "https://api.softlayer.com/rest/v3" ) type Driver struct { @@ -45,7 +44,6 @@ type deviceConfig struct { Memory int Image string HourlyBilling bool - InstallScript string LocalDisk bool PrivateNet bool } @@ -142,12 +140,6 @@ func GetCreateFlags() []cli.Flag { Usage: "OS image for machine", Value: "UBUNTU_LATEST", }, - cli.StringFlag{ - EnvVar: "SOFTLAYER_INSTALL_SCRIPT", - Name: "softlayer-install-script", - Usage: "Install script to call after the machine is initialized (should install Docker)", - Value: DockerInstallUrl, - }, } } @@ -210,7 +202,6 @@ func (d *Driver) SetConfigFromFlags(flags drivers.DriverOptions) error { PrivateNet: flags.Bool("softlayer-private-net-only"), LocalDisk: flags.Bool("softlayer-local-disk"), HourlyBilling: flags.Bool("softlayer-hourly-billing"), - InstallScript: flags.String("softlayer-install-script"), Image: "UBUNTU_LATEST", Region: flags.String("softlayer-region"), } @@ -372,7 +363,6 @@ func (d *Driver) buildHostSpec() *HostSpec { Cpu: d.deviceConfig.Cpu, Memory: d.deviceConfig.Memory, Datacenter: Datacenter{Name: d.deviceConfig.Region}, - InstallScript: d.deviceConfig.InstallScript, Os: d.deviceConfig.Image, HourlyBilling: d.deviceConfig.HourlyBilling, PrivateNetOnly: d.deviceConfig.PrivateNet, diff --git a/drivers/vmwarevcloudair/vcloudair.go b/drivers/vmwarevcloudair/vcloudair.go index d1af1e4c6f..b613b5318c 100644 --- a/drivers/vmwarevcloudair/vcloudair.go +++ b/drivers/vmwarevcloudair/vcloudair.go @@ -423,22 +423,6 @@ func (d *Driver) Create() error { return err } - if d.Provision { - dockerInstall := "curl -sSL https://get.docker.com | sudo sh" - - log.Infof("Installing Docker...") - - cmd, err = d.GetSSHCommand(dockerInstall) - 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 { diff --git a/host.go b/host.go index 2b9ca0666b..298792fa66 100644 --- a/host.go +++ b/host.go @@ -1,6 +1,7 @@ package main import ( + "bytes" "encoding/json" "errors" "fmt" @@ -360,10 +361,17 @@ func (h *Host) Create(name string) error { return err } + // create the instance if err := h.Driver.Create(); err != nil { return err } + // install docker + if err := h.Provision(); err != nil { + return err + } + + // save to store if err := h.SaveConfig(); err != nil { return err } @@ -371,6 +379,33 @@ func (h *Host) Create(name string) error { return nil } +func (h *Host) Provision() error { + // "local" providers use b2d; no provisioning necessary + switch h.Driver.DriverName() { + case "none", "virtualbox", "vmwarefusion", "vmwarevsphere", "openstack": + return nil + } + + // install docker - until cloudinit we use ubuntu everywhere so we + // just install it using the docker repos + cmd, err := h.Driver.GetSSHCommand("if [ ! -e /usr/bin/docker ]; then curl -sSL https://get.docker.com | sh -; fi") + if err != nil { + return err + } + + // HACK: the script above will output debug to stderr; we save it and + // then check if the command returned an error; if so, we show the debug + + var buf bytes.Buffer + cmd.Stderr = &buf + + if err := cmd.Run(); err != nil { + return fmt.Errorf("error installing docker: %s\n%s\n", err, string(buf.Bytes())) + } + + return nil +} + func (h *Host) Start() error { return h.Driver.Start() }