Selaa lähdekoodia

Remove container dependency for links
Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)

Michael Crosby 11 vuotta sitten
vanhempi
commit
fc952e0de9
3 muutettua tiedostoa jossa 25 lisäystä ja 50 poistoa
  1. 13 2
      container.go
  2. 10 13
      links.go
  3. 2 35
      links_test.go

+ 13 - 2
container.go

@@ -548,8 +548,19 @@ func (container *Container) Start() (err error) {
 			container.activeLinks = nil
 			container.activeLinks = nil
 		}
 		}
 
 
-		for p, child := range children {
-			link, err := NewLink(container, child, p, runtime.eng)
+		for linkAlias, child := range children {
+			if !child.State.IsRunning() {
+				return fmt.Errorf("Cannot link to a non running container: %s AS %s", child.Name, linkAlias)
+			}
+
+			link, err := NewLink(
+				container.NetworkSettings.IPAddress,
+				child.NetworkSettings.IPAddress,
+				linkAlias,
+				child.Config.Env,
+				child.Config.ExposedPorts,
+				runtime.eng)
+
 			if err != nil {
 			if err != nil {
 				rollback()
 				rollback()
 				return err
 				return err

+ 10 - 13
links.go

@@ -18,26 +18,23 @@ type Link struct {
 	eng              *engine.Engine
 	eng              *engine.Engine
 }
 }
 
 
-func NewLink(parent, child *Container, name string, eng *engine.Engine) (*Link, error) {
-	if parent.ID == child.ID {
-		return nil, fmt.Errorf("Cannot link to self: %s == %s", parent.ID, child.ID)
-	}
-	if !child.State.IsRunning() {
-		return nil, fmt.Errorf("Cannot link to a non running container: %s AS %s", child.Name, name)
-	}
+func NewLink(parentIP, childIP, name string, env []string, exposedPorts map[nat.Port]struct{}, eng *engine.Engine) (*Link, error) {
+
+	var (
+		i     int
+		ports = make([]nat.Port, len(exposedPorts))
+	)
 
 
-	ports := make([]nat.Port, len(child.Config.ExposedPorts))
-	var i int
-	for p := range child.Config.ExposedPorts {
+	for p := range exposedPorts {
 		ports[i] = p
 		ports[i] = p
 		i++
 		i++
 	}
 	}
 
 
 	l := &Link{
 	l := &Link{
 		Name:             name,
 		Name:             name,
-		ChildIP:          child.NetworkSettings.IPAddress,
-		ParentIP:         parent.NetworkSettings.IPAddress,
-		ChildEnvironment: child.Config.Env,
+		ChildIP:          childIP,
+		ParentIP:         parentIP,
+		ChildEnvironment: env,
 		Ports:            ports,
 		Ports:            ports,
 		eng:              eng,
 		eng:              eng,
 	}
 	}

+ 2 - 35
links_test.go

@@ -2,37 +2,15 @@ package docker
 
 
 import (
 import (
 	"github.com/dotcloud/docker/nat"
 	"github.com/dotcloud/docker/nat"
-	"github.com/dotcloud/docker/runconfig"
 	"strings"
 	"strings"
 	"testing"
 	"testing"
 )
 )
 
 
-func newMockLinkContainer(id string, ip string) *Container {
-	return &Container{
-		Config: &runconfig.Config{},
-		ID:     id,
-		NetworkSettings: &NetworkSettings{
-			IPAddress: ip,
-		},
-	}
-}
-
 func TestLinkNew(t *testing.T) {
 func TestLinkNew(t *testing.T) {
-	toID := GenerateID()
-	fromID := GenerateID()
-
-	from := newMockLinkContainer(fromID, "172.0.17.2")
-	from.Config.Env = []string{}
-	from.State = State{Running: true}
 	ports := make(nat.PortSet)
 	ports := make(nat.PortSet)
-
 	ports[nat.Port("6379/tcp")] = struct{}{}
 	ports[nat.Port("6379/tcp")] = struct{}{}
 
 
-	from.Config.ExposedPorts = ports
-
-	to := newMockLinkContainer(toID, "172.0.17.3")
-
-	link, err := NewLink(to, from, "/db/docker", nil)
+	link, err := NewLink("172.0.17.3", "172.0.17.2", "/db/docker", nil, ports, nil)
 	if err != nil {
 	if err != nil {
 		t.Fatal(err)
 		t.Fatal(err)
 	}
 	}
@@ -60,21 +38,10 @@ func TestLinkNew(t *testing.T) {
 }
 }
 
 
 func TestLinkEnv(t *testing.T) {
 func TestLinkEnv(t *testing.T) {
-	toID := GenerateID()
-	fromID := GenerateID()
-
-	from := newMockLinkContainer(fromID, "172.0.17.2")
-	from.Config.Env = []string{"PASSWORD=gordon"}
-	from.State = State{Running: true}
 	ports := make(nat.PortSet)
 	ports := make(nat.PortSet)
-
 	ports[nat.Port("6379/tcp")] = struct{}{}
 	ports[nat.Port("6379/tcp")] = struct{}{}
 
 
-	from.Config.ExposedPorts = ports
-
-	to := newMockLinkContainer(toID, "172.0.17.3")
-
-	link, err := NewLink(to, from, "/db/docker", nil)
+	link, err := NewLink("172.0.17.3", "172.0.17.2", "/db/docker", []string{"PASSWORD=gordon"}, ports, nil)
 	if err != nil {
 	if err != nil {
 		t.Fatal(err)
 		t.Fatal(err)
 	}
 	}