Bläddra i källkod

Merge pull request #17517 from MHBauer/network-impl

create generic backend to cut dependency on daemon
Doug Davis 9 år sedan
förälder
incheckning
6d5e47a690

+ 23 - 0
api/server/router/network/backend.go

@@ -0,0 +1,23 @@
+package network
+
+import (
+	// TODO: network config needs to be refactored out to a
+	// different location
+	"github.com/docker/docker/daemon/network"
+
+	"github.com/docker/libnetwork"
+)
+
+// Backend is all the methods that need to be implemented to provide
+// network specific functionality
+type Backend interface {
+	FindNetwork(idName string) (libnetwork.Network, error)
+	GetNetwork(idName string, by int) (libnetwork.Network, error)
+	GetNetworksByID(partialID string) []libnetwork.Network
+	CreateNetwork(name, driver string, ipam network.IPAM,
+		options map[string]string) (libnetwork.Network, error)
+	ConnectContainerToNetwork(containerName, networkName string) error
+	DisconnectContainerFromNetwork(containerName string,
+		network libnetwork.Network) error
+	NetworkControllerEnabled() bool
+}

+ 5 - 6
api/server/router/network/network.go

@@ -6,21 +6,20 @@ import (
 	"github.com/docker/docker/api/server/httputils"
 	"github.com/docker/docker/api/server/httputils"
 	"github.com/docker/docker/api/server/router"
 	"github.com/docker/docker/api/server/router"
 	"github.com/docker/docker/api/server/router/local"
 	"github.com/docker/docker/api/server/router/local"
-	"github.com/docker/docker/daemon"
 	"github.com/docker/docker/errors"
 	"github.com/docker/docker/errors"
 	"golang.org/x/net/context"
 	"golang.org/x/net/context"
 )
 )
 
 
 // networkRouter is a router to talk with the network controller
 // networkRouter is a router to talk with the network controller
 type networkRouter struct {
 type networkRouter struct {
-	daemon *daemon.Daemon
-	routes []router.Route
+	backend Backend
+	routes  []router.Route
 }
 }
 
 
 // NewRouter initializes a new network router
 // NewRouter initializes a new network router
