package controller
import (
"errors"
"fmt"
"github.com/goodrain/rainbond/api/handler"
api_model "github.com/goodrain/rainbond/api/model"
httputil "github.com/goodrain/rainbond/util/http"
"net/http"
)
type HelmStruct struct {
}
func (t *HelmStruct) CheckHelmApp(w http.ResponseWriter, r *http.Request) {
var checkHelmApp api_model.CheckHelmApp
if ok := httputil.ValidatorRequestStructAndErrorResponse(r, w, &checkHelmApp, nil); !ok {
return
}
data := map[string]string{"checkAdopt": "true"}
err := handler.GetHelmManager().AddHelmRepo(checkHelmApp)
if err != nil && !errors.Is(err, fmt.Errorf("repository templateName (%s) already exists, please specify a different templateName", checkHelmApp.RepoName)) {
httputil.ReturnBcodeError(r, w, err)
return
}
err = handler.GetHelmManager().UpdateHelmRepo(checkHelmApp.RepoName)
if err != nil {
data["checkAdopt"] = "false"
data["yaml"] = err.Error()
} else {
yaml, err := handler.GetHelmManager().CheckHelmApp(checkHelmApp)
data["yaml"] = yaml
if err != nil {
data["checkAdopt"] = "false"
data["yaml"] = err.Error()
}
}
httputil.ReturnSuccess(r, w, data)
}
func (t *HelmStruct) GetChartInformation(w http.ResponseWriter, r *http.Request) {
var chart api_model.ChartInformation
if ok := httputil.ValidatorRequestStructAndErrorResponse(r, w, &chart, nil); !ok {
return
}
chartVersion, err := handler.GetHelmManager().GetChartInformation(chart)
if err != nil {
httputil.ReturnBcodeError(r, w, err)
return
}
httputil.ReturnSuccess(r, w, chartVersion)
}
func (t *HelmStruct) GetYamlByChart(w http.ResponseWriter, r *http.Request) {
var yc api_model.GetYamlByChart
if ok := httputil.ValidatorRequestStructAndErrorResponse(r, w, &yc, nil); !ok {
return
}
data := map[string]string{"checkAdopt": "true"}
if yc.EventID == "" {
httputil.ReturnError(r, w, 400, "Failed to parse eventID.")
return
}
chartPath := fmt.Sprintf("%s/import/%s/%s", handler.GetAppHandler().GetStaticDir(), yc.EventID, yc.FileName)
yaml, err := handler.GetHelmManager().GetYamlByChart(chartPath, yc.Namespace, yc.Name, yc.Version, []string{})
if err != nil {
data["checkAdopt"] = "false"
data["yaml"] = err.Error()
}
data["yaml"] = yaml
httputil.ReturnSuccess(r, w, data)
}
func (t *HelmStruct) GetUploadChartInformation(w http.ResponseWriter, r *http.Request) {
eventID := r.FormValue("event_id")
data, err := handler.GetHelmManager().GetUploadChartInformation(eventID)
if err != nil {
httputil.ReturnBcodeError(r, w, err)
return
}
httputil.ReturnSuccess(r, w, data)
}
func (t *HelmStruct) CheckUploadChart(w http.ResponseWriter, r *http.Request) {
var cuc api_model.UploadChart
if ok := httputil.ValidatorRequestStructAndErrorResponse(r, w, &cuc, nil); !ok {
return
}
data := map[string]string{"checkAdopt": "true"}
err := handler.GetHelmManager().CheckUploadChart(cuc.Name, cuc.Version, cuc.Namespace, cuc.EventID)
if err != nil {
data["checkAdopt"] = "false"
data["yaml"] = err.Error()
}
httputil.ReturnSuccess(r, w, data)
}
func (t *HelmStruct) GetUploadChartValue(w http.ResponseWriter, r *http.Request) {
eventID := r.FormValue("event_id")
valueYaml, err := handler.GetHelmManager().GetUploadChartValue(eventID)
if err != nil {
httputil.ReturnBcodeError(r, w, err)
return
}
httputil.ReturnSuccess(r, w, valueYaml)
}
func (t *HelmStruct) GetUploadChartResource(w http.ResponseWriter, r *http.Request) {
var cuc api_model.UploadChart
if ok := httputil.ValidatorRequestStructAndErrorResponse(r, w, &cuc, nil); !ok {
return
}
chartResources, err := handler.GetHelmManager().GetUploadChartResource(cuc.Name, cuc.Version, cuc.Namespace, cuc.EventID, cuc.Overrides)
if err != nil {
httputil.ReturnBcodeError(r, w, err)
return
}
httputil.ReturnSuccess(r, w, chartResources)
}
func (t *HelmStruct) ImportUploadChartResource(w http.ResponseWriter, r *http.Request) {
var uci api_model.UploadChartImport
if ok := httputil.ValidatorRequestStructAndErrorResponse(r, w, &uci, nil); !ok {
return
}
ac, err := handler.GetClusterHandler().AppYamlResourceImport(uci.Namespace, uci.TenantID, uci.AppID, uci.AR)
if err != nil {
err.Handle(r, w)
return
}
httputil.ReturnSuccess(r, w, ac)
}