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  }