github.com/cookieai-jar/moby@v17.12.1-ce-rc2+incompatible/api/server/router/volume/volume_routes.go (about)

     1  package volume
     2  
     3  import (
     4  	"encoding/json"
     5  	"net/http"
     6  
     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  	"golang.org/x/net/context"
    11  )
    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  
    18  	volumes, warnings, err := v.backend.Volumes(r.Form.Get("filters"))
    19  	if err != nil {
    20  		return err
    21  	}
    22  	return httputils.WriteJSON(w, http.StatusOK, &volumetypes.VolumesListOKBody{Volumes: volumes, Warnings: warnings})
    23  }
    24  
    25  func (v *volumeRouter) getVolumeByName(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
    26  	if err := httputils.ParseForm(r); err != nil {
    27  		return err
    28  	}
    29  
    30  	volume, err := v.backend.VolumeInspect(vars["name"])
    31  	if err != nil {
    32  		return err
    33  	}
    34  	return httputils.WriteJSON(w, http.StatusOK, volume)
    35  }
    36  
    37  func (v *volumeRouter) postVolumesCreate(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
    38  	if err := httputils.ParseForm(r); err != nil {
    39  		return err
    40  	}
    41  
    42  	if err := httputils.CheckForJSON(r); err != nil {
    43  		return err
    44  	}
    45  
    46  	var req volumetypes.VolumesCreateBody
    47  	if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
    48  		return err
    49  	}
    50  
    51  	volume, err := v.backend.VolumeCreate(req.Name, req.Driver, req.DriverOpts, req.Labels)
    52  	if err != nil {
    53  		return err
    54  	}
    55  	return httputils.WriteJSON(w, http.StatusCreated, volume)
    56  }
    57  
    58  func (v *volumeRouter) deleteVolumes(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
    59  	if err := httputils.ParseForm(r); err != nil {
    60  		return err
    61  	}
    62  	force := httputils.BoolValue(r, "force")
    63  	if err := v.backend.VolumeRm(vars["name"], force); err != nil {
    64  		return err
    65  	}
    66  	w.WriteHeader(http.StatusNoContent)
    67  	return nil
    68  }
    69  
    70  func (v *volumeRouter) postVolumesPrune(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
    71  	if err := httputils.ParseForm(r); err != nil {
    72  		return err
    73  	}
    74  
    75  	pruneFilters, err := filters.FromJSON(r.Form.Get("filters"))
    76  	if err != nil {
    77  		return err
    78  	}
    79  
    80  	pruneReport, err := v.backend.VolumesPrune(ctx, pruneFilters)
    81  	if err != nil {
    82  		return err
    83  	}
    84  	return httputils.WriteJSON(w, http.StatusOK, pruneReport)
    85  }