diff --git a/libnetwork/agent.go b/libnetwork/agent.go index 785e731c6e..7194d78b48 100644 --- a/libnetwork/agent.go +++ b/libnetwork/agent.go @@ -207,13 +207,18 @@ func (c *controller) agentSetup() error { bindAddr := clusterProvider.GetLocalAddress() advAddr := clusterProvider.GetAdvertiseAddress() dataAddr := clusterProvider.GetDataPathAddress() - remote := clusterProvider.GetRemoteAddress() - remoteAddr, _, _ := net.SplitHostPort(remote) + remoteList := clusterProvider.GetRemoteAddressList() + remoteAddrList := make([]string, len(remoteList)) + for _, remote := range remoteList { + addr, _, _ := net.SplitHostPort(remote) + remoteAddrList = append(remoteAddrList, addr) + } + listen := clusterProvider.GetListenAddress() listenAddr, _, _ := net.SplitHostPort(listen) - logrus.Infof("Initializing Libnetwork Agent Listen-Addr=%s Local-addr=%s Adv-addr=%s Data-addr=%s Remote-addr=%s", - listenAddr, bindAddr, advAddr, dataAddr, remoteAddr) + logrus.Infof("Initializing Libnetwork Agent Listen-Addr=%s Local-addr=%s Adv-addr=%s Data-addr=%s Remote-addr-list=%v", + listenAddr, bindAddr, advAddr, dataAddr, remoteAddrList) if advAddr != "" && agent == nil { if err := c.agentInit(listenAddr, bindAddr, advAddr, dataAddr); err != nil { logrus.Errorf("Error in agentInit : %v", err) @@ -227,8 +232,8 @@ func (c *controller) agentSetup() error { } } - if remoteAddr != "" { - if err := c.agentJoin(remoteAddr); err != nil { + if len(remoteAddrList) > 0 { + if err := c.agentJoin(remoteAddrList); err != nil { logrus.Errorf("Error in joining gossip cluster : %v(join will be retried in background)", err) } } @@ -342,12 +347,12 @@ func (c *controller) agentInit(listenAddr, bindAddrOrInterface, advertiseAddr, d return nil } -func (c *controller) agentJoin(remote string) error { +func (c *controller) agentJoin(remoteAddrList []string) error { agent := c.getAgent() if agent == nil { return nil } - return agent.networkDB.Join([]string{remote}) + return agent.networkDB.Join(remoteAddrList) } func (c *controller) agentDriverNotify(d driverapi.Driver) { diff --git a/libnetwork/cluster/provider.go b/libnetwork/cluster/provider.go index 24f40c56eb..36563080b3 100644 --- a/libnetwork/cluster/provider.go +++ b/libnetwork/cluster/provider.go @@ -13,7 +13,7 @@ type Provider interface { GetListenAddress() string GetAdvertiseAddress() string GetDataPathAddress() string - GetRemoteAddress() string + GetRemoteAddressList() []string ListenClusterEvents() <-chan struct{} AttachNetwork(string, string, []string) (*network.NetworkingConfig, error) DetachNetwork(string, string) error diff --git a/libnetwork/cmd/dnet/dnet.go b/libnetwork/cmd/dnet/dnet.go index b11390e785..17654a6041 100644 --- a/libnetwork/cmd/dnet/dnet.go +++ b/libnetwork/cmd/dnet/dnet.go @@ -324,8 +324,8 @@ func (d *dnetConnection) GetListenAddress() string { return d.Orchestration.Bind } -func (d *dnetConnection) GetRemoteAddress() string { - return d.Orchestration.Peer +func (d *dnetConnection) GetRemoteAddressList() []string { + return []string{d.Orchestration.Peer} } func (d *dnetConnection) GetNetworkKeys() []*types.EncryptionKey {