Przeglądaj źródła

Merge pull request #31532 from aboch/vnd

Vendoring libnetwork @1a01921
Brian Goff 8 lat temu
rodzic
commit
05e7f956bd

+ 6 - 1
integration-cli/docker_cli_swarm_test.go

@@ -303,11 +303,16 @@ func (s *DockerSwarmSuite) TestSwarmContainerEndpointOptions(c *check.C) {
 	_, err = d.Cmd("run", "-d", "--net=foo", "--name=second", "busybox", "top")
 	c.Assert(err, checker.IsNil, check.Commentf(out))
 
-	// ping first container and its alias
+	_, err = d.Cmd("run", "-d", "--net=foo", "--net-alias=third-alias", "busybox", "top")
+	c.Assert(err, checker.IsNil, check.Commentf(out))
+
+	// ping first container and its alias, also ping third and anonymous container by its alias
 	_, err = d.Cmd("exec", "second", "ping", "-c", "1", "first")
 	c.Assert(err, check.IsNil, check.Commentf(out))
 	_, err = d.Cmd("exec", "second", "ping", "-c", "1", "first-alias")
 	c.Assert(err, check.IsNil, check.Commentf(out))
+	_, err = d.Cmd("exec", "second", "ping", "-c", "1", "third-alias")
+	c.Assert(err, check.IsNil, check.Commentf(out))
 }
 
 func (s *DockerSwarmSuite) TestSwarmContainerAttachByNetworkId(c *check.C) {

+ 1 - 1
vendor.conf

@@ -23,7 +23,7 @@ github.com/RackSec/srslog 456df3a81436d29ba874f3590eeeee25d666f8a5
 github.com/imdario/mergo 0.2.1
 
 #get libnetwork packages
-github.com/docker/libnetwork bdc9dcea1a74443c61d4d156dfcece1df8105f13
+github.com/docker/libnetwork 1a019214c9cb80bd56219e5d6994a22caf302895
 github.com/docker/go-events 18b43f1bc85d9cdd42c05a6cd2d444c7a200a894
 github.com/armon/go-radix e39d623f12e8e41c7b5529e9a9dd67a1e2261f80
 github.com/armon/go-metrics eb0af217e5e9747e41dd5303755356b62d28e3ec

+ 51 - 39
vendor/github.com/docker/libnetwork/agent.go

@@ -463,6 +463,10 @@ func (ep *endpoint) deleteDriverInfoFromCluster() error {
 }
 
 func (ep *endpoint) addServiceInfoToCluster() error {
+	if ep.isAnonymous() && len(ep.myAliases) == 0 || ep.Iface().Address() == nil {
+		return nil
+	}
+
 	n := ep.getNetwork()
 	if !n.isClusterEligible() {
 		return nil
@@ -470,38 +474,42 @@ func (ep *endpoint) addServiceInfoToCluster() error {
 
 	c := n.getController()
 	agent := c.getAgent()
-	if !ep.isAnonymous() && ep.Iface().Address() != nil {
-		var ingressPorts []*PortConfig
-		if ep.svcID != "" {
-			// Gossip ingress ports only in ingress network.
-			if n.ingress {
-				ingressPorts = ep.ingressPorts
-			}
 
-			if err := c.addServiceBinding(ep.svcName, ep.svcID, n.ID(), ep.ID(), ep.virtualIP, ingressPorts, ep.svcAliases, ep.Iface().Address().IP); err != nil {
-				return err
-			}
+	var ingressPorts []*PortConfig
+	if ep.svcID != "" {
+		// Gossip ingress ports only in ingress network.
+		if n.ingress {
+			ingressPorts = ep.ingressPorts
 		}
 
-		buf, err := proto.Marshal(&EndpointRecord{
-			Name:         ep.Name(),
-			ServiceName:  ep.svcName,
-			ServiceID:    ep.svcID,
-			VirtualIP:    ep.virtualIP.String(),
-			IngressPorts: ingressPorts,
-			Aliases:      ep.svcAliases,
-			TaskAliases:  ep.myAliases,
-			EndpointIP:   ep.Iface().Address().IP.String(),
-		})
-
-		if err != nil {
+		if err := c.addServiceBinding(ep.svcName, ep.svcID, n.ID(), ep.ID(), ep.virtualIP, ingressPorts, ep.svcAliases, ep.Iface().Address().IP); err != nil {
 			return err
 		}
+	}
 
-		if agent != nil {
-			if err := agent.networkDB.CreateEntry("endpoint_table", n.ID(), ep.ID(), buf); err != nil {
-				return err
-			}
+	name := ep.Name()
+	if ep.isAnonymous() {
+		name = ep.MyAliases()[0]
+	}
+
+	buf, err := proto.Marshal(&EndpointRecord{
+		Name:         name,
+		ServiceName:  ep.svcName,
+		ServiceID:    ep.svcID,
+		VirtualIP:    ep.virtualIP.String(),
+		IngressPorts: ingressPorts,
+		Aliases:      ep.svcAliases,
+		TaskAliases:  ep.myAliases,
+		EndpointIP:   ep.Iface().Address().IP.String(),
+	})
+
+	if err != nil {
+		return err
+	}
+
+	if agent != nil {
+		if err := agent.networkDB.CreateEntry("endpoint_table", n.ID(), ep.ID(), buf); err != nil {
+			return err
 		}
 	}
 
@@ -509,6 +517,10 @@ func (ep *endpoint) addServiceInfoToCluster() error {
 }
 
 func (ep *endpoint) deleteServiceInfoFromCluster() error {
+	if ep.isAnonymous() && len(ep.myAliases) == 0 {
+		return nil
+	}
+
 	n := ep.getNetwork()
 	if !n.isClusterEligible() {
 		return nil
@@ -517,23 +529,23 @@ func (ep *endpoint) deleteServiceInfoFromCluster() error {
 	c := n.getController()
 	agent := c.getAgent()
 
-	if !ep.isAnonymous() {
-		if ep.svcID != "" && ep.Iface().Address() != nil {
-			var ingressPorts []*PortConfig
-			if n.ingress {
-				ingressPorts = ep.ingressPorts
-			}
+	if ep.svcID != "" && ep.Iface().Address() != nil {
+		var ingressPorts []*PortConfig
+		if n.ingress {
+			ingressPorts = ep.ingressPorts
+		}
 
-			if err := c.rmServiceBinding(ep.svcName, ep.svcID, n.ID(), ep.ID(), ep.virtualIP, ingressPorts, ep.svcAliases, ep.Iface().Address().IP); err != nil {
-				return err
-			}
+		if err := c.rmServiceBinding(ep.svcName, ep.svcID, n.ID(), ep.ID(), ep.virtualIP, ingressPorts, ep.svcAliases, ep.Iface().Address().IP); err != nil {
+			return err
 		}
-		if agent != nil {
-			if err := agent.networkDB.DeleteEntry("endpoint_table", n.ID(), ep.ID()); err != nil {
-				return err
-			}
+	}
+
+	if agent != nil {
+		if err := agent.networkDB.DeleteEntry("endpoint_table", n.ID(), ep.ID()); err != nil {
+			return err
 		}
 	}
+
 	return nil
 }
 

+ 2 - 0
vendor/github.com/docker/libnetwork/osl/neigh_linux.go

@@ -147,7 +147,9 @@ func (n *networkNamespace) AddNeighbor(dstIP net.IP, dstMac net.HardwareAddr, op
 		return fmt.Errorf("could not add neighbor entry: %v", err)
 	}
 
+	n.Lock()
 	n.neighbors = append(n.neighbors, nh)
+	n.Unlock()
 
 	return nil
 }