|
@@ -2,17 +2,27 @@ package swarm
|
|
|
|
|
|
import (
|
|
import (
|
|
"fmt"
|
|
"fmt"
|
|
|
|
+ "net"
|
|
|
|
+ "strconv"
|
|
"strings"
|
|
"strings"
|
|
|
|
|
|
"github.com/docker/engine-api/types/swarm"
|
|
"github.com/docker/engine-api/types/swarm"
|
|
)
|
|
)
|
|
|
|
|
|
const (
|
|
const (
|
|
- defaultListenAddr = "0.0.0.0:2377"
|
|
|
|
|
|
+ defaultListenAddr = "0.0.0.0"
|
|
|
|
+ defaultListenPort uint16 = 2377
|
|
// WORKER constant for worker name
|
|
// WORKER constant for worker name
|
|
WORKER = "WORKER"
|
|
WORKER = "WORKER"
|
|
// MANAGER constant for manager name
|
|
// MANAGER constant for manager name
|
|
MANAGER = "MANAGER"
|
|
MANAGER = "MANAGER"
|
|
|
|
+
|
|
|
|
+ flagAutoAccept = "auto-accept"
|
|
|
|
+ flagCertExpiry = "cert-expiry"
|
|
|
|
+ flagDispatcherHeartbeat = "dispatcher-heartbeat"
|
|
|
|
+ flagListenAddr = "listen-addr"
|
|
|
|
+ flagSecret = "secret"
|
|
|
|
+ flagTaskHistoryLimit = "task-history-limit"
|
|
)
|
|
)
|
|
|
|
|
|
var (
|
|
var (
|
|
@@ -25,25 +35,35 @@ var (
|
|
// NodeAddrOption is a pflag.Value for listen and remote addresses
|
|
// NodeAddrOption is a pflag.Value for listen and remote addresses
|
|
type NodeAddrOption struct {
|
|
type NodeAddrOption struct {
|
|
addr string
|
|
addr string
|
|
|
|
+ port uint16
|
|
}
|
|
}
|
|
|
|
|
|
// String prints the representation of this flag
|
|
// String prints the representation of this flag
|
|
func (a *NodeAddrOption) String() string {
|
|
func (a *NodeAddrOption) String() string {
|
|
- return a.addr
|
|
|
|
|
|
+ return a.Value()
|
|
}
|
|
}
|
|
|
|
|
|
// Set the value for this flag
|
|
// Set the value for this flag
|
|
func (a *NodeAddrOption) Set(value string) error {
|
|
func (a *NodeAddrOption) Set(value string) error {
|
|
if !strings.Contains(value, ":") {
|
|
if !strings.Contains(value, ":") {
|
|
- return fmt.Errorf("Invalid url, a host and port are required")
|
|
|
|
|
|
+ a.addr = value
|
|
|
|
+ return nil
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ host, port, err := net.SplitHostPort(value)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return fmt.Errorf("Invalid url, %v", err)
|
|
}
|
|
}
|
|
|
|
|
|
- parts := strings.Split(value, ":")
|
|
|
|
- if len(parts) != 2 {
|
|
|
|
- return fmt.Errorf("Invalid url, too many colons")
|
|
|
|
|
|
+ portInt, err := strconv.ParseUint(port, 10, 16)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return fmt.Errorf("invalid url, %v", err)
|
|
}
|
|
}
|
|
|
|
+ a.port = uint16(portInt)
|
|
|
|
|
|
- a.addr = value
|
|
|
|
|
|
+ if host != "" {
|
|
|
|
+ a.addr = host
|
|
|
|
+ }
|
|
return nil
|
|
return nil
|
|
}
|
|
}
|
|
|
|
|
|
@@ -52,9 +72,19 @@ func (a *NodeAddrOption) Type() string {
|
|
return "node-addr"
|
|
return "node-addr"
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+// Value returns the value of this option as addr:port
|
|
|
|
+func (a *NodeAddrOption) Value() string {
|
|
|
|
+ return net.JoinHostPort(a.addr, strconv.Itoa(int(a.port)))
|
|
|
|
+}
|
|
|
|
+
|
|
// NewNodeAddrOption returns a new node address option
|
|
// NewNodeAddrOption returns a new node address option
|
|
-func NewNodeAddrOption() NodeAddrOption {
|
|
|
|
- return NodeAddrOption{addr: defaultListenAddr}
|
|
|
|
|
|
+func NewNodeAddrOption(host string, port uint16) NodeAddrOption {
|
|
|
|
+ return NodeAddrOption{addr: host, port: port}
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// NewListenAddrOption returns a NodeAddrOption with default values
|
|
|
|
+func NewListenAddrOption() NodeAddrOption {
|
|
|
|
+ return NewNodeAddrOption(defaultListenAddr, defaultListenPort)
|
|
}
|
|
}
|
|
|
|
|
|
// AutoAcceptOption is a value type for auto-accept policy
|
|
// AutoAcceptOption is a value type for auto-accept policy
|