volume_routes.go 2.5 KB

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