do not show debug for docker install by default; refactor install out of drivers

Signed-off-by: Evan Hazlett <ejhazlett@gmail.com>
This commit is contained in:
Evan Hazlett 2015-02-23 14:49:28 -05:00
parent b5ca626957
commit 54f36078f4
9 changed files with 68 additions and 145 deletions

View File

@ -308,18 +308,6 @@ func (d *Driver) Create() error {
return err 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 return nil
} }

View File

@ -226,14 +226,6 @@ func (driver *Driver) Create() error {
return err 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 return nil
} }

View File

@ -178,18 +178,6 @@ func (d *Driver) Create() error {
return err 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 return nil
} }
@ -335,7 +323,8 @@ func (d *Driver) Upgrade() error {
} }
func (d *Driver) GetSSHCommand(args ...string) (*exec.Cmd, 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 { func (d *Driver) getClient() *godo.Client {

View File

@ -237,18 +237,6 @@ func (c *ComputeUtil) createInstance(d *Driver) error {
return err 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 return nil
} }

View File

@ -5,7 +5,6 @@ import (
"io/ioutil" "io/ioutil"
"os/exec" "os/exec"
"path" "path"
"strconv"
"strings" "strings"
"time" "time"
@ -22,36 +21,35 @@ const (
) )
type Driver struct { type Driver struct {
AuthUrl string AuthUrl string
Username string Username string
Password string Password string
TenantName string TenantName string
TenantId string TenantId string
Region string Region string
EndpointType string EndpointType string
MachineName string MachineName string
MachineId string MachineId string
FlavorName string FlavorName string
FlavorId string FlavorId string
ImageName string ImageName string
ImageId string ImageId string
KeyPairName string KeyPairName string
NetworkName string NetworkName string
NetworkId string NetworkId string
SecurityGroups []string SecurityGroups []string
FloatingIpPool string FloatingIpPool string
FloatingIpPoolId string FloatingIpPoolId string
SSHUser string SSHUser string
SSHPort int SSHPort int
Ip string Ip string
EnableDockerInstall bool CaCertPath string
CaCertPath string PrivateKeyPath string
PrivateKeyPath string storePath string
storePath string SwarmMaster bool
SwarmMaster bool SwarmHost string
SwarmHost string SwarmDiscovery string
SwarmDiscovery string client Client
client Client
} }
type CreateFlags struct { type CreateFlags struct {
@ -175,13 +173,6 @@ func GetCreateFlags() []cli.Flag {
Usage: "OpenStack SSH port", Usage: "OpenStack SSH port",
Value: 22, 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.SwarmHost = flags.String("swarm-host")
d.SwarmDiscovery = flags.String("swarm-discovery") 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() return d.checkConfig()
} }
@ -348,11 +334,6 @@ func (d *Driver) Create() error {
if err := d.waitForSSHServer(); err != nil { if err := d.waitForSSHServer(); err != nil {
return err return err
} }
if d.EnableDockerInstall {
if err := d.installDocker(); err != nil {
return err
}
}
return nil return nil
} }
@ -757,29 +738,6 @@ func (d *Driver) waitForInstanceToStart() error {
return d.waitForSSHServer() 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 { func (d *Driver) sshExec(commands []string) error {
for _, command := range commands { for _, command := range commands {
sshCmd, err := d.GetSSHCommand(command) sshCmd, err := d.GetSSHCommand(command)

View File

@ -149,7 +149,6 @@ func (d *Driver) SetConfigFromFlags(flags drivers.DriverOptions) error {
d.FlavorId = flags.String("rackspace-flavor-id") d.FlavorId = flags.String("rackspace-flavor-id")
d.SSHUser = flags.String("rackspace-ssh-user") d.SSHUser = flags.String("rackspace-ssh-user")
d.SSHPort = flags.Int("rackspace-ssh-port") d.SSHPort = flags.Int("rackspace-ssh-port")
d.EnableDockerInstall = flags.String("rackspace-docker-install") == "true"
d.SwarmMaster = flags.Bool("swarm-master") d.SwarmMaster = flags.Bool("swarm-master")
d.SwarmHost = flags.String("swarm-host") d.SwarmHost = flags.String("swarm-host")
d.SwarmDiscovery = flags.String("swarm-discovery") d.SwarmDiscovery = flags.String("swarm-discovery")

View File

@ -17,9 +17,8 @@ import (
) )
const ( const (
dockerConfigDir = "/etc/docker" dockerConfigDir = "/etc/docker"
ApiEndpoint = "https://api.softlayer.com/rest/v3" ApiEndpoint = "https://api.softlayer.com/rest/v3"
DockerInstallUrl = "https://get.docker.com"
) )
type Driver struct { type Driver struct {
@ -45,7 +44,6 @@ type deviceConfig struct {
Memory int Memory int
Image string Image string
HourlyBilling bool HourlyBilling bool
InstallScript string
LocalDisk bool LocalDisk bool
PrivateNet bool PrivateNet bool
} }
@ -142,12 +140,6 @@ func GetCreateFlags() []cli.Flag {
Usage: "OS image for machine", Usage: "OS image for machine",
Value: "UBUNTU_LATEST", 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"), PrivateNet: flags.Bool("softlayer-private-net-only"),
LocalDisk: flags.Bool("softlayer-local-disk"), LocalDisk: flags.Bool("softlayer-local-disk"),
HourlyBilling: flags.Bool("softlayer-hourly-billing"), HourlyBilling: flags.Bool("softlayer-hourly-billing"),
InstallScript: flags.String("softlayer-install-script"),
Image: "UBUNTU_LATEST", Image: "UBUNTU_LATEST",
Region: flags.String("softlayer-region"), Region: flags.String("softlayer-region"),
} }
@ -372,7 +363,6 @@ func (d *Driver) buildHostSpec() *HostSpec {
Cpu: d.deviceConfig.Cpu, Cpu: d.deviceConfig.Cpu,
Memory: d.deviceConfig.Memory, Memory: d.deviceConfig.Memory,
Datacenter: Datacenter{Name: d.deviceConfig.Region}, Datacenter: Datacenter{Name: d.deviceConfig.Region},
InstallScript: d.deviceConfig.InstallScript,
Os: d.deviceConfig.Image, Os: d.deviceConfig.Image,
HourlyBilling: d.deviceConfig.HourlyBilling, HourlyBilling: d.deviceConfig.HourlyBilling,
PrivateNetOnly: d.deviceConfig.PrivateNet, PrivateNetOnly: d.deviceConfig.PrivateNet,

View File

@ -423,22 +423,6 @@ func (d *Driver) Create() error {
return err 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...") log.Debugf("Disconnecting from vCloud Air...")
if err = p.Disconnect(); err != nil { if err = p.Disconnect(); err != nil {

35
host.go
View File

@ -1,6 +1,7 @@
package main package main
import ( import (
"bytes"
"encoding/json" "encoding/json"
"errors" "errors"
"fmt" "fmt"
@ -360,10 +361,17 @@ func (h *Host) Create(name string) error {
return err return err
} }
// create the instance
if err := h.Driver.Create(); err != nil { if err := h.Driver.Create(); err != nil {
return err return err
} }
// install docker
if err := h.Provision(); err != nil {
return err
}
// save to store
if err := h.SaveConfig(); err != nil { if err := h.SaveConfig(); err != nil {
return err return err
} }
@ -371,6 +379,33 @@ func (h *Host) Create(name string) error {
return nil 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 { func (h *Host) Start() error {
return h.Driver.Start() return h.Driver.Start()
} }