mirror of https://github.com/helm/helm
parent
ecc0070417
commit
65ca573b59
@ -0,0 +1,71 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"helm.sh/helm/v3/pkg/action"
|
||||||
|
"helm.sh/helm/v3/pkg/cli"
|
||||||
|
"helm.sh/helm/v3/pkg/gates"
|
||||||
|
"helm.sh/helm/v3/pkg/http"
|
||||||
|
_ "k8s.io/client-go/plugin/pkg/client/auth"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
settings = cli.New()
|
||||||
|
)
|
||||||
|
|
||||||
|
func debug(format string, v ...interface{}) {
|
||||||
|
format = fmt.Sprintf("[debug] %s\n", format)
|
||||||
|
log.Output(2, fmt.Sprintf(format, v...))
|
||||||
|
}
|
||||||
|
|
||||||
|
const FeatureGateOCI = gates.Gate("HELM_EXPERIMENTAL_OCI")
|
||||||
|
|
||||||
|
// Input: repositories.yaml, repositories cache (optional), chart location
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
actionConfig := new(action.Configuration)
|
||||||
|
for k, v := range settings.EnvVars() {
|
||||||
|
fmt.Println(k, v)
|
||||||
|
}
|
||||||
|
if err := actionConfig.Init(settings.RESTClientGetter(), settings.Namespace(), os.Getenv("HELM_DRIVER"), debug); err != nil {
|
||||||
|
log.Fatalf("error getting configuration: %v", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if _, err := actionConfig.KubernetesClientSet(); err != nil {
|
||||||
|
log.Fatalf("error initilizing kubernetes client configuration: %v", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
listReleases(actionConfig)
|
||||||
|
helmRepoUpdate()
|
||||||
|
// this has to be added in repositories: https://charts.bitnami.com/bitnami
|
||||||
|
installRelease(actionConfig, "bitnami/redis", "bitnami-redis-2")
|
||||||
|
}
|
||||||
|
|
||||||
|
func listReleases(cfg *action.Configuration) {
|
||||||
|
releases, err := http.List(cfg)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
fmt.Println(string(releases))
|
||||||
|
}
|
||||||
|
|
||||||
|
func helmRepoUpdate() {
|
||||||
|
err := http.HelmRepoUpdate()
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func installRelease(cfg *action.Configuration, chartPath string, releaseName string) {
|
||||||
|
fmt.Printf("installing chart: %s. release name: %s ", chartPath, releaseName)
|
||||||
|
_, err := http.Install(cfg, chartPath, releaseName)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("error installing chart", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
fmt.Printf("installed chart: %s release: %s successfully", chartPath, releaseName)
|
||||||
|
}
|
@ -0,0 +1,42 @@
|
|||||||
|
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
|
||||||
|
}
|
@ -0,0 +1,36 @@
|
|||||||
|
package http
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
|
||||||
|
"helm.sh/helm/v3/pkg/action"
|
||||||
|
)
|
||||||
|
|
||||||
|
type helmRelease struct {
|
||||||
|
Release string `json:"release"`
|
||||||
|
Namespace string `json:"namespace"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func List(cfg *action.Configuration) ([]byte, error) {
|
||||||
|
list := action.NewList(cfg)
|
||||||
|
|
||||||
|
list.SetStateMask()
|
||||||
|
|
||||||
|
results, err := list.Run()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var helmReleases []helmRelease
|
||||||
|
|
||||||
|
for _, res := range results {
|
||||||
|
r := helmRelease{Release: res.Name, Namespace: res.Namespace}
|
||||||
|
helmReleases = append(helmReleases, r)
|
||||||
|
}
|
||||||
|
|
||||||
|
jsonReleases, err := json.Marshal(helmReleases)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return jsonReleases, err
|
||||||
|
}
|
@ -0,0 +1,54 @@
|
|||||||
|
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