瀏覽代碼

Merge pull request #719 from mrjana/bugs

Reconcile persistent state after driver config
Madhu Venugopal 9 年之前
父節點
當前提交
31e6967d80

+ 10 - 0
libnetwork/cmd/dnet/dnet.go

@@ -225,6 +225,16 @@ func (d *dnetConnection) dnetDaemon(cfgFile string) error {
 	if err == nil {
 		cOptions = processConfig(cfg)
 	}
+
+	bridgeConfig := options.Generic{
+		"EnableIPForwarding": true,
+		"EnableIPTables":     true,
+	}
+
+	bridgeOption := options.Generic{netlabel.GenericData: bridgeConfig}
+
+	cOptions = append(cOptions, config.OptionDriverConfig("bridge", bridgeOption))
+
 	controller, err := libnetwork.New(cOptions...)
 	if err != nil {
 		fmt.Println("Error starting dnetDaemon :", err)

+ 16 - 11
libnetwork/drivers/bridge/bridge.go

@@ -338,16 +338,11 @@ func (c *networkConfiguration) conflictsWithNetworks(id string, others []*bridge
 }
 
 func (d *driver) configure(option map[string]interface{}) error {
-	var config *configuration
-	var err error
-
-	err = d.initStore(option)
-	if err != nil {
-		return err
-	}
-
-	d.Lock()
-	defer d.Unlock()
+	var (
+		config                *configuration
+		err                   error
+		natChain, filterChain *iptables.ChainInfo
+	)
 
 	genericData, ok := option[netlabel.GenericData]
 	if !ok || genericData == nil {
@@ -375,13 +370,23 @@ func (d *driver) configure(option map[string]interface{}) error {
 	}
 
 	if config.EnableIPTables {
-		d.natChain, d.filterChain, err = setupIPChains(config)
+		natChain, filterChain, err = setupIPChains(config)
 		if err != nil {
 			return err
 		}
 	}
 
+	d.Lock()
+	d.natChain = natChain
+	d.filterChain = filterChain
 	d.config = config
+	d.Unlock()
+
+	err = d.initStore(option)
+	if err != nil {
+		return err
+	}
+
 	return nil
 }
 

+ 3 - 0
libnetwork/test/integration/dnet/bridge.bats

@@ -20,6 +20,8 @@ function test_single_network_connectivity() {
     # Now test connectivity between all the containers using service names
     for i in `seq ${start} ${end}`;
     do
+	runc $(dnet_container_name 1 bridge) $(get_sbox_id 1 container_${i}) \
+	     "ping -c 1 www.google.com"
 	for j in `seq ${start} ${end}`;
 	do
 	    if [ "$i" -eq "$j" ]; then
@@ -49,6 +51,7 @@ function test_single_network_connectivity() {
     test_single_network_connectivity bridge 3
 }
 
+
 @test "Test default network dnet restart" {
     skip_for_circleci
 

+ 11 - 4
libnetwork/test/integration/dnet/helpers.bash

@@ -168,7 +168,8 @@ EOF
 	   -v $(pwd)/${TMPC_ROOT}:/scratch \
 	   -v /usr/local/bin/runc:/usr/local/bin/runc \
 	   -w /go/src/github.com/docker/libnetwork \
-	   golang:1.4 ./cmd/dnet/dnet -d -D ${hopt} -c ${tomlfile}
+	   mrjana/golang ./cmd/dnet/dnet -d -D ${hopt} -c ${tomlfile}
+
     wait_for_dnet $(inst_id2port ${inst}) ${name}
 }
 
@@ -256,14 +257,16 @@ function stop_zookeeper() {
 
 function test_overlay() {
     dnet_suffix=$1
-    shift
 
     echo $(docker ps)
 
     start=1
     end=3
     # Setup overlay network and connect containers ot it
-    dnet_cmd $(inst_id2port 1) network create -d overlay multihost
+    if [ -z "${2}" -o "${2}" != "skip_add" ]; then
+	dnet_cmd $(inst_id2port 1) network create -d overlay multihost
+    fi
+
     for i in `seq ${start} ${end}`;
     do
 	dnet_cmd $(inst_id2port $i) container create container_${i}
@@ -273,6 +276,8 @@ function test_overlay() {
     # Now test connectivity between all the containers using service names
     for i in `seq ${start} ${end}`;
     do
+	runc $(dnet_container_name $i $dnet_suffix) $(get_sbox_id ${i} container_${i}) \
+	     "ping -c 1 www.google.com"
 	for j in `seq ${start} ${end}`;
 	do
 	    if [ "$i" -eq "$j" ]; then
@@ -290,7 +295,9 @@ function test_overlay() {
 	dnet_cmd $(inst_id2port $i) container rm container_${i}
     done
 
-    dnet_cmd $(inst_id2port 2) network rm multihost
+    if [ -z "${2}" -o "${2}" != "skip_rm" ]; then
+	dnet_cmd $(inst_id2port 2) network rm multihost
+    fi
 }
 
 function check_etchosts() {

+ 12 - 0
libnetwork/test/integration/dnet/overlay-consul.bats

@@ -17,3 +17,15 @@ load helpers
     skip_for_circleci
     test_overlay_etchosts consul
 }
+
+@test "Test overlay network with dnet restart" {
+    skip_for_circleci
+    test_overlay consul skip_rm
+    docker restart dnet-1-consul
+    wait_for_dnet $(inst_id2port 1) dnet-1-consul
+    docker restart dnet-2-consul
+    wait_for_dnet $(inst_id2port 2) dnet-2-consul
+    docker restart dnet-3-consul
+    wait_for_dnet $(inst_id2port 3) dnet-3-consul
+    test_overlay consul skip_add
+}