func (c *Control) volumeCreate(w http.ResponseWriter, req *http.Request) { const reqMaxSize = 4096 buf, err := ioutil.ReadAll(http.MaxBytesReader(w, req.Body, reqMaxSize)) if err != nil { // they really should export that error if err.Error() == "http: request body too large" { http.Error(w, err.Error(), http.StatusRequestEntityTooLarge) return } http.Error(w, err.Error(), http.StatusInternalServerError) return } var msg wire.VolumeCreateRequest err = msg.Unmarshal(buf) if err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return } err = fs.Create(c.app.DB, msg.VolumeName) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } }
func (cmd *createCommand) Run() error { req := wire.VolumeCreateRequest{ VolumeName: cmd.Arguments.VolumeName, } buf, err := req.Marshal() if err != nil { return err } resp, err := clibazil.Bazil.Control.Post( "http+unix://bazil/control/volumeCreate", "binary/x.bazil.control.volumeCreateRequest", bytes.NewReader(buf), ) if err != nil { return err } defer resp.Body.Close() if resp.StatusCode != http.StatusOK { buf, _ := ioutil.ReadAll(resp.Body) if len(buf) == 0 { buf = []byte(resp.Status) } return errors.New(string(buf)) } return nil }