mirror of https://github.com/helm/helm
parent
4011268b8c
commit
b818548c1b
@ -0,0 +1,13 @@
|
|||||||
|
package upgrade
|
||||||
|
|
||||||
|
type UpgradeRequest struct {
|
||||||
|
RequestID string
|
||||||
|
ReleaseName string
|
||||||
|
ReleaseNamespace string
|
||||||
|
ChartPath string
|
||||||
|
}
|
||||||
|
|
||||||
|
type UpgradeResponse struct {
|
||||||
|
Status bool
|
||||||
|
ReleaseStatus string
|
||||||
|
}
|
@ -0,0 +1,105 @@
|
|||||||
|
package upgrade
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"helm.sh/helm/v3/cmd/endpoints/install"
|
||||||
|
"helm.sh/helm/v3/cmd/servercontext"
|
||||||
|
"helm.sh/helm/v3/pkg/action"
|
||||||
|
"helm.sh/helm/v3/pkg/chart/loader"
|
||||||
|
"helm.sh/helm/v3/pkg/cli/values"
|
||||||
|
"helm.sh/helm/v3/pkg/getter"
|
||||||
|
"helm.sh/helm/v3/pkg/storage/driver"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Handler() http.Handler {
|
||||||
|
return http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) {
|
||||||
|
res.Header().Set("Content-Type", "application/json")
|
||||||
|
defer req.Body.Close()
|
||||||
|
|
||||||
|
var request UpgradeRequest
|
||||||
|
decoder := json.NewDecoder(req.Body)
|
||||||
|
decoder.UseNumber()
|
||||||
|
|
||||||
|
if err := decoder.Decode(&request); err != nil {
|
||||||
|
fmt.Printf("error in request: %v", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
request.RequestID = req.Header.Get("Request-Id")
|
||||||
|
request.ReleaseName = req.Header.Get("Release-Name")
|
||||||
|
request.ReleaseNamespace = req.Header.Get("Release-Namespace")
|
||||||
|
request.ChartPath = req.Header.Get("Chart-Path")
|
||||||
|
valueOpts := &values.Options{}
|
||||||
|
|
||||||
|
status, releaseStatus, err := UpgradeRelease(request.ReleaseName, request.ReleaseNamespace, request.ChartPath, valueOpts)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("error in request: %v", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
response := UpgradeResponse{Status: status, ReleaseStatus: releaseStatus}
|
||||||
|
payload, err := json.Marshal(response)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("error parsing response %v", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
res.Write(payload)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func UpgradeRelease(releaseName, releaseNamespace, chartPath string, valueOpts *values.Options) (bool, string, error) {
|
||||||
|
upgrade := action.NewUpgrade(servercontext.App().ActionConfig)
|
||||||
|
upgrade.Namespace = releaseNamespace
|
||||||
|
|
||||||
|
vals, err := valueOpts.MergeValues(getter.All(servercontext.App().Config))
|
||||||
|
if err != nil {
|
||||||
|
return false, "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
chartPath, err = upgrade.ChartPathOptions.LocateChart(chartPath, servercontext.App().Config)
|
||||||
|
if err != nil {
|
||||||
|
return false, "", err
|
||||||
|
}
|
||||||
|
if upgrade.Install {
|
||||||
|
history := action.NewHistory(servercontext.App().ActionConfig)
|
||||||
|
history.Max = 1
|
||||||
|
if _, err := history.Run(releaseName); err == driver.ErrReleaseNotFound {
|
||||||
|
fmt.Printf("Release %q does not exist. Installing it now.\n", releaseName)
|
||||||
|
|
||||||
|
status, releaseStatus, err := install.InstallChart(releaseName, releaseNamespace, chartPath, valueOpts)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("error in request: %v", err)
|
||||||
|
return false, "", err
|
||||||
|
}
|
||||||
|
return status, releaseStatus, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ch, err := loader.Load(chartPath)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("error in loading: %v", err)
|
||||||
|
return false, "", err
|
||||||
|
}
|
||||||
|
if req := ch.Metadata.Dependencies; req != nil {
|
||||||
|
if err := action.CheckDependencies(ch, req); err != nil {
|
||||||
|
fmt.Printf("error in dependencies: %v", err)
|
||||||
|
return false, "", err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ch.Metadata.Deprecated {
|
||||||
|
fmt.Printf("WARNING: This chart is deprecated")
|
||||||
|
}
|
||||||
|
|
||||||
|
release, err := upgrade.Run(releaseName, ch, vals)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("error in installing chart: %v", err)
|
||||||
|
return false, "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
return true, release.Info.Status.String(), nil
|
||||||
|
}
|
Loading…
Reference in new issue