mirror of https://github.com/helm/helm
parent
a8a85edd5c
commit
30b4b2b46f
@ -0,0 +1,13 @@
|
|||||||
|
package install
|
||||||
|
|
||||||
|
type InstallRequest struct {
|
||||||
|
RequestID string
|
||||||
|
ReleaseName string
|
||||||
|
ReleaseNamespace string
|
||||||
|
ChartPath string
|
||||||
|
}
|
||||||
|
|
||||||
|
type InstallReponse struct {
|
||||||
|
Status bool
|
||||||
|
ReleaseStatus string
|
||||||
|
}
|
@ -0,0 +1,67 @@
|
|||||||
|
package install
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"helm.sh/helm/v3/cmd/servercontext"
|
||||||
|
"helm.sh/helm/v3/pkg/action"
|
||||||
|
"helm.sh/helm/v3/pkg/chart"
|
||||||
|
"helm.sh/helm/v3/pkg/chart/loader"
|
||||||
|
)
|
||||||
|
|
||||||
|
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 InstallRequest
|
||||||
|
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")
|
||||||
|
|
||||||
|
install := action.NewInstall(servercontext.App().ActionConfig)
|
||||||
|
install.ReleaseName = request.ReleaseName
|
||||||
|
install.Namespace = request.ReleaseNamespace
|
||||||
|
|
||||||
|
cp, err := install.ChartPathOptions.LocateChart(request.ChartPath, servercontext.App().Config)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("error in locating chart: %v", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var requestedChart *chart.Chart
|
||||||
|
if requestedChart, err = loader.Load(cp); err != nil {
|
||||||
|
fmt.Printf("error in loading chart: %v", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var vals map[string]interface{}
|
||||||
|
release, err := install.Run(requestedChart, vals)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("error in installing chart: %v", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
response := InstallReponse{Status: true, ReleaseStatus: string(release.Info.Status)}
|
||||||
|
|
||||||
|
payload, err := json.Marshal(response)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("error parsing response %v", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
res.Write(payload)
|
||||||
|
})
|
||||||
|
}
|
@ -1,42 +0,0 @@
|
|||||||
package http
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
|
|
||||||
"helm.sh/helm/v3/pkg/action"
|
|
||||||
"helm.sh/helm/v3/pkg/chart"
|
|
||||||
"helm.sh/helm/v3/pkg/chart/loader"
|
|
||||||
"helm.sh/helm/v3/pkg/cli"
|
|
||||||
"helm.sh/helm/v3/pkg/release"
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
settings = cli.New()
|
|
||||||
)
|
|
||||||
|
|
||||||
func Install(cfg *action.Configuration, chartName, relName string) (*release.Release, error) {
|
|
||||||
settings := cli.New()
|
|
||||||
|
|
||||||
opts := make(map[string]interface{})
|
|
||||||
|
|
||||||
install := action.NewInstall(cfg)
|
|
||||||
install.ReleaseName = relName
|
|
||||||
install.Namespace = "default"
|
|
||||||
|
|
||||||
fmt.Printf("%+v %#v\n", install, settings)
|
|
||||||
cp, err := install.ChartPathOptions.LocateChart(chartName, settings)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
var requestedChart *chart.Chart
|
|
||||||
if requestedChart, err = loader.Load(cp); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
release, err := install.Run(requestedChart, opts)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
// deal with dependent charts later
|
|
||||||
return release, nil
|
|
||||||
}
|
|
@ -1,54 +0,0 @@
|
|||||||
package http
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"io"
|
|
||||||
"os"
|
|
||||||
"sync"
|
|
||||||
|
|
||||||
"helm.sh/helm/v3/pkg/getter"
|
|
||||||
"helm.sh/helm/v3/pkg/repo"
|
|
||||||
)
|
|
||||||
|
|
||||||
type repoUpdateOptions struct {
|
|
||||||
update func([]*repo.ChartRepository, io.Writer)
|
|
||||||
repoFile string
|
|
||||||
}
|
|
||||||
|
|
||||||
func HelmRepoUpdate() error {
|
|
||||||
o := &repoUpdateOptions{update: updateCharts}
|
|
||||||
o.repoFile = settings.RepositoryConfig
|
|
||||||
f, err := repo.LoadFile(o.repoFile)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
var repos []*repo.ChartRepository
|
|
||||||
for _, cfg := range f.Repositories {
|
|
||||||
r, err := repo.NewChartRepository(cfg, getter.All(settings))
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
repos = append(repos, r)
|
|
||||||
}
|
|
||||||
|
|
||||||
o.update(repos, os.Stdout)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func updateCharts(repos []*repo.ChartRepository, out io.Writer) {
|
|
||||||
fmt.Fprintln(out, "Hang tight while we grab the latest from your chart repositories...")
|
|
||||||
var wg sync.WaitGroup
|
|
||||||
for _, re := range repos {
|
|
||||||
wg.Add(1)
|
|
||||||
go func(re *repo.ChartRepository) {
|
|
||||||
defer wg.Done()
|
|
||||||
if _, err := re.DownloadIndexFile(); err != nil {
|
|
||||||
fmt.Fprintf(out, "...Unable to get an update from the %q chart repository (%s):\n\t%s\n", re.Config.Name, re.Config.URL, err)
|
|
||||||
} else {
|
|
||||||
fmt.Fprintf(out, "...Successfully got an update from the %q chart repository\n", re.Config.Name)
|
|
||||||
}
|
|
||||||
}(re)
|
|
||||||
}
|
|
||||||
wg.Wait()
|
|
||||||
fmt.Fprintln(out, "Update Complete. ⎈ Happy Helming!⎈ ")
|
|
||||||
}
|
|
Loading…
Reference in new issue