From f4106b46db47524b4f38abeee48137d42e3fe4eb Mon Sep 17 00:00:00 2001 From: Vincent Demeester Date: Fri, 20 Apr 2018 11:06:40 +0200 Subject: [PATCH] Remove daemon dependency on api packages We are using interface in the api routers to not explicitely depend on the daemon struct (`daemon.Daemon`), but somehow, we do depend on the `daemon` package for the cluster functionalities. This removes this dependency by defining the correct interfaces. Signed-off-by: Vincent Demeester --- api/server/router/network/backend.go | 10 ++++++++++ api/server/router/network/network.go | 5 ++--- api/server/router/system/backend.go | 7 +++++++ api/server/router/system/system.go | 5 ++--- 4 files changed, 21 insertions(+), 6 deletions(-) diff --git a/api/server/router/network/backend.go b/api/server/router/network/backend.go index e9ae363de7..fa93b9ee0a 100644 --- a/api/server/router/network/backend.go +++ b/api/server/router/network/backend.go @@ -20,3 +20,13 @@ type Backend interface { DeleteNetwork(networkID string) error NetworksPrune(ctx context.Context, pruneFilters filters.Args) (*types.NetworksPruneReport, error) } + +// ClusterBackend is all the methods that need to be implemented +// to provide cluster network specific functionality. +type ClusterBackend interface { + GetNetworks() ([]types.NetworkResource, error) + GetNetwork(name string) (types.NetworkResource, error) + GetNetworksByName(name string) ([]types.NetworkResource, error) + CreateNetwork(nc types.NetworkCreateRequest) (string, error) + RemoveNetwork(name string) error +} diff --git a/api/server/router/network/network.go b/api/server/router/network/network.go index 85f0e0a8ba..4eee970793 100644 --- a/api/server/router/network/network.go +++ b/api/server/router/network/network.go @@ -2,18 +2,17 @@ package network // import "github.com/docker/docker/api/server/router/network" import ( "github.com/docker/docker/api/server/router" - "github.com/docker/docker/daemon/cluster" ) // networkRouter is a router to talk with the network controller type networkRouter struct { backend Backend - cluster *cluster.Cluster + cluster ClusterBackend routes []router.Route } // NewRouter initializes a new network router -func NewRouter(b Backend, c *cluster.Cluster) router.Router { +func NewRouter(b Backend, c ClusterBackend) router.Router { r := &networkRouter{ backend: b, cluster: c, diff --git a/api/server/router/system/backend.go b/api/server/router/system/backend.go index f083a74d53..cc2435884d 100644 --- a/api/server/router/system/backend.go +++ b/api/server/router/system/backend.go @@ -6,6 +6,7 @@ import ( "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/events" "github.com/docker/docker/api/types/filters" + "github.com/docker/docker/api/types/swarm" "golang.org/x/net/context" ) @@ -19,3 +20,9 @@ type Backend interface { UnsubscribeFromEvents(chan interface{}) AuthenticateToRegistry(ctx context.Context, authConfig *types.AuthConfig) (string, string, error) } + +// ClusterBackend is all the methods that need to be implemented +// to provide cluster system specific functionality. +type ClusterBackend interface { + Info() swarm.Info +} diff --git a/api/server/router/system/system.go b/api/server/router/system/system.go index e20bb34248..ebb840a899 100644 --- a/api/server/router/system/system.go +++ b/api/server/router/system/system.go @@ -3,20 +3,19 @@ package system // import "github.com/docker/docker/api/server/router/system" import ( "github.com/docker/docker/api/server/router" "github.com/docker/docker/builder/fscache" - "github.com/docker/docker/daemon/cluster" ) // systemRouter provides information about the Docker system overall. // It gathers information about host, daemon and container events. type systemRouter struct { backend Backend - cluster *cluster.Cluster + cluster ClusterBackend routes []router.Route builder *fscache.FSCache } // NewRouter initializes a new system router -func NewRouter(b Backend, c *cluster.Cluster, fscache *fscache.FSCache) router.Router { +func NewRouter(b Backend, c ClusterBackend, fscache *fscache.FSCache) router.Router { r := &systemRouter{ backend: b, cluster: c,