1
0
Fork 0
mirror of https://github.com/moby/moby.git synced 2022-11-09 12:21:53 -05:00

create generic backend to cut dependency on daemon

- create a network-specific interface that for the methods of daemon
   that are used
 - remove dependency on daemon package

Signed-off-by: Morgan Bauer <mbauer@us.ibm.com>
This commit is contained in:
Morgan Bauer 2015-10-26 14:47:48 -07:00
parent beeec6d103
commit 5087977fc1
No known key found for this signature in database
GPG key ID: 23F15C502128F348
3 changed files with 39 additions and 17 deletions

View file

@ -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
}

View file

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

View file

@ -33,7 +33,7 @@ func (n *networkRouter) getNetworksList(ctx context.Context, w http.ResponseWrit
var names, ids []string
if names, nameFilter = netFilters["name"]; nameFilter {
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))
} else {
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 {
for _, id := range ids {
for _, nw := range n.daemon.GetNetworksByID(id) {
for _, nw := range n.backend.GetNetworksByID(id) {
list = append(list, buildNetworkResource(nw))
}
}
}
if !nameFilter && !idFilter {
nwList := n.daemon.GetNetworksByID("")
nwList := n.backend.GetNetworksByID("")
for _, nw := range nwList {
list = append(list, buildNetworkResource(nw))
}
@ -63,7 +63,7 @@ func (n *networkRouter) getNetwork(ctx context.Context, w http.ResponseWriter, r
return err
}
nw, err := n.daemon.FindNetwork(vars["id"])
nw, err := n.backend.FindNetwork(vars["id"])
if err != nil {
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))
}
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 {
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())
}
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 {
return err
}
@ -127,12 +127,12 @@ func (n *networkRouter) postNetworkConnect(ctx context.Context, w http.ResponseW
return err
}
nw, err := n.daemon.FindNetwork(vars["id"])
nw, err := n.backend.FindNetwork(vars["id"])
if err != nil {
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 {
@ -149,12 +149,12 @@ func (n *networkRouter) postNetworkDisconnect(ctx context.Context, w http.Respon
return err
}
nw, err := n.daemon.FindNetwork(vars["id"])
nw, err := n.backend.FindNetwork(vars["id"])
if err != nil {
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 {
@ -162,7 +162,7 @@ func (n *networkRouter) deleteNetwork(ctx context.Context, w http.ResponseWriter
return err
}
nw, err := n.daemon.FindNetwork(vars["id"])
nw, err := n.backend.FindNetwork(vars["id"])
if err != nil {
return err
}