-func NewRouter(d *daemon.Daemon) router.Router {
+func NewRouter(b Backend) router.Router {
 	r := &networkRouter{
 	r := &networkRouter{
-		daemon: d,
+		backend: b,
 	}
 	}
 	r.initRoutes()
 	r.initRoutes()
 	return r
 	return r
@@ -46,7 +45,7 @@ func (r *networkRouter) initRoutes() {
 }
 }
 
 
 func (r *networkRouter) controllerEnabledMiddleware(handler httputils.APIFunc) httputils.APIFunc {
 func (r *networkRouter) controllerEnabledMiddleware(handler httputils.APIFunc) httputils.APIFunc {
-	if r.daemon.NetworkControllerEnabled() {
+	if r.backend.NetworkControllerEnabled() {
 		return handler
 		return handler
 	}
 	}
 	return networkControllerDisabled
 	return networkControllerDisabled

+ 11 - 11
api/server/router/network/network_routes.go

@@ -33,7 +33,7 @@ func (n *networkRouter) getNetworksList(ctx context.Context, w http.ResponseWrit
 	var names, ids []string
 	var names, ids []string
 	if names, nameFilter = netFilters["name"]; nameFilter {
 	if names, nameFilter = netFilters["name"]; nameFilter {
 		for _, name := range names {
 		for _, name := range names {
-			if nw, err := n.daemon.GetNetwork(name, daemon.NetworkByName); err == nil {
+			if nw, err := n.backend.GetNetwork(name, daemon.NetworkByName); err == nil {
 				list = append(list, buildNetworkResource(nw))
 				list = append(list, buildNetworkResource(nw))
 			} else {
 			} else {
 				logrus.Errorf("failed to get network for filter=%s : %v", name, err)
 				logrus.Errorf("failed to get network for filter=%s : %v", name, err)
@@ -43,14 +43,14 @@ func (n *networkRouter) getNetworksList(ctx context.Context, w http.ResponseWrit
 
 
 	if ids, idFilter = netFilters["id"]; idFilter {
 	if ids, idFilter = netFilters["id"]; idFilter {
 		for _, id := range ids {
 		for _, id := range ids {
-			for _, nw := range n.daemon.GetNetworksByID(id) {
+			for _, nw := range n.backend.GetNetworksByID(id) {
 				list = append(list, buildNetworkResource(nw))
 				list = append(list, buildNetworkResource(nw))
 			}
 			}
 		}
 		}
 	}
 	}
 
 
 	if !nameFilter && !idFilter {
 	if !nameFilter && !idFilter {
-		nwList := n.daemon.GetNetworksByID("")
+		nwList := n.backend.GetNetworksByID("")
 		for _, nw := range nwList {
 		for _, nw := range nwList {
 			list = append(list, buildNetworkResource(nw))
 			list = append(list, buildNetworkResource(nw))
 		}
 		}
@@ -63,7 +63,7 @@ func (n *networkRouter) getNetwork(ctx context.Context, w http.ResponseWriter, r
 		return err
 		return err
 	}
 	}
 
 
-	nw, err := n.daemon.FindNetwork(vars["id"])
+	nw, err := n.backend.FindNetwork(vars["id"])
 	if err != nil {
 	if err != nil {
 		return err
 		return err
 	}
 	}
@@ -91,7 +91,7 @@ func (n *networkRouter) postNetworkCreate(ctx context.Context, w http.ResponseWr
 			fmt.Sprintf("%s is a pre-defined network and cannot be created", create.Name))
 			fmt.Sprintf("%s is a pre-defined network and cannot be created", create.Name))
 	}
 	}
 
 
-	nw, err := n.daemon.GetNetwork(create.Name, daemon.NetworkByName)
+	nw, err := n.backend.GetNetwork(create.Name, daemon.NetworkByName)
 	if _, ok := err.(libnetwork.ErrNoSuchNetwork); err != nil && !ok {
 	if _, ok := err.(libnetwork.ErrNoSuchNetwork); err != nil && !ok {
 		return err
 		return err
 	}
 	}
@@ -102,7 +102,7 @@ func (n *networkRouter) postNetworkCreate(ctx context.Context, w http.ResponseWr
 		warning = fmt.Sprintf("Network with name %s (id : %s) already exists", nw.Name(), nw.ID())
 		warning = fmt.Sprintf("Network with name %s (id : %s) already exists", nw.Name(), nw.ID())
 	}
 	}
 
 
-	nw, err = n.daemon.CreateNetwork(create.Name, create.Driver, create.IPAM, create.Options)
+	nw, err = n.backend.CreateNetwork(create.Name, create.Driver, create.IPAM, create.Options)
 	if err != nil {
 	if err != nil {
 		return err
 		return err
 	}
 	}
@@ -127,12 +127,12 @@ func (n *networkRouter) postNetworkConnect(ctx context.Context, w http.ResponseW
 		return err
 		return err
 	}
 	}
 
 
-	nw, err := n.daemon.FindNetwork(vars["id"])
+	nw, err := n.backend.FindNetwork(vars["id"])
 	if err != nil {
 	if err != nil {
 		return err
 		return err
 	}
 	}
 
 
-	return n.daemon.ConnectContainerToNetwork(connect.Container, nw.Name())
+	return n.backend.ConnectContainerToNetwork(connect.Container, nw.Name())
 }
 }
 
 
 func (n *networkRouter) postNetworkDisconnect(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
 func (n *networkRouter) postNetworkDisconnect(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
@@ -149,12 +149,12 @@ func (n *networkRouter) postNetworkDisconnect(ctx context.Context, w http.Respon
 		return err
 		return err
 	}
 	}
 
 
-	nw, err := n.daemon.FindNetwork(vars["id"])
+	nw, err := n.backend.FindNetwork(vars["id"])
 	if err != nil {
 	if err != nil {
 		return err
 		return err
 	}
 	}
 
 
-	return n.daemon.DisconnectContainerFromNetwork(disconnect.Container, nw)
+	return n.backend.DisconnectContainerFromNetwork(disconnect.Container, nw)
 }
 }
 
 
 func (n *networkRouter) deleteNetwork(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
 func (n *networkRouter) deleteNetwork(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
@@ -162,7 +162,7 @@ func (n *networkRouter) deleteNetwork(ctx context.Context, w http.ResponseWriter
 		return err
 		return err
 	}
 	}
 
 
-	nw, err := n.daemon.FindNetwork(vars["id"])
+	nw, err := n.backend.FindNetwork(vars["id"])
 	if err != nil {
 	if err != nil {
 		return err
 		return err
 	}
 	}