api/controller/vm_export.go
Rama main · réplica de lectura del repositorio original.
package controller
import (
"encoding/json"
"net/http"
"github.com/go-chi/chi"
"github.com/goodrain/rainbond/api/handler"
ctxutil "github.com/goodrain/rainbond/api/util/ctx"
httputil "github.com/goodrain/rainbond/util/http"
)
type VMExportController struct {
createExport func(serviceID string, req *handler.VMExportRequest) (*handler.VMExportStatus, error)
getExport func(serviceID, exportName string) (*handler.VMExportStatus, error)
}
var defaultVMExportController = &VMExportController{}
func GetVMExportController() *VMExportController {
return defaultVMExportController
}
func (c *VMExportController) CreateVMExport(w http.ResponseWriter, r *http.Request) {
serviceID := r.Context().Value(ctxutil.ContextKey("service_id")).(string)
var reqBody handler.VMExportRequest
if err := json.NewDecoder(r.Body).Decode(&reqBody); err != nil {
httputil.ReturnError(r, w, http.StatusBadRequest, "invalid request body")
return
}
if reqBody.Name == "" {
httputil.ReturnError(r, w, http.StatusBadRequest, "export name is required")
return
}
createExport := c.createExport
if createExport == nil {
createExport = handler.GetServiceManager().CreateVMExport
}
status, err := createExport(serviceID, &reqBody)
if err != nil {
httputil.ReturnError(r, w, http.StatusInternalServerError, err.Error())
return
}
httputil.ReturnSuccess(r, w, status)
}
func (c *VMExportController) GetVMExport(w http.ResponseWriter, r *http.Request) {
serviceID := r.Context().Value(ctxutil.ContextKey("service_id")).(string)
exportName := chi.URLParam(r, "name")
if exportName == "" {
httputil.ReturnError(r, w, http.StatusBadRequest, "export name is required")
return
}
getExport := c.getExport
if getExport == nil {
getExport = handler.GetServiceManager().GetVMExport
}
status, err := getExport(serviceID, exportName)
if err != nil {
httputil.ReturnError(r, w, http.StatusInternalServerError, err.Error())
return
}
httputil.ReturnSuccess(r, w, status)
}
func (t *TenantStruct) CreateVMExport(w http.ResponseWriter, r *http.Request) {
GetVMExportController().CreateVMExport(w, r)
}
func (t *TenantStruct) GetVMExport(w http.ResponseWriter, r *http.Request) {
GetVMExportController().GetVMExport(w, r)
}