diff --git a/api/server/router/network/backend.go b/api/server/router/network/backend.go new file mode 100644 index 0000000000..8e069a4c60 --- /dev/null +++ b/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 +} diff --git a/api/server/router/network/network.go b/api/server/router/network/network.go index b301820f77..5fcb252c2b 100644 --- a/api/server/router/network/network.go +++ b/api/server/router/network/network.go @@ -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 diff --git a/api/server/router/network/network_routes.go b/api/server/router/network/network_routes.go index 28191ae412..0ef70c6f7f 100644 --- a/api/server/router/network/network_routes.go +++ b/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 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 }