support specifying swarm image and docker versions

Signed-off-by: Evan Hazlett <ejhazlett@gmail.com>
This commit is contained in:
Evan Hazlett
2015-06-01 16:20:56 -04:00
parent 3cd44ec4ef
commit cf0aee9fd7
10 changed files with 22 additions and 12 deletions

View File

@@ -166,6 +166,12 @@ var sharedCreateFlags = []cli.Flag{
),
Value: "none",
},
cli.StringFlag{
Name: "engine-install-url",
Usage: "Custom URL to use for engine installation",
Value: "https://get.docker.com",
EnvVar: "MACHINE_DOCKER_INSTALL_URL",
},
cli.StringSliceFlag{
Name: "engine-opt",
Usage: "Specify arbitrary flags to include with the created engine in the form flag=value",
@@ -194,6 +200,12 @@ var sharedCreateFlags = []cli.Flag{
Name: "swarm",
Usage: "Configure Machine with Swarm",
},
cli.StringFlag{
Name: "swarm-image",
Usage: "Specify Docker image to use for Swarm",
Value: "swarm:latest",
EnvVar: "MACHINE_SWARM_IMAGE",
},
cli.BoolFlag{
Name: "swarm-master",
Usage: "Configure Machine to be a Swarm master",

View File

@@ -75,9 +75,11 @@ func cmdCreate(c *cli.Context) {
RegistryMirror: c.StringSlice("engine-registry-mirror"),
StorageDriver: c.String("engine-storage-driver"),
TlsVerify: true,
InstallURL: c.String("engine-install-url"),
},
SwarmOptions: &swarm.SwarmOptions{
IsSwarm: c.Bool("swarm"),
Image: c.String("swarm-image"),
Master: c.Bool("swarm-master"),
Discovery: c.String("swarm-discovery"),
Address: c.String("swarm-addr"),

View File

@@ -15,4 +15,5 @@ type EngineOptions struct {
TlsKey string
TlsVerify bool
RegistryMirror []string
InstallURL string
}

View File

@@ -188,10 +188,6 @@ func (provisioner *Boot2DockerProvisioner) Provision(swarmOptions swarm.SwarmOpt
return err
}
if err := installDockerGeneric(provisioner); err != nil {
return err
}
ip, err := provisioner.GetDriver().GetIP()
if err != nil {
return err

View File

@@ -74,11 +74,11 @@ func configureSwarm(p Provisioner, swarmOptions swarm.SwarmOptions, authOptions
Port: port,
AuthOptions: authOptions,
SwarmOptions: swarmOptions,
SwarmImage: swarm.DockerImage,
SwarmImage: swarmOptions.Image,
}
// First things first, get the swarm image.
if _, err := p.SSHCommand(fmt.Sprintf("sudo docker pull %s", swarm.DockerImage)); err != nil {
if _, err := p.SSHCommand(fmt.Sprintf("sudo docker pull %s", swarmOptions.Image)); err != nil {
return err
}

View File

@@ -128,7 +128,7 @@ func (provisioner *DebianProvisioner) Provision(swarmOptions swarm.SwarmOptions,
}
log.Debug("installing docker")
if err := installDockerGeneric(provisioner); err != nil {
if err := installDockerGeneric(provisioner, engineOptions.InstallURL); err != nil {
return err
}

View File

@@ -113,7 +113,7 @@ func (provisioner *UbuntuProvisioner) Provision(swarmOptions swarm.SwarmOptions,
}
}
if err := installDockerGeneric(provisioner); err != nil {
if err := installDockerGeneric(provisioner, engineOptions.InstallURL); err != nil {
return err
}

View File

@@ -20,10 +20,10 @@ type DockerOptions struct {
EngineOptionsPath string
}
func installDockerGeneric(p Provisioner) error {
func installDockerGeneric(p Provisioner, baseURL string) error {
// install docker - until cloudinit we use ubuntu everywhere so we
// just install it using the docker repos
if output, err := p.SSHCommand("if ! type docker; then curl -sSL https://get.docker.com | sh -; fi"); err != nil {
if output, err := p.SSHCommand(fmt.Sprintf("if ! type docker; then curl -sSL %s | sh -; fi", baseURL)); err != nil {
return fmt.Errorf("error installing docker: %s\n", output)
}

View File

@@ -1,7 +1,6 @@
package swarm
const (
DockerImage = "swarm:latest"
DiscoveryServiceEndpoint = "https://discovery-stage.hub.docker.com/v1"
)
@@ -11,6 +10,7 @@ type SwarmOptions struct {
Discovery string
Master bool
Host string
Image string
Strategy string
Heartbeat int
Overcommit float64

View File

@@ -1 +0,0 @@
package swarm