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