Add install chart endpoint

pull/8330/head
Anirudh M 5 years ago
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)
})
}

@ -5,8 +5,8 @@ import (
"fmt"
"net/http"
"helm.sh/helm/v3/cmd/servercontext"
"helm.sh/helm/v3/pkg/action"
"helm.sh/helm/v3/pkg/servercontext"
)
func Handler() http.Handler {
@ -31,7 +31,7 @@ func Handler() http.Handler {
list.SetStateMask()
results, err := list.Run()
if err != nil {
fmt.Print("error while running helm list")
fmt.Printf("error while running helm list %v", err)
}
var helmReleases []HelmRelease

@ -4,6 +4,7 @@ import (
"fmt"
"net/http"
"helm.sh/helm/v3/cmd/endpoints/install"
"helm.sh/helm/v3/cmd/endpoints/list"
"helm.sh/helm/v3/cmd/endpoints/ping"
"helm.sh/helm/v3/cmd/servercontext"
@ -18,6 +19,7 @@ func startServer(appconfig *servercontext.Application) {
router := http.NewServeMux()
router.Handle("/ping", ping.Handler())
router.Handle("/list", list.Handler())
router.Handle("/install", install.Handler())
err := http.ListenAndServe(fmt.Sprintf(":%d", 8080), router)
if err != nil {

@ -665,6 +665,7 @@ gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
helm.sh/helm v1.2.1 h1:Jrn7kKQqQ/hnFWZEX+9pMFvYqFexkzrBnGqYBmIph7c=
helm.sh/helm v2.16.7+incompatible h1:3Hp8GLmr6uuBNYGmTQ4p3J4N6xKqxvFDswxHAOposlM=
helm.sh/helm v2.16.9+incompatible h1:31XFG6KPAbh2A/oDgIaQFR8L63vtyxN7tOt64URUJvY=
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=

@ -39,6 +39,7 @@ type Options struct {
// MergeValues merges values from files specified via -f/--values and directly
// via --set, --set-string, or --set-file, marshaling them to YAML
func (opts *Options) MergeValues(p getter.Providers) (map[string]interface{}, error) {
base := map[string]interface{}{}
// User specified a values files via -f/--values

@ -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…
Cancel
Save