Browse code

create generic backend to cut dependency on daemon

- create a volume-specific interface that for the methods of daemon
that are used
- remove dependency on daemon package by volume package of server
- like 5087977fc1a4279be55f25e0b8782c9cf9bc65f3

Signed-off-by: Morgan Bauer <mbauer@us.ibm.com>

Morgan Bauer authored on 2015/11/03 09:26:45
Showing 3 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,16 @@
0
+package volume
1
+
2
+import (
3
+	// TODO return types need to be refactored into pkg
4
+	"github.com/docker/docker/api/types"
5
+)
6
+
7
+// Backend is the methods that need to be implemented to provide
8
+// volume specific functionality
9
+type Backend interface {
10
+	Volumes(filter string) ([]*types.Volume, error)
11
+	VolumeInspect(name string) (*types.Volume, error)
12
+	VolumeCreate(name, driverName string,
13
+		opts map[string]string) (*types.Volume, error)
14
+	VolumeRm(name string) error
15
+}
... ...
@@ -3,19 +3,18 @@ package volume
3 3
 import (
4 4
 	"github.com/docker/docker/api/server/router"
5 5
 	"github.com/docker/docker/api/server/router/local"
6
-	"github.com/docker/docker/daemon"
7 6
 )
8 7
 
9 8
 // volumesRouter is a router to talk with the volumes controller
10 9
 type volumeRouter struct {
11
-	daemon *daemon.Daemon
12
-	routes []router.Route
10
+	backend Backend
11
+	routes  []router.Route
13 12
 }
14 13
 
15 14
 // NewRouter initializes a new volumes router
16
-func NewRouter(d *daemon.Daemon) router.Router {
15
+func NewRouter(b Backend) router.Router {
17 16
 	r := &volumeRouter{
18
-		daemon: d,
17
+		backend: b,
19 18
 	}
20 19
 	r.initRoutes()
21 20
 	return r
... ...
@@ -14,7 +14,7 @@ func (v *volumeRouter) getVolumesList(ctx context.Context, w http.ResponseWriter
14 14
 		return err
15 15
 	}
16 16
 
17
-	volumes, err := v.daemon.Volumes(r.Form.Get("filters"))
17
+	volumes, err := v.backend.Volumes(r.Form.Get("filters"))
18 18
 	if err != nil {
19 19
 		return err
20 20
 	}
... ...
@@ -26,7 +26,7 @@ func (v *volumeRouter) getVolumeByName(ctx context.Context, w http.ResponseWrite
26 26
 		return err
27 27
 	}
28 28
 
29
-	volume, err := v.daemon.VolumeInspect(vars["name"])
29
+	volume, err := v.backend.VolumeInspect(vars["name"])
30 30
 	if err != nil {
31 31
 		return err
32 32
 	}
... ...
@@ -47,7 +47,7 @@ func (v *volumeRouter) postVolumesCreate(ctx context.Context, w http.ResponseWri
47 47
 		return err
48 48
 	}
49 49
 
50
-	volume, err := v.daemon.VolumeCreate(req.Name, req.Driver, req.DriverOpts)
50
+	volume, err := v.backend.VolumeCreate(req.Name, req.Driver, req.DriverOpts)
51 51
 	if err != nil {
52 52
 		return err
53 53
 	}
... ...
@@ -58,7 +58,7 @@ func (v *volumeRouter) deleteVolumes(ctx context.Context, w http.ResponseWriter,
58 58
 	if err := httputils.ParseForm(r); err != nil {
59 59
 		return err
60 60
 	}
61
-	if err := v.daemon.VolumeRm(vars["name"]); err != nil {
61
+	if err := v.backend.VolumeRm(vars["name"]); err != nil {
62 62
 		return err
63 63
 	}
64 64
 	w.WriteHeader(http.StatusNoContent)