From 63ea976b1da7e92a6a49b3486b1aa426c043421c Mon Sep 17 00:00:00 2001 From: Tiago Pires Date: Mon, 22 Feb 2016 17:27:01 +0000 Subject: [PATCH] FIX #1858 Add engine port Added flag `--generic-engine-port` to `generic` drive in order to specify other port than `2376` on Docker engine. Updated `generic` driver documentation. Signed-off-by: Tiago Pires --- docs/drivers/generic.md | 2 ++ drivers/generic/generic.go | 14 ++++++++++++-- drivers/generic/generic_test.go | 5 +++-- libmachine/provision/configure_swarm.go | 22 +++++++++++++++++++--- 4 files changed, 36 insertions(+), 7 deletions(-) diff --git a/docs/drivers/generic.md b/docs/drivers/generic.md index 780ca89a2a..747ec1a8a0 100644 --- a/docs/drivers/generic.md +++ b/docs/drivers/generic.md @@ -62,6 +62,7 @@ as a sudoer with `NOPASSWD`. See https://help.ubuntu.com/community/Sudoers. ### Options +- `--generic-engine-port`: Port to use for Docker Daemon (Note: This flag will not work with boot2docker). - `--generic-ip-address`: **required** IP Address of host. - `--generic-ssh-key`: Path to the SSH user private key. - `--generic-ssh-user`: SSH username used to connect. @@ -73,6 +74,7 @@ Environment variables and default values: | CLI option | Environment variable | Default | | -------------------------- | -------------------- | ------------------------- | +| `--generic-engine-port` | `GENERIC_ENGINE_PORT`| `2376` | | **`--generic-ip-address`** | `GENERIC_IP_ADDRESS` | - | | `--generic-ssh-key` | `GENERIC_SSH_KEY` | _(defers to `ssh-agent`)_ | | `--generic-ssh-user` | `GENERIC_SSH_USER` | `root` | diff --git a/drivers/generic/generic.go b/drivers/generic/generic.go index 40b1267d6e..6c68813397 100644 --- a/drivers/generic/generic.go +++ b/drivers/generic/generic.go @@ -9,6 +9,7 @@ import ( "time" "github.com/docker/machine/libmachine/drivers" + "github.com/docker/machine/libmachine/engine" "github.com/docker/machine/libmachine/log" "github.com/docker/machine/libmachine/mcnflag" "github.com/docker/machine/libmachine/mcnutils" @@ -17,7 +18,8 @@ import ( type Driver struct { *drivers.BaseDriver - SSHKey string + EnginePort int + SSHKey string } const ( @@ -28,6 +30,12 @@ const ( // "docker hosts create" func (d *Driver) GetCreateFlags() []mcnflag.Flag { return []mcnflag.Flag{ + mcnflag.IntFlag{ + Name: "generic-engine-port", + Usage: "Docker engine port", + Value: engine.DefaultPort, + EnvVar: "GENERIC_ENGINE_PORT", + }, mcnflag.StringFlag{ Name: "generic-ip-address", Usage: "IP Address of machine", @@ -57,6 +65,7 @@ func (d *Driver) GetCreateFlags() []mcnflag.Flag { // NewDriver creates and returns a new instance of the driver func NewDriver(hostName, storePath string) drivers.Driver { return &Driver{ + EnginePort: engine.DefaultPort, BaseDriver: &drivers.BaseDriver{ MachineName: hostName, StorePath: storePath, @@ -89,6 +98,7 @@ func (d *Driver) GetSSHKeyPath() string { } func (d *Driver) SetConfigFromFlags(flags drivers.DriverOptions) error { + d.EnginePort = flags.Int("generic-engine-port") d.IPAddress = flags.String("generic-ip-address") d.SSHUser = flags.String("generic-ssh-user") d.SSHKey = flags.String("generic-ssh-key") @@ -142,7 +152,7 @@ func (d *Driver) GetURL() (string, error) { return "", err } - return fmt.Sprintf("tcp://%s", net.JoinHostPort(ip, "2376")), nil + return fmt.Sprintf("tcp://%s", net.JoinHostPort(ip, strconv.Itoa(d.EnginePort))), nil } func (d *Driver) GetState() (state.State, error) { diff --git a/drivers/generic/generic_test.go b/drivers/generic/generic_test.go index d57552a037..93caa797c1 100644 --- a/drivers/generic/generic_test.go +++ b/drivers/generic/generic_test.go @@ -12,8 +12,9 @@ func TestSetConfigFromFlags(t *testing.T) { checkFlags := &drivers.CheckDriverOptions{ FlagsValues: map[string]interface{}{ - "generic-ip-address": "localhost", - "generic-ssh-key": "path", + "generic-engine-port": "3000", + "generic-ip-address": "localhost", + "generic-ssh-key": "path", }, CreateFlags: driver.GetCreateFlags(), } diff --git a/libmachine/provision/configure_swarm.go b/libmachine/provision/configure_swarm.go index 4084968989..2064031c02 100644 --- a/libmachine/provision/configure_swarm.go +++ b/libmachine/provision/configure_swarm.go @@ -3,6 +3,7 @@ package provision import ( "fmt" "net/url" + "strconv" "strings" "github.com/docker/machine/libmachine/auth" @@ -30,15 +31,30 @@ func configureSwarm(p Provisioner, swarmOptions swarm.Options, authOptions auth. return err } - parts := strings.Split(u.Host, ":") + enginePort := engine.DefaultPort + engineURL, err := p.GetDriver().GetURL() + if err != nil { + return err + } + + parts := strings.Split(engineURL, ":") + if len(parts) == 3 { + dPort, err := strconv.Atoi(parts[2]) + if err != nil { + return err + } + enginePort = dPort + } + + parts = strings.Split(u.Host, ":") port := parts[1] dockerDir := p.GetDockerOptionsDir() dockerHost := &mcndockerclient.RemoteDocker{ - HostURL: fmt.Sprintf("tcp://%s:%d", ip, engine.DefaultPort), + HostURL: fmt.Sprintf("tcp://%s:%d", ip, enginePort), AuthOption: &authOptions, } - advertiseInfo := fmt.Sprintf("%s:%d", ip, engine.DefaultPort) + advertiseInfo := fmt.Sprintf("%s:%d", ip, enginePort) if swarmOptions.Master { advertiseMasterInfo := fmt.Sprintf("%s:%s", ip, "3376")