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