From 9862a4b43ec6236305f6b57274c6edd61dad96b7 Mon Sep 17 00:00:00 2001 From: Dong Chen Date: Tue, 27 Oct 2015 12:06:35 -0700 Subject: [PATCH] extract docker volume API from local Signed-off-by: Dong Chen --- api/server/router/local/local.go | 4 -- api/server/router/volume/volume.go | 39 +++++++++++++++++++ .../volume.go => volume/volume_routes.go} | 20 +++++----- api/server/server.go | 2 + 4 files changed, 51 insertions(+), 14 deletions(-) create mode 100644 api/server/router/volume/volume.go rename api/server/router/{local/volume.go => volume/volume_routes.go} (53%) diff --git a/api/server/router/local/local.go b/api/server/router/local/local.go index c73e852a22..b27031bd24 100644 --- a/api/server/router/local/local.go +++ b/api/server/router/local/local.go @@ -116,8 +116,6 @@ func (r *router) initRoutes() { NewGetRoute("/containers/{name:.*}/attach/ws", r.wsContainersAttach), NewGetRoute("/exec/{id:.*}/json", r.getExecByID), NewGetRoute("/containers/{name:.*}/archive", r.getContainersArchive), - NewGetRoute("/volumes", r.getVolumesList), - NewGetRoute("/volumes/{name:.*}", r.getVolumeByName), // POST NewPostRoute("/auth", r.postAuth), NewPostRoute("/commit", r.postCommit), @@ -141,13 +139,11 @@ func (r *router) initRoutes() { NewPostRoute("/exec/{name:.*}/start", r.postContainerExecStart), NewPostRoute("/exec/{name:.*}/resize", r.postContainerExecResize), NewPostRoute("/containers/{name:.*}/rename", r.postContainerRename), - NewPostRoute("/volumes/create", r.postVolumesCreate), // PUT NewPutRoute("/containers/{name:.*}/archive", r.putContainersArchive), // DELETE NewDeleteRoute("/containers/{name:.*}", r.deleteContainers), NewDeleteRoute("/images/{name:.*}", r.deleteImages), - NewDeleteRoute("/volumes/{name:.*}", r.deleteVolumes), } } diff --git a/api/server/router/volume/volume.go b/api/server/router/volume/volume.go new file mode 100644 index 0000000000..ca1ea0e8ad --- /dev/null +++ b/api/server/router/volume/volume.go @@ -0,0 +1,39 @@ +package volume + +import ( + "github.com/docker/docker/api/server/router" + "github.com/docker/docker/api/server/router/local" + "github.com/docker/docker/daemon" +) + +// volumesRouter is a router to talk with the volumes controller +type volumeRouter struct { + daemon *daemon.Daemon + routes []router.Route +} + +// NewRouter initializes a new volumes router +func NewRouter(d *daemon.Daemon) router.Router { + r := &volumeRouter{ + daemon: d, + } + r.initRoutes() + return r +} + +//Routes returns the available routers to the volumes controller +func (r *volumeRouter) Routes() []router.Route { + return r.routes +} + +func (r *volumeRouter) initRoutes() { + r.routes = []router.Route{ + // GET + local.NewGetRoute("/volumes", r.getVolumesList), + local.NewGetRoute("/volumes/{name:.*}", r.getVolumeByName), + // POST + local.NewPostRoute("/volumes/create", r.postVolumesCreate), + // DELETE + local.NewDeleteRoute("/volumes/{name:.*}", r.deleteVolumes), + } +} diff --git a/api/server/router/local/volume.go b/api/server/router/volume/volume_routes.go similarity index 53% rename from api/server/router/local/volume.go rename to api/server/router/volume/volume_routes.go index 614bec7448..021b3fa5ca 100644 --- a/api/server/router/local/volume.go +++ b/api/server/router/volume/volume_routes.go @@ -1,4 +1,4 @@ -package local +package volume import ( "encoding/json" @@ -9,31 +9,31 @@ import ( "golang.org/x/net/context" ) -func (s *router) getVolumesList(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error { +func (v *volumeRouter) getVolumesList(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error { if err := httputils.ParseForm(r); err != nil { return err } - volumes, err := s.daemon.Volumes(r.Form.Get("filters")) + volumes, err := v.daemon.Volumes(r.Form.Get("filters")) if err != nil { return err } return httputils.WriteJSON(w, http.StatusOK, &types.VolumesListResponse{Volumes: volumes}) } -func (s *router) getVolumeByName(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error { +func (v *volumeRouter) getVolumeByName(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error { if err := httputils.ParseForm(r); err != nil { return err } - v, err := s.daemon.VolumeInspect(vars["name"]) + volume, err := v.daemon.VolumeInspect(vars["name"]) if err != nil { return err } - return httputils.WriteJSON(w, http.StatusOK, v) + return httputils.WriteJSON(w, http.StatusOK, volume) } -func (s *router) postVolumesCreate(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error { +func (v *volumeRouter) postVolumesCreate(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error { if err := httputils.ParseForm(r); err != nil { return err } @@ -47,18 +47,18 @@ func (s *router) postVolumesCreate(ctx context.Context, w http.ResponseWriter, r return err } - volume, err := s.daemon.VolumeCreate(req.Name, req.Driver, req.DriverOpts) + volume, err := v.daemon.VolumeCreate(req.Name, req.Driver, req.DriverOpts) if err != nil { return err } return httputils.WriteJSON(w, http.StatusCreated, volume) } -func (s *router) deleteVolumes(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error { +func (v *volumeRouter) deleteVolumes(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error { if err := httputils.ParseForm(r); err != nil { return err } - if err := s.daemon.VolumeRm(vars["name"]); err != nil { + if err := v.daemon.VolumeRm(vars["name"]); err != nil { return err } w.WriteHeader(http.StatusNoContent) diff --git a/api/server/server.go b/api/server/server.go index 7c9262c5be..b90d704c36 100644 --- a/api/server/server.go +++ b/api/server/server.go @@ -12,6 +12,7 @@ import ( "github.com/docker/docker/api/server/router" "github.com/docker/docker/api/server/router/local" "github.com/docker/docker/api/server/router/network" + "github.com/docker/docker/api/server/router/volume" "github.com/docker/docker/daemon" "github.com/docker/docker/pkg/sockets" "github.com/docker/docker/utils" @@ -170,6 +171,7 @@ func (s *Server) makeHTTPHandler(handler httputils.APIFunc) http.HandlerFunc { func (s *Server) InitRouters(d *daemon.Daemon) { s.addRouter(local.NewRouter(d)) s.addRouter(network.NewRouter(d)) + s.addRouter(volume.NewRouter(d)) for _, srv := range s.servers { srv.srv.Handler = s.CreateMux()