From 8eb22b411bf8e7c363eac5f1253a27cd340e6256 Mon Sep 17 00:00:00 2001 From: Jean-Laurent de Morlhon Date: Thu, 28 Jan 2016 12:30:48 +0100 Subject: [PATCH] Fix #2029 - local drivers dont run with engine-install-url Signed-off-by: Jean-Laurent de Morlhon --- commands/create.go | 2 +- drivers/hyperv/hyperv.go | 5 +++++ drivers/virtualbox/virtualbox.go | 3 +++ drivers/vmwarefusion/fusion_darwin.go | 5 +++++ drivers/vmwarevsphere/vsphere.go | 5 +++++ libmachine/drivers/base.go | 10 +++++++-- libmachine/drivers/base_test.go | 22 +++++++++++++++++++ libmachine/libmachine.go | 2 +- .../{bad-create-iso.bats => guards.bats} | 9 +++++--- 9 files changed, 56 insertions(+), 7 deletions(-) rename test/integration/virtualbox/{bad-create-iso.bats => guards.bats} (50%) diff --git a/commands/create.go b/commands/create.go index 0e55b26889..f6c26ded5a 100644 --- a/commands/create.go +++ b/commands/create.go @@ -45,7 +45,7 @@ var ( cli.StringFlag{ Name: "engine-install-url", Usage: "Custom URL to use for engine installation", - Value: "https://get.docker.com", + Value: drivers.DefaultEngineInstallURL, EnvVar: "MACHINE_DOCKER_INSTALL_URL", }, cli.StringSliceFlag{ diff --git a/drivers/hyperv/hyperv.go b/drivers/hyperv/hyperv.go index d91baa199d..614d542d11 100644 --- a/drivers/hyperv/hyperv.go +++ b/drivers/hyperv/hyperv.go @@ -6,6 +6,8 @@ import ( "os" "time" + "errors" + "github.com/docker/machine/libmachine/drivers" "github.com/docker/machine/libmachine/log" "github.com/docker/machine/libmachine/mcnflag" @@ -78,6 +80,9 @@ func (d *Driver) GetCreateFlags() []mcnflag.Flag { } func (d *Driver) SetConfigFromFlags(flags drivers.DriverOptions) error { + if drivers.EngineInstallURLFlagSet(flags) { + return errors.New("--engine-install-url cannot be used with the hyperv driver, use --hyperv-boot2docker-url instead") + } d.Boot2DockerURL = flags.String("hyperv-boot2docker-url") d.VSwitch = flags.String("hyperv-virtual-switch") d.DiskSize = flags.Int("hyperv-disk-size") diff --git a/drivers/virtualbox/virtualbox.go b/drivers/virtualbox/virtualbox.go index da723c2c14..a9d23e57bc 100644 --- a/drivers/virtualbox/virtualbox.go +++ b/drivers/virtualbox/virtualbox.go @@ -190,6 +190,9 @@ func (d *Driver) GetURL() (string, error) { } func (d *Driver) SetConfigFromFlags(flags drivers.DriverOptions) error { + if drivers.EngineInstallURLFlagSet(flags) { + return errors.New("--engine-install-url cannot be used with the virtualbox driver, use --virtualbox-boot2docker-url instead") + } d.CPU = flags.Int("virtualbox-cpu-count") d.Memory = flags.Int("virtualbox-memory") d.DiskSize = flags.Int("virtualbox-disk-size") diff --git a/drivers/vmwarefusion/fusion_darwin.go b/drivers/vmwarefusion/fusion_darwin.go index 7c96d4fe81..b8526c1c38 100644 --- a/drivers/vmwarefusion/fusion_darwin.go +++ b/drivers/vmwarefusion/fusion_darwin.go @@ -18,6 +18,8 @@ import ( "text/template" "time" + "errors" + "github.com/docker/machine/libmachine/drivers" "github.com/docker/machine/libmachine/log" "github.com/docker/machine/libmachine/mcnflag" @@ -144,6 +146,9 @@ func (d *Driver) DriverName() string { } func (d *Driver) SetConfigFromFlags(flags drivers.DriverOptions) error { + if drivers.EngineInstallURLFlagSet(flags) { + return errors.New("--engine-install-url cannot be used with the vmwarefusion driver, use --vmwarefusion-boot2docker-url instead") + } d.Memory = flags.Int("vmwarefusion-memory-size") d.CPU = flags.Int("vmwarefusion-cpu-count") d.DiskSize = flags.Int("vmwarefusion-disk-size") diff --git a/drivers/vmwarevsphere/vsphere.go b/drivers/vmwarevsphere/vsphere.go index 5f0178f3e4..ef419261e0 100644 --- a/drivers/vmwarevsphere/vsphere.go +++ b/drivers/vmwarevsphere/vsphere.go @@ -21,6 +21,8 @@ import ( "github.com/docker/machine/libmachine/ssh" "github.com/docker/machine/libmachine/state" + "errors" + "github.com/vmware/govmomi" "github.com/vmware/govmomi/find" "github.com/vmware/govmomi/guest" @@ -177,6 +179,9 @@ func (d *Driver) DriverName() string { } func (d *Driver) SetConfigFromFlags(flags drivers.DriverOptions) error { + if drivers.EngineInstallURLFlagSet(flags) { + return errors.New("--engine-install-url cannot be used with the vmwarevsphere driver, use --vmwarevsphere-boot2docker-url instead") + } d.SSHUser = "docker" d.SSHPort = 22 d.CPU = flags.Int("vmwarevsphere-cpu-count") diff --git a/libmachine/drivers/base.go b/libmachine/drivers/base.go index a45a63b10a..040ea2a305 100644 --- a/libmachine/drivers/base.go +++ b/libmachine/drivers/base.go @@ -6,8 +6,9 @@ import ( ) const ( - DefaultSSHUser = "root" - DefaultSSHPort = 22 + DefaultSSHUser = "root" + DefaultSSHPort = 22 + DefaultEngineInstallURL = "https://get.docker.com" ) // BaseDriver - Embed this struct into drivers to provide the common set @@ -83,3 +84,8 @@ func (d *BaseDriver) SetSwarmConfigFromFlags(flags DriverOptions) { d.SwarmHost = flags.String("swarm-host") d.SwarmDiscovery = flags.String("swarm-discovery") } + +func EngineInstallURLFlagSet(flags DriverOptions) bool { + engineInstallURLFlag := flags.String("engine-install-url") + return engineInstallURLFlag != DefaultEngineInstallURL && engineInstallURLFlag != "" +} diff --git a/libmachine/drivers/base_test.go b/libmachine/drivers/base_test.go index 0378c7f0a2..0b824aaf7a 100644 --- a/libmachine/drivers/base_test.go +++ b/libmachine/drivers/base_test.go @@ -4,6 +4,7 @@ import ( "errors" "testing" + "github.com/docker/machine/libmachine/mcnflag" "github.com/stretchr/testify/assert" ) @@ -26,3 +27,24 @@ func TestIP(t *testing.T) { assert.Equal(t, c.expectedErr, err) } } + +func TestEngineInstallUrlFlagEmpty(t *testing.T) { + assert.False(t, EngineInstallURLFlagSet(&CheckDriverOptions{})) +} + +func createDriverOptionWithEngineInstall(url string) *CheckDriverOptions { + return &CheckDriverOptions{ + FlagsValues: map[string]interface{}{"engine-install-url": url}, + CreateFlags: []mcnflag.Flag{mcnflag.StringFlag{Name: "engine-install-url", Value: ""}}, + } +} + +func TestEngineInstallUrlFlagDefault(t *testing.T) { + options := createDriverOptionWithEngineInstall(DefaultEngineInstallURL) + assert.False(t, EngineInstallURLFlagSet(options)) +} + +func TestEngineInstallUrlFlagSet(t *testing.T) { + options := createDriverOptionWithEngineInstall("https://test.docker.com") + assert.True(t, EngineInstallURLFlagSet(options)) +} diff --git a/libmachine/libmachine.go b/libmachine/libmachine.go index 83306743e2..89c65b24cc 100644 --- a/libmachine/libmachine.go +++ b/libmachine/libmachine.go @@ -75,7 +75,7 @@ func (api *Client) NewHost(driverName string, rawDriver []byte) (*host.Host, err ServerKeyPath: filepath.Join(api.GetMachinesDir(), "server-key.pem"), }, EngineOptions: &engine.Options{ - InstallURL: "https://get.docker.com", + InstallURL: drivers.DefaultEngineInstallURL, StorageDriver: "aufs", TLSVerify: true, }, diff --git a/test/integration/virtualbox/bad-create-iso.bats b/test/integration/virtualbox/guards.bats similarity index 50% rename from test/integration/virtualbox/bad-create-iso.bats rename to test/integration/virtualbox/guards.bats index 4abeacbeb8..e10d8588aa 100644 --- a/test/integration/virtualbox/bad-create-iso.bats +++ b/test/integration/virtualbox/guards.bats @@ -6,9 +6,12 @@ only_if_env DRIVER virtualbox use_disposable_machine -export BAD_URL="http://dev.null:9111/bad.iso" - @test "$DRIVER: Should not allow machine creation with bad ISO" { - run machine create -d virtualbox --virtualbox-boot2docker-url $BAD_URL $NAME + run machine create -d virtualbox --virtualbox-boot2docker-url http://dev.null:9111/bad.iso $NAME [[ ${status} -eq 1 ]] } + +@test "$DRIVER: Should not allow machine creation with engine-install-url" { + run machine create --engine-install-url https://test.docker.com -d virtualbox $NAME + [[ ${output} == *"--engine-install-url cannot be used"* ]] +} \ No newline at end of file