github.com/rhatdan/docker@v0.7.7-0.20180119204836-47a0dcbcd20a/api/server/router/volume/volume_routes.go (about) 1 package volume 2 3 import ( 4 "encoding/json" 5 "errors" 6 "io" 7 "net/http" 8 9 "github.com/docker/docker/api/server/httputils" 10 "github.com/docker/docker/api/types/filters" 11 volumetypes "github.com/docker/docker/api/types/volume" 12 "github.com/docker/docker/errdefs" 13 "golang.org/x/net/context" 14 ) 15 16 func (v *volumeRouter) getVolumesList(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error { 17 if err := httputils.ParseForm(r); err != nil { 18 return err 19 } 20 21 volumes, warnings, err := v.backend.Volumes(r.Form.Get("filters")) 22 if err != nil { 23 return err 24 } 25 return httputils.WriteJSON(w, http.StatusOK, &volumetypes.VolumesListOKBody{Volumes: volumes, Warnings: warnings}) 26 } 27 28 func (v *volumeRouter) getVolumeByName(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error { 29 if err := httputils.ParseForm(r); err != nil { 30 return err 31 } 32 33 volume, err := v.backend.VolumeInspect(vars["name"]) 34 if err != nil { 35 return err 36 } 37 return httputils.WriteJSON(w, http.StatusOK, volume) 38 } 39 40 func (v *volumeRouter) postVolumesCreate(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error { 41 if err := httputils.ParseForm(r); err != nil { 42 return err 43 } 44 45 if err := httputils.CheckForJSON(r); err != nil { 46 return err 47 } 48 49 var req volumetypes.VolumesCreateBody 50 if err := json.NewDecoder(r.Body).Decode(&req); err != nil { 51 if err == io.EOF { 52 return errdefs.InvalidParameter(errors.New("got EOF while reading request body")) 53 } 54 return err 55 } 56 57 volume, err := v.backend.VolumeCreate(req.Name, req.Driver, req.DriverOpts, req.Labels) 58 if err != nil { 59 return err 60 } 61 return httputils.WriteJSON(w, http.StatusCreated, volume) 62 } 63 64 func (v *volumeRouter) deleteVolumes(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error { 65 if err := httputils.ParseForm(r); err != nil { 66 return err 67 } 68 force := httputils.BoolValue(r, "force") 69 if err := v.backend.VolumeRm(vars["name"], force); err != nil { 70 return err 71 } 72 w.WriteHeader(http.StatusNoContent) 73 return nil 74 } 75 76 func (v *volumeRouter) postVolumesPrune(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error { 77 if err := httputils.ParseForm(r); err != nil { 78 return err 79 } 80 81 pruneFilters, err := filters.FromJSON(r.Form.Get("filters")) 82 if err != nil { 83 return err 84 } 85 86 pruneReport, err := v.backend.VolumesPrune(ctx, pruneFilters) 87 if err != nil { 88 return err 89 } 90 return httputils.WriteJSON(w, http.StatusOK, pruneReport) 91 }