func (vd *volApi) volumeSet(w http.ResponseWriter, r *http.Request) { var ( volumeID string err error req api.VolumeSetRequest resp api.VolumeSetResponse ) method := "volumeSet" err = json.NewDecoder(r.Body).Decode(&req) if err != nil { vd.sendError(vd.name, method, w, err.Error(), http.StatusBadRequest) return } if volumeID, err = vd.parseVolumeID(r); err != nil { vd.sendError(vd.name, method, w, err.Error(), http.StatusBadRequest) return } vd.logRequest(method, string(volumeID)).Infoln("") d, err := volume.Get(vd.name) if err != nil { notFound(w, r) return } if req.Locator != nil || req.Spec != nil { err = d.Set(volumeID, req.Locator, req.Spec) } for err == nil && req.Action != nil { if req.Action.Attach != api.VolumeActionParam_VOLUME_ACTION_PARAM_NONE { if req.Action.Attach == api.VolumeActionParam_VOLUME_ACTION_PARAM_ON { _, err = d.Attach(volumeID) } else { err = d.Detach(volumeID) } if err != nil { break } } if req.Action.Mount != api.VolumeActionParam_VOLUME_ACTION_PARAM_NONE { if req.Action.Mount == api.VolumeActionParam_VOLUME_ACTION_PARAM_ON { if req.Action.MountPath == "" { err = fmt.Errorf("Invalid mount path") break } err = d.Mount(volumeID, req.Action.MountPath) } else { err = d.Unmount(volumeID, req.Action.MountPath) } if err != nil { break } } break } if err != nil { resp.VolumeResponse = &api.VolumeResponse{ Error: err.Error(), } } else { v, err := d.Inspect([]string{volumeID}) if err != nil || v == nil || len(v) != 1 { if err == nil { err = fmt.Errorf("Failed to inspect volume") } resp.VolumeResponse = &api.VolumeResponse{ Error: err.Error(), } } else { v0 := v[0] resp.Volume = v0 } } json.NewEncoder(w).Encode(resp) }
func (vd *volApi) volumeSet(w http.ResponseWriter, r *http.Request) { var ( volumeID api.VolumeID err error req api.VolumeSetRequest resp api.VolumeSetResponse ) method := "volumeSet" err = json.NewDecoder(r.Body).Decode(&req) if err != nil { vd.sendError(vd.name, method, w, err.Error(), http.StatusBadRequest) return } if volumeID, err = vd.parseVolumeID(r); err != nil { vd.sendError(vd.name, method, w, err.Error(), http.StatusBadRequest) return } d, err := volume.Get(vd.name) if err != nil { notFound(w, r) return } if req.Locator != nil || req.Spec != nil { err = d.Set(volumeID, req.Locator, req.Spec) } for err == nil && req.Action != nil { if req.Action.Attach != api.ParamIgnore { if req.Action.Attach == api.ParamOn { _, err = d.Attach(volumeID) } else { err = d.Detach(volumeID) } if err != nil { break } } if req.Action.Mount != api.ParamIgnore { if req.Action.Mount == api.ParamOn { if req.Action.MountPath == "" { err = fmt.Errorf("Invalid mount path") break } err = d.Mount(volumeID, req.Action.MountPath) } else { err = d.Unmount(volumeID, req.Action.MountPath) } if err != nil { break } } break } if err != nil { resp.VolumeResponse.Error = err.Error() } else { v, err := d.Inspect([]api.VolumeID{volumeID}) if err != nil || v == nil || len(v) != 1 { if err == nil { err = fmt.Errorf("Failed to inspect volume") } resp.VolumeResponse.Error = err.Error() } else { resp.Volume = v[0] } } json.NewEncoder(w).Encode(resp) }