package cli import ( "encoding/json" "errors" "fmt" "log" "net/http" ) func (h *abraHandler) handleUpgradeApp(w http.ResponseWriter, r *http.Request, appName string, force bool) { log.Printf("Handling App Upgrade!") args := []string{"app", "upgrade", appName, "-n", "-c"} if force { args = append(args, "-f") } output, err := h.cmd.Run("abra", args...) if err != nil { InternalServerError(w, errors.New(fmt.Sprintf("Error: %s", string(output)))) return } log.Printf("Finishing app upgrade!") w.WriteHeader(http.StatusOK) } func (h *abraHandler) handleRollbackApp(w http.ResponseWriter, r *http.Request, appName string, force bool) { log.Printf("Handling App rollback!") d := json.NewDecoder(r.Body) d.DisallowUnknownFields() body := struct { Version *string `json:"version"` }{} err := d.Decode(&body) if err != nil { log.Printf("error: %v", err) BadRequest(w, err) return } if body.Version == nil { BadRequest(w, fmt.Errorf("Error: no version for rollback")) return } args := []string{"app", "rollback", appName, "-n", "-c"} if force { args = append(args, "-f") } if body.Version != nil { if *body.Version == "Auto" { log.Printf("leaving abra to determine rollback version") } else { args = append(args, *body.Version) } } output, err := h.cmd.Run("abra", args...) if err != nil { InternalServerError(w, fmt.Errorf("Error: %s", string(output))) return } log.Printf("Finishing app rollback!") w.WriteHeader(http.StatusOK) }