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 <tandrepires@gmail.com>
This commit is contained in:
Tiago Pires 2016-02-22 17:27:01 +00:00
parent ccc5fe6c7d
commit 63ea976b1d
4 changed files with 36 additions and 7 deletions

View File

@ -62,6 +62,7 @@ as a sudoer with `NOPASSWD`. See https://help.ubuntu.com/community/Sudoers.
### Options ### 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-ip-address`: **required** IP Address of host.
- `--generic-ssh-key`: Path to the SSH user private key. - `--generic-ssh-key`: Path to the SSH user private key.
- `--generic-ssh-user`: SSH username used to connect. - `--generic-ssh-user`: SSH username used to connect.
@ -73,6 +74,7 @@ Environment variables and default values:
| CLI option | Environment variable | Default | | CLI option | Environment variable | Default |
| -------------------------- | -------------------- | ------------------------- | | -------------------------- | -------------------- | ------------------------- |
| `--generic-engine-port` | `GENERIC_ENGINE_PORT`| `2376` |
| **`--generic-ip-address`** | `GENERIC_IP_ADDRESS` | - | | **`--generic-ip-address`** | `GENERIC_IP_ADDRESS` | - |
| `--generic-ssh-key` | `GENERIC_SSH_KEY` | _(defers to `ssh-agent`)_ | | `--generic-ssh-key` | `GENERIC_SSH_KEY` | _(defers to `ssh-agent`)_ |
| `--generic-ssh-user` | `GENERIC_SSH_USER` | `root` | | `--generic-ssh-user` | `GENERIC_SSH_USER` | `root` |

View File

@ -9,6 +9,7 @@ import (
"time" "time"
"github.com/docker/machine/libmachine/drivers" "github.com/docker/machine/libmachine/drivers"
"github.com/docker/machine/libmachine/engine"
"github.com/docker/machine/libmachine/log" "github.com/docker/machine/libmachine/log"
"github.com/docker/machine/libmachine/mcnflag" "github.com/docker/machine/libmachine/mcnflag"
"github.com/docker/machine/libmachine/mcnutils" "github.com/docker/machine/libmachine/mcnutils"
@ -17,7 +18,8 @@ import (
type Driver struct { type Driver struct {
*drivers.BaseDriver *drivers.BaseDriver
SSHKey string EnginePort int
SSHKey string
} }
const ( const (
@ -28,6 +30,12 @@ const (
// "docker hosts create" // "docker hosts create"
func (d *Driver) GetCreateFlags() []mcnflag.Flag { func (d *Driver) GetCreateFlags() []mcnflag.Flag {
return []mcnflag.Flag{ return []mcnflag.Flag{
mcnflag.IntFlag{
Name: "generic-engine-port",
Usage: "Docker engine port",
Value: engine.DefaultPort,
EnvVar: "GENERIC_ENGINE_PORT",
},
mcnflag.StringFlag{ mcnflag.StringFlag{
Name: "generic-ip-address", Name: "generic-ip-address",
Usage: "IP Address of machine", 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 // NewDriver creates and returns a new instance of the driver
func NewDriver(hostName, storePath string) drivers.Driver { func NewDriver(hostName, storePath string) drivers.Driver {
return &Driver{ return &Driver{
EnginePort: engine.DefaultPort,
BaseDriver: &drivers.BaseDriver{ BaseDriver: &drivers.BaseDriver{
MachineName: hostName, MachineName: hostName,
StorePath: storePath, StorePath: storePath,
@ -89,6 +98,7 @@ func (d *Driver) GetSSHKeyPath() string {
} }
func (d *Driver) SetConfigFromFlags(flags drivers.DriverOptions) error { func (d *Driver) SetConfigFromFlags(flags drivers.DriverOptions) error {
d.EnginePort = flags.Int("generic-engine-port")
d.IPAddress = flags.String("generic-ip-address") d.IPAddress = flags.String("generic-ip-address")
d.SSHUser = flags.String("generic-ssh-user") d.SSHUser = flags.String("generic-ssh-user")
d.SSHKey = flags.String("generic-ssh-key") d.SSHKey = flags.String("generic-ssh-key")
@ -142,7 +152,7 @@ func (d *Driver) GetURL() (string, error) {
return "", err 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) { func (d *Driver) GetState() (state.State, error) {

View File

@ -12,8 +12,9 @@ func TestSetConfigFromFlags(t *testing.T) {
checkFlags := &drivers.CheckDriverOptions{ checkFlags := &drivers.CheckDriverOptions{
FlagsValues: map[string]interface{}{ FlagsValues: map[string]interface{}{
"generic-ip-address": "localhost", "generic-engine-port": "3000",
"generic-ssh-key": "path", "generic-ip-address": "localhost",
"generic-ssh-key": "path",
}, },
CreateFlags: driver.GetCreateFlags(), CreateFlags: driver.GetCreateFlags(),
} }

View File

@ -3,6 +3,7 @@ package provision
import ( import (
"fmt" "fmt"
"net/url" "net/url"
"strconv"
"strings" "strings"
"github.com/docker/machine/libmachine/auth" "github.com/docker/machine/libmachine/auth"
@ -30,15 +31,30 @@ func configureSwarm(p Provisioner, swarmOptions swarm.Options, authOptions auth.
return err 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] port := parts[1]
dockerDir := p.GetDockerOptionsDir() dockerDir := p.GetDockerOptionsDir()
dockerHost := &mcndockerclient.RemoteDocker{ dockerHost := &mcndockerclient.RemoteDocker{
HostURL: fmt.Sprintf("tcp://%s:%d", ip, engine.DefaultPort), HostURL: fmt.Sprintf("tcp://%s:%d", ip, enginePort),
AuthOption: &authOptions, AuthOption: &authOptions,
} }
advertiseInfo := fmt.Sprintf("%s:%d", ip, engine.DefaultPort) advertiseInfo := fmt.Sprintf("%s:%d", ip, enginePort)
if swarmOptions.Master { if swarmOptions.Master {
advertiseMasterInfo := fmt.Sprintf("%s:%s", ip, "3376") advertiseMasterInfo := fmt.Sprintf("%s:%s", ip, "3376")