コード例 #1
0
ファイル: rest.go プロジェクト: virtbsd/virtd
func StartHandler(w http.ResponseWriter, req *http.Request) {
	var myjail *jail.Jail
	myjail = nil

	vars := mux.Vars(req)

	if _, ok := vars["uuid"]; ok {
		myjail = jail.GetJail(db, map[string]interface{}{"uuid": vars["uuid"]})
	}

	if myjail == nil {
		w.WriteHeader(http.StatusNotFound)
		return
	}

	w.Header().Add("Content-Type", "application/json")

	status := ActionStatus{}
	if err := myjail.PrepareHostNetworking(); err == nil {
		if err = myjail.Start(); err == nil {
			if err = myjail.PrepareGuestNetworking(); err != nil {
				w.WriteHeader(http.StatusInternalServerError)
				status.Result = "Error"
				status.ErrorMessage = err.Error()
			} else {
				if err = myjail.PostStart(); err != nil {
					w.WriteHeader(http.StatusInternalServerError)
					status.Result = "Error"
					status.ErrorMessage = err.Error()
				}
			}
		} else {
			w.WriteHeader(http.StatusInternalServerError)
			status.Result = "Error"
			status.ErrorMessage = err.Error()
		}
	} else {
		w.WriteHeader(http.StatusInternalServerError)
		status.Result = "Error"
		status.ErrorMessage = err.Error()
	}

	if len(status.Result) == 0 {
		status.Result = "Okay"
		w.WriteHeader(http.StatusOK)
	}

	if bytes, err := json.Marshal(&status); err == nil {
		w.Write(bytes)
	} else {
		fmt.Printf("Could not marshal status object: %s\n", err.Error())
	}
}