mirror of https://github.com/docker/docs.git
fix panic with no port
Signed-off-by: Victor Vieux <vieux@docker.com>
This commit is contained in:
parent
02cc59840f
commit
693fb0fcf1
|
|
@ -56,14 +56,18 @@ type Node struct {
|
|||
// Connect will initialize a connection to the Docker daemon running on the
|
||||
// host, gather machine specs (memory, cpu, ...) and monitor state changes.
|
||||
func (n *Node) Connect(config *tls.Config) error {
|
||||
parts := strings.Split(n.Addr, ":")
|
||||
addr, err := net.ResolveIPAddr("ip4", parts[0])
|
||||
host, port, err := net.SplitHostPort(n.Addr)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
addr, err := net.ResolveIPAddr("ip4", host)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
n.IP = addr.IP.String()
|
||||
|
||||
c, err := dockerclient.NewDockerClientTimeout(n.IP+":"+parts[1], config, time.Duration(requestTimeout))
|
||||
c, err := dockerclient.NewDockerClientTimeout(n.IP+":"+port, config, time.Duration(requestTimeout))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -65,7 +65,11 @@ func (s *ConsulDiscoveryService) Fetch() ([]*discovery.Node, error) {
|
|||
if pair.Key == s.prefix {
|
||||
continue
|
||||
}
|
||||
nodes = append(nodes, discovery.NewNode(string(pair.Value)))
|
||||
node, err := discovery.NewNode(string(pair.Value))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
nodes = append(nodes, node)
|
||||
}
|
||||
return nodes, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,21 +3,26 @@ package discovery
|
|||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"net"
|
||||
"strings"
|
||||
|
||||
log "github.com/Sirupsen/logrus"
|
||||
)
|
||||
|
||||
type Node struct {
|
||||
url string
|
||||
Host string
|
||||
Port string
|
||||
}
|
||||
|
||||
func NewNode(url string) *Node {
|
||||
return &Node{url: url}
|
||||
func NewNode(url string) (*Node, error) {
|
||||
host, port, err := net.SplitHostPort(url)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &Node{host, port}, nil
|
||||
}
|
||||
|
||||
func (n Node) String() string {
|
||||
return n.url
|
||||
return fmt.Sprintf("%s:%s", n.Host, n.Port)
|
||||
}
|
||||
|
||||
type WatchCallback func(nodes []*Node)
|
||||
|
|
|
|||
|
|
@ -60,7 +60,11 @@ func (s *EtcdDiscoveryService) Fetch() ([]*discovery.Node, error) {
|
|||
var nodes []*discovery.Node
|
||||
|
||||
for _, n := range resp.Node.Nodes {
|
||||
nodes = append(nodes, discovery.NewNode(n.Value))
|
||||
node, err := discovery.NewNode(n.Value)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
nodes = append(nodes, node)
|
||||
}
|
||||
return nodes, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,7 +33,11 @@ func (s *FileDiscoveryService) Fetch() ([]*discovery.Node, error) {
|
|||
|
||||
for _, line := range strings.Split(string(data), "\n") {
|
||||
if line != "" {
|
||||
nodes = append(nodes, discovery.NewNode(line))
|
||||
node, err := discovery.NewNode(line)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
nodes = append(nodes, node)
|
||||
}
|
||||
}
|
||||
return nodes, nil
|
||||
|
|
|
|||
|
|
@ -16,7 +16,11 @@ func init() {
|
|||
|
||||
func (s *NodesDiscoveryService) Initialize(uris string, _ int) error {
|
||||
for _, ip := range strings.Split(uris, ",") {
|
||||
s.nodes = append(s.nodes, discovery.NewNode(ip))
|
||||
node, err := discovery.NewNode(ip)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
s.nodes = append(s.nodes, node)
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
|
|||
|
|
@ -56,7 +56,11 @@ func (s *TokenDiscoveryService) Fetch() ([]*discovery.Node, error) {
|
|||
|
||||
var nodes []*discovery.Node
|
||||
for _, addr := range addrs {
|
||||
nodes = append(nodes, discovery.NewNode(addr))
|
||||
node, err := discovery.NewNode(addr)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
nodes = append(nodes, node)
|
||||
}
|
||||
|
||||
return nodes, nil
|
||||
|
|
|
|||
|
|
@ -61,19 +61,23 @@ func (s *ZkDiscoveryService) Fetch() ([]*discovery.Node, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
return s.createNodes(addrs), nil
|
||||
return s.createNodes(addrs)
|
||||
}
|
||||
|
||||
func (s *ZkDiscoveryService) createNodes(addrs []string) (nodes []*discovery.Node) {
|
||||
nodes = make([]*discovery.Node, 0)
|
||||
func (s *ZkDiscoveryService) createNodes(addrs []string) ([]*discovery.Node, error) {
|
||||
nodes := make([]*discovery.Node, 0)
|
||||
if addrs == nil {
|
||||
return
|
||||
return nodes, nil
|
||||
}
|
||||
|
||||
for _, addr := range addrs {
|
||||
nodes = append(nodes, discovery.NewNode(addr))
|
||||
node, err := discovery.NewNode(addr)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
nodes = append(nodes, node)
|
||||
}
|
||||
return
|
||||
return nodes, nil
|
||||
}
|
||||
|
||||
func (s *ZkDiscoveryService) Watch(callback discovery.WatchCallback) {
|
||||
|
|
@ -83,8 +87,10 @@ func (s *ZkDiscoveryService) Watch(callback discovery.WatchCallback) {
|
|||
log.Debugf("[ZK] Watch aborted")
|
||||
return
|
||||
}
|
||||
nodes := s.createNodes(addrs)
|
||||
callback(nodes)
|
||||
nodes, err := s.createNodes(addrs)
|
||||
if err == nil {
|
||||
callback(nodes)
|
||||
}
|
||||
|
||||
for e := range eventChan {
|
||||
if e.Type == zk.EventNodeChildrenChanged {
|
||||
|
|
|
|||
|
|
@ -21,8 +21,16 @@ func TestInitialize(t *testing.T) {
|
|||
|
||||
func TestCreateNodes(t *testing.T) {
|
||||
service := &ZkDiscoveryService{}
|
||||
assert.Equal(t, service.createNodes(nil), []*discovery.Node{})
|
||||
nodes := service.createNodes([]string{"127.0.0.1", "127.0.0.2"})
|
||||
assert.Equal(t, nodes[0].String(), "127.0.0.1")
|
||||
assert.Equal(t, nodes[1].String(), "127.0.0.2")
|
||||
|
||||
nodes, err := service.createNodes(nil)
|
||||
assert.Equal(t, nodes, []*discovery.Node{})
|
||||
assert.NoError(t, err)
|
||||
|
||||
nodes, err = service.createNodes([]string{"127.0.0.1:2375", "127.0.0.2:2375"})
|
||||
assert.Equal(t, nodes[0].String(), "127.0.0.1:2375")
|
||||
assert.Equal(t, nodes[1].String(), "127.0.0.2:2375")
|
||||
assert.NoError(t, err)
|
||||
|
||||
_, err = service.createNodes([]string{"127.0.0.1", "127.0.0.2"})
|
||||
assert.Error(t, err)
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue