github.com/kaisenlinux/docker.io@v0.0.0-20230510090727-ea55db55fac7/engine/api/server/router/volume/volume_routes.go (about) 1 package volume // import "github.com/docker/docker/api/server/router/volume" 2 3 import ( 4 "context" 5 "encoding/json" 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 "github.com/docker/docker/volume/service/opts" 14 "github.com/pkg/errors" 15 ) 16 17 func (v *volumeRouter) getVolumesList(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error { 18 if err := httputils.ParseForm(r); err != nil { 19 return err 20 } 21 22 filters, err := filters.FromJSON(r.Form.Get("filters")) 23 if err != nil { 24 return errdefs.InvalidParameter(errors.Wrap(err, "error reading volume filters")) 25 } 26 volumes, warnings, err := v.backend.List(ctx, filters) 27 if err != nil { 28 return err 29 } 30 return httputils.WriteJSON(w, http.StatusOK, &volumetypes.VolumeListOKBody{Volumes: volumes, Warnings: warnings}) 31 } 32 33 func (v *volumeRouter) getVolumeByName(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error { 34 if err := httputils.ParseForm(r); err != nil { 35 return err 36 } 37 38 volume, err := v.backend.Get(ctx, vars["name"], opts.WithGetResolveStatus) 39 if err != nil { 40 return err 41 } 42 return httputils.WriteJSON(w, http.StatusOK, volume) 43 } 44 45 func (v *volumeRouter) postVolumesCreate(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error { 46 if err := httputils.ParseForm(r); err != nil { 47 return err 48 } 49 50 if err := httputils.CheckForJSON(r); err != nil { 51 return err 52 } 53 54 var req volumetypes.VolumeCreateBody 55 if err := json.NewDecoder(r.Body).Decode(&req); err != nil { 56 if err == io.EOF { 57 return errdefs.InvalidParameter(errors.New("got EOF while reading request body")) 58 } 59 return errdefs.InvalidParameter(err) 60 } 61 62 volume, err := v.backend.Create(ctx, req.Name, req.Driver, opts.WithCreateOptions(req.DriverOpts), opts.WithCreateLabels(req.Labels)) 63 if err != nil { 64 return err 65 } 66 return httputils.WriteJSON(w, http.StatusCreated, volume) 67 } 68 69 func (v *volumeRouter) deleteVolumes(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error { 70 if err := httputils.ParseForm(r); err != nil { 71 return err 72 } 73 force := httputils.BoolValue(r, "force") 74 if err := v.backend.Remove(ctx, vars["name"], opts.WithPurgeOnError(force)); err != nil { 75 return err 76 } 77 w.WriteHeader(http.StatusNoContent) 78 return nil 79 } 80 81 func (v *volumeRouter) postVolumesPrune(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error { 82 if err := httputils.ParseForm(r); err != nil { 83 return err 84 } 85 86 pruneFilters, err := filters.FromJSON(r.Form.Get("filters")) 87 if err != nil { 88 return err 89 } 90 91 pruneReport, err := v.backend.Prune(ctx, pruneFilters) 92 if err != nil { 93 return err 94 } 95 return httputils.WriteJSON(w, http.StatusOK, pruneReport) 96 }