Pluggable downloaders. Closes , .

It is now possible to create plugins with chart download capabilities for custom, non-http protocols.
Furthermore it is possible to reuse helm packages to implement alternative clients with these custom downloader functions.
pull/2094/head
Gergo Huszty 8 years ago
parent bba0214ea1
commit b4ca198cc6

@ -71,7 +71,7 @@ func newCreateCmd(out io.Writer) *cobra.Command {
Short: "create a new chart with the given name",
Long: createDesc,
RunE: func(cmd *cobra.Command, args []string) error {
cc.home = helmpath.Home(homePath())
cc.home = settings.Home
if len(args) == 0 {
return errors.New("the name of the new chart is required")
}

@ -23,6 +23,8 @@ import (
"testing"
"k8s.io/helm/pkg/chartutil"
"k8s.io/helm/pkg/helm/environment"
"k8s.io/helm/pkg/helm/helmpath"
"k8s.io/helm/pkg/proto/hapi/chart"
)
@ -85,15 +87,15 @@ func TestCreateStarterCmd(t *testing.T) {
if err != nil {
t.Fatal(err)
}
old := homePath()
helmHome = thome
old := helmpath.Home(environment.DefaultHelmHome())
settings.Home = thome
defer func() {
helmHome = old
os.RemoveAll(thome)
settings.Home = old
os.RemoveAll(thome.String())
}()
// Create a starter.
starterchart := filepath.Join(thome, "starters")
starterchart := filepath.Join(thome.String(), "starters")
os.Mkdir(starterchart, 0755)
if dest, err := chartutil.Create(&chart.Metadata{Name: "starterchart"}, starterchart); err != nil {
t.Fatalf("Could not create chart: %s", err)

@ -21,6 +21,7 @@ import (
"github.com/spf13/cobra"
"k8s.io/helm/pkg/downloader"
"k8s.io/helm/pkg/getter/defaultgetters"
"k8s.io/helm/pkg/helm/helmpath"
)
@ -53,7 +54,7 @@ func newDependencyBuildCmd(out io.Writer) *cobra.Command {
Short: "rebuild the charts/ directory based on the requirements.lock file",
Long: dependencyBuildDesc,
RunE: func(cmd *cobra.Command, args []string) error {
dbc.helmhome = helmpath.Home(homePath())
dbc.helmhome = settings.Home
dbc.chartpath = "."
if len(args) > 0 {
@ -76,6 +77,7 @@ func (d *dependencyBuildCmd) run() error {
ChartPath: d.chartpath,
HelmHome: d.helmhome,
Keyring: d.keyring,
Getters: defaultgetters.Get(settings),
}
if d.verify {
man.Verify = downloader.VerifyIfPossible

@ -29,18 +29,18 @@ import (
)
func TestDependencyBuildCmd(t *testing.T) {
oldhome := helmHome
oldhome := settings.Home
hh, err := tempHelmHome(t)
if err != nil {
t.Fatal(err)
}
helmHome = hh
settings.Home = hh
defer func() {
os.RemoveAll(hh)
helmHome = oldhome
os.RemoveAll(hh.String())
settings.Home = oldhome
}()
srv := repotest.NewServer(hh)
srv := repotest.NewServer(hh.String())
defer srv.Stop()
_, err = srv.CopyCharts("testdata/testcharts/*.tgz")
if err != nil {
@ -48,14 +48,14 @@ func TestDependencyBuildCmd(t *testing.T) {
}
chartname := "depbuild"
if err := createTestingChart(hh, chartname, srv.URL()); err != nil {
if err := createTestingChart(hh.String(), chartname, srv.URL()); err != nil {
t.Fatal(err)
}
out := bytes.NewBuffer(nil)
dbc := &dependencyBuildCmd{out: out}
dbc.helmhome = helmpath.Home(hh)
dbc.chartpath = filepath.Join(hh, chartname)
dbc.chartpath = filepath.Join(hh.String(), chartname)
// In the first pass, we basically want the same results as an update.
if err := dbc.run(); err != nil {
@ -70,14 +70,14 @@ func TestDependencyBuildCmd(t *testing.T) {
}
// Make sure the actual file got downloaded.
expect := filepath.Join(hh, chartname, "charts/reqtest-0.1.0.tgz")
expect := filepath.Join(hh.String(), chartname, "charts/reqtest-0.1.0.tgz")
if _, err := os.Stat(expect); err != nil {
t.Fatal(err)
}
// In the second pass, we want to remove the chart's request dependency,
// then see if it restores from the lock.
lockfile := filepath.Join(hh, chartname, "requirements.lock")
lockfile := filepath.Join(hh.String(), chartname, "requirements.lock")
if _, err := os.Stat(lockfile); err != nil {
t.Fatal(err)
}
@ -92,7 +92,7 @@ func TestDependencyBuildCmd(t *testing.T) {
}
// Now repeat the test that the dependency exists.
expect = filepath.Join(hh, chartname, "charts/reqtest-0.1.0.tgz")
expect = filepath.Join(hh.String(), chartname, "charts/reqtest-0.1.0.tgz")
if _, err := os.Stat(expect); err != nil {
t.Fatal(err)
}

@ -21,6 +21,7 @@ import (
"github.com/spf13/cobra"
"k8s.io/helm/pkg/downloader"
"k8s.io/helm/pkg/getter/defaultgetters"
"k8s.io/helm/pkg/helm/helmpath"
)
@ -72,7 +73,7 @@ func newDependencyUpdateCmd(out io.Writer) *cobra.Command {
return err
}
duc.helmhome = helmpath.Home(homePath())
duc.helmhome = settings.Home
return duc.run()
},
@ -94,11 +95,12 @@ func (d *dependencyUpdateCmd) run() error {
HelmHome: d.helmhome,
Keyring: d.keyring,
SkipUpdate: d.skipRefresh,
Getters: defaultgetters.Get(settings),
}
if d.verify {
man.Verify = downloader.VerifyIfPossible
}
if flagDebug {
if settings.FlagDebug {
man.Debug = true
}
return man.Update()

@ -35,18 +35,18 @@ import (
func TestDependencyUpdateCmd(t *testing.T) {
// Set up a testing helm home
oldhome := helmHome
oldhome := settings.Home
hh, err := tempHelmHome(t)
if err != nil {
t.Fatal(err)
}
helmHome = hh
settings.Home = hh
defer func() {
os.RemoveAll(hh)
helmHome = oldhome
os.RemoveAll(hh.String())
settings.Home = oldhome
}()
srv := repotest.NewServer(hh)
srv := repotest.NewServer(hh.String())
defer srv.Stop()
copied, err := srv.CopyCharts("testdata/testcharts/*.tgz")
if err != nil {
@ -56,14 +56,14 @@ func TestDependencyUpdateCmd(t *testing.T) {
t.Logf("Listening on directory %s", srv.Root())
chartname := "depup"
if err := createTestingChart(hh, chartname, srv.URL()); err != nil {
if err := createTestingChart(hh.String(), chartname, srv.URL()); err != nil {
t.Fatal(err)
}
out := bytes.NewBuffer(nil)
duc := &dependencyUpdateCmd{out: out}
duc.helmhome = helmpath.Home(hh)
duc.chartpath = filepath.Join(hh, chartname)
duc.chartpath = filepath.Join(hh.String(), chartname)
if err := duc.run(); err != nil {
output := out.String()
@ -78,7 +78,7 @@ func TestDependencyUpdateCmd(t *testing.T) {
}
// Make sure the actual file got downloaded.
expect := filepath.Join(hh, chartname, "charts/reqtest-0.1.0.tgz")
expect := filepath.Join(hh.String(), chartname, "charts/reqtest-0.1.0.tgz")
if _, err := os.Stat(expect); err != nil {
t.Fatal(err)
}
@ -106,7 +106,7 @@ func TestDependencyUpdateCmd(t *testing.T) {
{Name: "compressedchart", Version: "0.3.0", Repository: srv.URL()},
},
}
dir := filepath.Join(hh, chartname)
dir := filepath.Join(hh.String(), chartname)
if err := writeRequirements(dir, reqfile); err != nil {
t.Fatal(err)
}
@ -118,11 +118,11 @@ func TestDependencyUpdateCmd(t *testing.T) {
// In this second run, we should see compressedchart-0.3.0.tgz, and not
// the 0.1.0 version.
expect = filepath.Join(hh, chartname, "charts/compressedchart-0.3.0.tgz")
expect = filepath.Join(hh.String(), chartname, "charts/compressedchart-0.3.0.tgz")
if _, err := os.Stat(expect); err != nil {
t.Fatalf("Expected %q: %s", expect, err)
}
dontExpect := filepath.Join(hh, chartname, "charts/compressedchart-0.1.0.tgz")
dontExpect := filepath.Join(hh.String(), chartname, "charts/compressedchart-0.1.0.tgz")
if _, err := os.Stat(dontExpect); err == nil {
t.Fatalf("Unexpected %q", dontExpect)
}
@ -130,18 +130,18 @@ func TestDependencyUpdateCmd(t *testing.T) {
func TestDependencyUpdateCmd_SkipRefresh(t *testing.T) {
// Set up a testing helm home
oldhome := helmHome
oldhome := settings.Home
hh, err := tempHelmHome(t)
if err != nil {
t.Fatal(err)
}
helmHome = hh
settings.Home = hh
defer func() {
os.RemoveAll(hh)
helmHome = oldhome
os.RemoveAll(hh.String())
settings.Home = oldhome
}()
srv := repotest.NewServer(hh)
srv := repotest.NewServer(hh.String())
defer srv.Stop()
copied, err := srv.CopyCharts("testdata/testcharts/*.tgz")
if err != nil {
@ -151,14 +151,14 @@ func TestDependencyUpdateCmd_SkipRefresh(t *testing.T) {
t.Logf("Listening on directory %s", srv.Root())
chartname := "depup"
if err := createTestingChart(hh, chartname, srv.URL()); err != nil {
if err := createTestingChart(hh.String(), chartname, srv.URL()); err != nil {
t.Fatal(err)
}
out := bytes.NewBuffer(nil)
duc := &dependencyUpdateCmd{out: out}
duc.helmhome = helmpath.Home(hh)
duc.chartpath = filepath.Join(hh, chartname)
duc.chartpath = filepath.Join(hh.String(), chartname)
duc.skipRefresh = true
if err := duc.run(); err == nil {

@ -26,7 +26,7 @@ import (
"github.com/spf13/cobra"
"k8s.io/helm/pkg/chartutil"
"k8s.io/helm/pkg/downloader"
"k8s.io/helm/pkg/helm/helmpath"
"k8s.io/helm/pkg/getter/defaultgetters"
)
const fetchDesc = `
@ -93,10 +93,11 @@ func newFetchCmd(out io.Writer) *cobra.Command {
func (f *fetchCmd) run() error {
c := downloader.ChartDownloader{
HelmHome: helmpath.Home(homePath()),
HelmHome: settings.Home,
Out: f.out,
Keyring: f.keyring,
Verify: downloader.VerifyNever,
Getters: defaultgetters.Get(settings),
}
if f.verify {

@ -24,6 +24,8 @@ import (
"regexp"
"testing"
"k8s.io/helm/pkg/helm/environment"
"k8s.io/helm/pkg/helm/helmpath"
"k8s.io/helm/pkg/repo/repotest"
)
@ -32,11 +34,11 @@ func TestFetchCmd(t *testing.T) {
if err != nil {
t.Fatal(err)
}
old := homePath()
helmHome = hh
old := helmpath.Home(environment.DefaultHelmHome())
settings.Home = hh
defer func() {
helmHome = old
os.RemoveAll(hh)
settings.Home = old
os.RemoveAll(hh.String())
}()
// all flags will get "--home=TMDIR -d outdir" appended.
@ -105,7 +107,7 @@ func TestFetchCmd(t *testing.T) {
},
}
srv := repotest.NewServer(hh)
srv := repotest.NewServer(hh.String())
defer srv.Stop()
if _, err := srv.CopyCharts("testdata/testcharts/*.tgz*"); err != nil {
@ -116,7 +118,7 @@ func TestFetchCmd(t *testing.T) {
}
for _, tt := range tests {
outdir := filepath.Join(hh, "testout")
outdir := filepath.Join(hh.String(), "testout")
os.RemoveAll(outdir)
os.Mkdir(outdir, 0755)

@ -64,7 +64,7 @@ func newGetCmd(client helm.Interface, out io.Writer) *cobra.Command {
}
get.release = args[0]
if get.client == nil {
get.client = helm.NewClient(helm.Host(tillerHost))
get.client = helm.NewClient(helm.Host(settings.TillerHost))
}
return get.run()
},

@ -55,7 +55,7 @@ func newGetManifestCmd(client helm.Interface, out io.Writer) *cobra.Command {
}
get.release = args[0]
if get.client == nil {
get.client = helm.NewClient(helm.Host(tillerHost))
get.client = helm.NewClient(helm.Host(settings.TillerHost))
}
return get.run()
},

@ -23,7 +23,6 @@ import (
"io/ioutil"
"log"
"os"
"path/filepath"
"strings"
"github.com/spf13/cobra"
@ -33,18 +32,16 @@ import (
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
"k8s.io/helm/pkg/helm"
helm_env "k8s.io/helm/pkg/helm/environment"
"k8s.io/helm/pkg/helm/helmpath"
"k8s.io/helm/pkg/helm/portforwarder"
"k8s.io/helm/pkg/kube"
"k8s.io/helm/pkg/tiller/environment"
tiller_env "k8s.io/helm/pkg/tiller/environment"
"k8s.io/helm/pkg/tlsutil"
)
const (
localRepoIndexFilePath = "index.yaml"
homeEnvVar = "HELM_HOME"
hostEnvVar = "HELM_HOST"
tillerNamespaceEnvVar = "TILLER_NAMESPACE"
)
var (
@ -56,17 +53,12 @@ var (
)
var (
helmHome string
tillerHost string
tillerNamespace string
kubeContext string
kubeContext string
settings helm_env.EnvSettings
// TODO refactor out this global var
tillerTunnel *kube.Tunnel
)
// flagDebug is a signal that the user wants additional output.
var flagDebug bool
var globalUsage = `The Kubernetes package manager
To begin working with Helm, run the 'helm init' command:
@ -92,6 +84,8 @@ Environment:
`
func newRootCmd(out io.Writer) *cobra.Command {
var helmHomeTemp string
cmd := &cobra.Command{
Use: "helm",
Short: "The Helm package manager for Kubernetes.",
@ -107,11 +101,19 @@ func newRootCmd(out io.Writer) *cobra.Command {
},
}
p := cmd.PersistentFlags()
p.StringVar(&helmHome, "home", defaultHelmHome(), "location of your Helm config. Overrides $HELM_HOME")
p.StringVar(&tillerHost, "host", defaultHelmHost(), "address of tiller. Overrides $HELM_HOST")
p.StringVar(&helmHomeTemp, "home", helm_env.DefaultHelmHome(), "location of your Helm config. Overrides $HELM_HOME")
settings.Home = helmpath.Home(helmHomeTemp)
p.StringVar(&settings.TillerHost, "host", helm_env.DefaultHelmHost(), "address of tiller. Overrides $HELM_HOST")
p.StringVar(&kubeContext, "kube-context", "", "name of the kubeconfig context to use")
p.BoolVar(&flagDebug, "debug", false, "enable verbose output")
p.StringVar(&tillerNamespace, "tiller-namespace", defaultTillerNamespace(), "namespace of tiller")
p.BoolVar(&settings.FlagDebug, "debug", false, "enable verbose output")
p.StringVar(&settings.TillerNamespace, "tiller-namespace", tiller_env.GetTillerNamespace(), "namespace of tiller")
if os.Getenv(helm_env.PluginDisableEnvVar) != "1" {
settings.PlugDirs = os.Getenv(helm_env.PluginEnvVar)
if settings.PlugDirs == "" {
settings.PlugDirs = settings.Home.Plugins()
}
}
cmd.AddCommand(
// chart commands
@ -153,7 +155,7 @@ func newRootCmd(out io.Writer) *cobra.Command {
)
// Find and add plugins
loadPlugins(cmd, helmpath.Home(homePath()), out)
loadPlugins(cmd, out)
return cmd
}
@ -176,26 +178,26 @@ func markDeprecated(cmd *cobra.Command, notice string) *cobra.Command {
}
func setupConnection(c *cobra.Command, args []string) error {
if tillerHost == "" {
if settings.TillerHost == "" {
config, client, err := getKubeClient(kubeContext)
if err != nil {
return err
}
tunnel, err := portforwarder.New(tillerNamespace, client, config)
tunnel, err := portforwarder.New(settings.TillerNamespace, client, config)
if err != nil {
return err
}
tillerHost = fmt.Sprintf("localhost:%d", tunnel.Local)
if flagDebug {
settings.TillerHost = fmt.Sprintf("localhost:%d", tunnel.Local)
if settings.FlagDebug {
fmt.Printf("Created tunnel using local port: '%d'\n", tunnel.Local)
}
}
// Set up the gRPC config.
if flagDebug {
fmt.Printf("SERVER: %q\n", tillerHost)
if settings.FlagDebug {
fmt.Printf("SERVER: %q\n", settings.TillerHost)
}
// Plugin support.
return nil
@ -230,30 +232,6 @@ func prettyError(err error) error {
return errors.New(grpc.ErrorDesc(err))
}
func defaultHelmHome() string {
if home := os.Getenv(homeEnvVar); home != "" {
return home
}
return filepath.Join(os.Getenv("HOME"), ".helm")
}
func homePath() string {
s := os.ExpandEnv(helmHome)
os.Setenv(homeEnvVar, s)
return s
}
func defaultHelmHost() string {
return os.Getenv(hostEnvVar)
}
func defaultTillerNamespace() string {
if ns := os.Getenv(tillerNamespaceEnvVar); ns != "" {
return ns
}
return environment.DefaultTillerNamespace
}
// getKubeClient is a convenience method for creating kubernetes config and client
// for a given kubeconfig context
func getKubeClient(context string) (*rest.Config, *internalclientset.Clientset, error) {
@ -277,7 +255,7 @@ func ensureHelmClient(h helm.Interface) helm.Interface {
}
func newClient() helm.Interface {
options := []helm.Option{helm.Host(tillerHost)}
options := []helm.Option{helm.Host(settings.TillerHost)}
if tlsVerify || tlsEnable {
tlsopts := tlsutil.Options{KeyFile: tlsKeyFile, CertFile: tlsCertFile, InsecureSkipVerify: true}

@ -244,19 +244,19 @@ type releaseCase struct {
//
// This does not clean up the directory. You must do that yourself.
// You must also set helmHome yourself.
func tempHelmHome(t *testing.T) (string, error) {
oldhome := helmHome
func tempHelmHome(t *testing.T) (helmpath.Home, error) {
oldhome := settings.Home
dir, err := ioutil.TempDir("", "helm_home-")
if err != nil {
return "n/", err
return helmpath.Home("n/"), err
}
helmHome = dir
if err := ensureTestHome(helmpath.Home(helmHome), t); err != nil {
return "n/", err
settings.Home = helmpath.Home(dir)
if err := ensureTestHome(settings.Home, t); err != nil {
return helmpath.Home("n/"), err
}
helmHome = oldhome
return dir, nil
settings.Home = oldhome
return helmpath.Home(dir), nil
}
// ensureTestHome creates a home directory like ensureHome, but without remote references.
@ -312,6 +312,6 @@ func ensureTestHome(home helmpath.Home, t *testing.T) error {
return fmt.Errorf("%s must be a file, not a directory", localRepoIndexFile)
}
t.Logf("$HELM_HOME has been configured at %s.\n", helmHome)
t.Logf("$HELM_HOME has been configured at %s.\n", settings.Home.String())
return nil
}

@ -66,7 +66,7 @@ func newHistoryCmd(c helm.Interface, w io.Writer) *cobra.Command {
case len(args) == 0:
return errReleaseRequired
case his.helmc == nil:
his.helmc = helm.NewClient(helm.Host(tillerHost))
his.helmc = helm.NewClient(helm.Host(settings.TillerHost))
}
his.rls = args[0]
return his.run()

@ -21,7 +21,6 @@ import (
"io"
"github.com/spf13/cobra"
"k8s.io/helm/pkg/helm/helmpath"
)
var longHomeHelp = `
@ -35,9 +34,9 @@ func newHomeCmd(out io.Writer) *cobra.Command {
Short: "displays the location of HELM_HOME",
Long: longHomeHelp,
Run: func(cmd *cobra.Command, args []string) {
h := helmpath.Home(homePath())
h := settings.Home
fmt.Fprintf(out, "%s\n", h)
if flagDebug {
if settings.FlagDebug {
fmt.Fprintf(out, "Repository: %s\n", h.Repository())
fmt.Fprintf(out, "RepositoryFile: %s\n", h.RepositoryFile())
fmt.Fprintf(out, "Cache: %s\n", h.Cache())

@ -27,6 +27,7 @@ import (
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
"k8s.io/helm/cmd/helm/installer"
"k8s.io/helm/pkg/getter/defaultgetters"
"k8s.io/helm/pkg/helm/helmpath"
"k8s.io/helm/pkg/repo"
)
@ -91,8 +92,8 @@ func newInitCmd(out io.Writer) *cobra.Command {
if len(args) != 0 {
return errors.New("This command does not accept arguments")
}
i.namespace = tillerNamespace
i.home = helmpath.Home(homePath())
i.namespace = settings.TillerNamespace
i.home = settings.Home
return i.run()
},
}
@ -152,7 +153,7 @@ func (i *initCmd) run() error {
i.opts.UseCanary = i.canary
i.opts.ImageSpec = i.image
if flagDebug {
if settings.FlagDebug {
writeYAMLManifest := func(apiVersion, kind, body string, first, last bool) error {
w := i.out
if !first {
@ -221,7 +222,7 @@ func (i *initCmd) run() error {
if err := ensureRepoFileFormat(i.home.RepositoryFile(), i.out); err != nil {
return err
}
fmt.Fprintf(i.out, "$HELM_HOME has been configured at %s.\n", helmHome)
fmt.Fprintf(i.out, "$HELM_HOME has been configured at %s.\n", settings.Home)
if !i.clientOnly {
if i.kubeClient == nil {
@ -311,7 +312,7 @@ func initStableRepo(cacheFile string, skipRefresh bool) (*repo.Entry, error) {
URL: stableRepositoryURL,
Cache: cacheFile,
}
r, err := repo.NewChartRepository(&c)
r, err := repo.NewChartRepository(&c, defaultgetters.Get(settings))
if err != nil {
return nil, err
}

@ -137,11 +137,11 @@ func TestInitCmd_dryRun(t *testing.T) {
if err != nil {
t.Fatal(err)
}
dbg := flagDebug
flagDebug = true
dbg := settings.FlagDebug
settings.FlagDebug = true
defer func() {
os.Remove(home)
flagDebug = dbg
settings.FlagDebug = dbg
}()
var buf bytes.Buffer
@ -182,7 +182,7 @@ func TestEnsureHome(t *testing.T) {
b := bytes.NewBuffer(nil)
hh := helmpath.Home(home)
helmHome = home
settings.Home = hh
if err := ensureDirectories(hh, b); err != nil {
t.Error(err)
}

@ -34,8 +34,8 @@ import (
"k8s.io/helm/pkg/chartutil"
"k8s.io/helm/pkg/downloader"
"k8s.io/helm/pkg/getter/defaultgetters"
"k8s.io/helm/pkg/helm"
"k8s.io/helm/pkg/helm/helmpath"
"k8s.io/helm/pkg/kube"
"k8s.io/helm/pkg/proto/hapi/chart"
"k8s.io/helm/pkg/proto/hapi/release"
@ -178,7 +178,7 @@ func newInstallCmd(c helm.Interface, out io.Writer) *cobra.Command {
}
func (i *installCmd) run() error {
if flagDebug {
if settings.FlagDebug {
fmt.Fprintf(i.out, "CHART PATH: %s\n", i.chartPath)
}
@ -312,7 +312,7 @@ func (i *installCmd) printRelease(rel *release.Release) {
}
// TODO: Switch to text/template like everything else.
fmt.Fprintf(i.out, "NAME: %s\n", rel.Name)
if flagDebug {
if settings.FlagDebug {
printRelease(i.out, rel)
}
}
@ -350,15 +350,16 @@ func locateChartPath(name, version string, verify bool, keyring string) (string,
return name, fmt.Errorf("path %q not found", name)
}
crepo := filepath.Join(helmpath.Home(homePath()).Repository(), name)
crepo := filepath.Join(settings.Home.Repository(), name)
if _, err := os.Stat(crepo); err == nil {
return filepath.Abs(crepo)
}
dl := downloader.ChartDownloader{
HelmHome: helmpath.Home(homePath()),
HelmHome: settings.Home,
Out: os.Stdout,
Keyring: keyring,
Getters: defaultgetters.Get(settings),
}
if verify {
dl.Verify = downloader.VerifyAlways
@ -370,11 +371,11 @@ func locateChartPath(name, version string, verify bool, keyring string) (string,
if err != nil {
return filename, err
}
if flagDebug {
if settings.FlagDebug {
fmt.Printf("Fetched %s to %s\n", name, filename)
}
return lname, nil
} else if flagDebug {
} else if settings.FlagDebug {
return filename, err
}

@ -92,7 +92,7 @@ func newListCmd(client helm.Interface, out io.Writer) *cobra.Command {
list.filter = strings.Join(args, " ")
}
if list.client == nil {
list.client = helm.NewClient(helm.Host(tillerHost))
list.client = helm.NewClient(helm.Host(settings.TillerHost))
}
return list.run()
},

@ -43,15 +43,14 @@ func pluginDirs(home helmpath.Home) string {
// This follows a different pattern than the other commands because it has
// to inspect its environment and then add commands to the base command
// as it finds them.
func loadPlugins(baseCmd *cobra.Command, home helmpath.Home, out io.Writer) {
func loadPlugins(baseCmd *cobra.Command, out io.Writer) {
// If HELM_NO_PLUGINS is set to 1, do not load plugins.
if os.Getenv("HELM_NO_PLUGINS") == "1" {
if settings.PlugDirs == "" {
return
}
plugdirs := pluginDirs(home)
found, err := findPlugins(plugdirs)
found, err := findPlugins(settings.PlugDirs)
if err != nil {
fmt.Fprintf(os.Stderr, "failed to load plugins: %s", err)
return
@ -79,7 +78,7 @@ func loadPlugins(baseCmd *cobra.Command, home helmpath.Home, out io.Writer) {
// Call setupEnv before PrepareCommand because
// PrepareCommand uses os.ExpandEnv and expects the
// setupEnv vars.
setupEnv(md.Name, plug.Dir, plugdirs, home)
plugin.SetupPluginEnv(settings, md.Name, plug.Dir)
main, argv := plug.PrepareCommand(u)
prog := exec.Command(main, argv...)
@ -161,36 +160,3 @@ func findPlugins(plugdirs string) ([]*plugin.Plugin, error) {
}
return found, nil
}
// setupEnv prepares os.Env for plugins. It operates on os.Env because
// the plugin subsystem itself needs access to the environment variables
// created here.
func setupEnv(shortname, base, plugdirs string, home helmpath.Home) {
// Set extra env vars:
for key, val := range map[string]string{
"HELM_PLUGIN_NAME": shortname,
"HELM_PLUGIN_DIR": base,
"HELM_BIN": os.Args[0],
// Set vars that may not have been set, and save client the
// trouble of re-parsing.
pluginEnvVar: plugdirs,
homeEnvVar: home.String(),
// Set vars that convey common information.
"HELM_PATH_REPOSITORY": home.Repository(),
"HELM_PATH_REPOSITORY_FILE": home.RepositoryFile(),
"HELM_PATH_CACHE": home.Cache(),
"HELM_PATH_LOCAL_REPOSITORY": home.LocalRepository(),
"HELM_PATH_STARTER": home.Starters(),
"TILLER_HOST": tillerHost,
tillerNamespaceEnvVar: tillerNamespace,
} {
os.Setenv(key, val)
}
if flagDebug {
os.Setenv("HELM_DEBUG", "1")
}
}

@ -70,7 +70,7 @@ func newPackageCmd(out io.Writer) *cobra.Command {
Short: "package a chart directory into a chart archive",
Long: packageDesc,
RunE: func(cmd *cobra.Command, args []string) error {
pkg.home = helmpath.Home(homePath())
pkg.home = settings.Home
if len(args) == 0 {
return fmt.Errorf("This command needs at least one argument, the path to the chart.")
}
@ -119,7 +119,7 @@ func (p *packageCmd) run(cmd *cobra.Command, args []string) error {
if err := setVersion(ch, p.version); err != nil {
return err
}
if flagDebug {
if settings.FlagDebug {
fmt.Fprintf(p.out, "Setting version to %s", p.version)
}
}
@ -145,7 +145,7 @@ func (p *packageCmd) run(cmd *cobra.Command, args []string) error {
}
name, err := chartutil.Save(ch, dest)
if err == nil && flagDebug {
if err == nil && settings.FlagDebug {
fmt.Fprintf(p.out, "Saved %s to current directory\n", name)
}
@ -155,7 +155,7 @@ func (p *packageCmd) run(cmd *cobra.Command, args []string) error {
lr := p.home.LocalRepository()
if err := repo.AddChartToLocalRepo(ch, lr); err != nil {
return err
} else if flagDebug {
} else if settings.FlagDebug {
fmt.Fprintf(p.out, "Saved %s to %s\n", name, lr)
}
}
@ -194,7 +194,7 @@ func (p *packageCmd) clearsign(filename string) error {
return err
}
if flagDebug {
if settings.FlagDebug {
fmt.Fprintln(p.out, sig)
}

@ -143,10 +143,10 @@ func TestPackage(t *testing.T) {
}
ensureTestHome(helmpath.Home(tmp), t)
oldhome := homePath()
helmHome = tmp
oldhome := settings.Home
settings.Home = helmpath.Home(tmp)
defer func() {
helmHome = oldhome
settings.Home = oldhome
os.Chdir(origDir)
os.RemoveAll(tmp)
}()

@ -59,7 +59,7 @@ func runHook(p *plugin.Plugin, event string, home helmpath.Home) error {
debug("running %s hook: %s", event, prog)
setupEnv(p.Metadata.Name, p.Dir, home.Plugins(), home)
plugin.SetupPluginEnv(settings, p.Metadata.Name, p.Dir)
prog.Stdout, prog.Stderr = os.Stdout, os.Stderr
if err := prog.Run(); err != nil {
if eerr, ok := err.(*exec.ExitError); ok {

@ -54,12 +54,12 @@ func (pcmd *pluginInstallCmd) complete(args []string) error {
return err
}
pcmd.source = args[0]
pcmd.home = helmpath.Home(homePath())
pcmd.home = settings.Home
return nil
}
func (pcmd *pluginInstallCmd) run() error {
installer.Debug = flagDebug
installer.Debug = settings.FlagDebug
i, err := installer.NewForSource(pcmd.source, pcmd.version, pcmd.home)
if err != nil {

@ -36,7 +36,7 @@ func newPluginListCmd(out io.Writer) *cobra.Command {
Use: "list",
Short: "list installed Helm plugins",
RunE: func(cmd *cobra.Command, args []string) error {
pcmd.home = helmpath.Home(homePath())
pcmd.home = settings.Home
return pcmd.run()
},
}

@ -52,7 +52,7 @@ func (pcmd *pluginRemoveCmd) complete(args []string) error {
return err
}
pcmd.names = args
pcmd.home = helmpath.Home(homePath())
pcmd.home = settings.Home
return nil
}

@ -24,6 +24,7 @@ import (
"testing"
"k8s.io/helm/pkg/helm/helmpath"
"k8s.io/helm/pkg/plugin"
"github.com/spf13/cobra"
)
@ -64,16 +65,17 @@ func TestManuallyProcessArgs(t *testing.T) {
func TestLoadPlugins(t *testing.T) {
// Set helm home to point to testdata
old := helmHome
helmHome = "testdata/helmhome"
old := settings.Home
settings.Home = "testdata/helmhome"
defer func() {
helmHome = old
settings.Home = old
}()
hh := helmpath.Home(homePath())
hh := settings.Home
settings.PlugDirs = hh.Plugins()
out := bytes.NewBuffer(nil)
cmd := &cobra.Command{}
loadPlugins(cmd, hh, out)
loadPlugins(cmd, out)
envs := strings.Join([]string{
"fullenv",
@ -135,20 +137,19 @@ func TestLoadPlugins(t *testing.T) {
}
func TestLoadPlugins_HelmNoPlugins(t *testing.T) {
os.Setenv("HELM_NO_PLUGINS", "1")
defer os.Setenv("HELM_NO_PLUGINS", "0")
// Set helm home to point to testdata
old := helmHome
helmHome = "testdata/helmhome"
old := settings.Home
oldPlugDirs := settings.PlugDirs
settings.Home = "testdata/helmhome"
settings.PlugDirs = ""
defer func() {
helmHome = old
settings.Home = old
settings.PlugDirs = oldPlugDirs
}()
hh := helmpath.Home(homePath())
out := bytes.NewBuffer(nil)
cmd := &cobra.Command{}
loadPlugins(cmd, hh, out)
loadPlugins(cmd, out)
plugins := cmd.Commands()
if len(plugins) != 0 {
@ -158,31 +159,31 @@ func TestLoadPlugins_HelmNoPlugins(t *testing.T) {
func TestSetupEnv(t *testing.T) {
name := "pequod"
hh := helmpath.Home("testdata/helmhome")
base := filepath.Join(hh.Plugins(), name)
plugdirs := hh.Plugins()
flagDebug = true
settings.Home = helmpath.Home("testdata/helmhome")
base := filepath.Join(settings.Home.Plugins(), name)
settings.PlugDirs = settings.Home.Plugins()
settings.FlagDebug = true
defer func() {
flagDebug = false
settings.FlagDebug = false
}()
setupEnv(name, base, plugdirs, hh)
plugin.SetupPluginEnv(settings, name, base)
for _, tt := range []struct {
name string
expect string
}{
{"HELM_PLUGIN_NAME", name},
{"HELM_PLUGIN_DIR", base},
{"HELM_PLUGIN", hh.Plugins()},
{"HELM_PLUGIN", settings.Home.Plugins()},
{"HELM_DEBUG", "1"},
{"HELM_HOME", hh.String()},
{"HELM_PATH_REPOSITORY", hh.Repository()},
{"HELM_PATH_REPOSITORY_FILE", hh.RepositoryFile()},
{"HELM_PATH_CACHE", hh.Cache()},
{"HELM_PATH_LOCAL_REPOSITORY", hh.LocalRepository()},
{"HELM_PATH_STARTER", hh.Starters()},
{"TILLER_HOST", tillerHost},
{"TILLER_NAMESPACE", tillerNamespace},
{"HELM_HOME", settings.Home.String()},
{"HELM_PATH_REPOSITORY", settings.Home.Repository()},
{"HELM_PATH_REPOSITORY_FILE", settings.Home.RepositoryFile()},
{"HELM_PATH_CACHE", settings.Home.Cache()},
{"HELM_PATH_LOCAL_REPOSITORY", settings.Home.LocalRepository()},
{"HELM_PATH_STARTER", settings.Home.Starters()},
{"TILLER_HOST", settings.TillerHost},
{"TILLER_NAMESPACE", settings.TillerNamespace},
} {
if got := os.Getenv(tt.name); got != tt.expect {
t.Errorf("Expected $%s=%q, got %q", tt.name, tt.expect, got)

@ -75,7 +75,7 @@ func tpl(t string, vals map[string]interface{}, out io.Writer) error {
}
func debug(format string, args ...interface{}) {
if flagDebug {
if settings.FlagDebug {
format = fmt.Sprintf("[debug] %s\n", format)
fmt.Printf(format, args...)
}

@ -22,6 +22,7 @@ import (
"github.com/spf13/cobra"
"k8s.io/helm/pkg/getter/defaultgetters"
"k8s.io/helm/pkg/helm/helmpath"
"k8s.io/helm/pkg/repo"
)
@ -54,7 +55,7 @@ func newRepoAddCmd(out io.Writer) *cobra.Command {
add.name = args[0]
add.url = args[1]
add.home = helmpath.Home(homePath())
add.home = settings.Home
return add.run()
},
@ -97,7 +98,7 @@ func addRepository(name, url string, home helmpath.Home, certFile, keyFile, caFi
CAFile: caFile,
}
r, err := repo.NewChartRepository(&c)
r, err := repo.NewChartRepository(&c, defaultgetters.Get(settings))
if err != nil {
return err
}

@ -21,7 +21,6 @@ import (
"os"
"testing"
"k8s.io/helm/pkg/helm/helmpath"
"k8s.io/helm/pkg/repo"
"k8s.io/helm/pkg/repo/repotest"
)
@ -34,14 +33,14 @@ func TestRepoAddCmd(t *testing.T) {
t.Fatal(err)
}
oldhome := homePath()
helmHome = thome
oldhome := settings.Home
settings.Home = thome
defer func() {
srv.Stop()
helmHome = oldhome
os.Remove(thome)
settings.Home = oldhome
os.Remove(thome.String())
}()
if err := ensureTestHome(helmpath.Home(thome), t); err != nil {
if err := ensureTestHome(thome, t); err != nil {
t.Fatal(err)
}
@ -68,13 +67,13 @@ func TestRepoAdd(t *testing.T) {
t.Fatal(err)
}
oldhome := homePath()
helmHome = thome
hh := helmpath.Home(thome)
oldhome := settings.Home
settings.Home = thome
hh := thome
defer func() {
ts.Stop()
helmHome = oldhome
os.Remove(thome)
settings.Home = oldhome
os.Remove(thome.String())
}()
if err := ensureTestHome(hh, t); err != nil {
t.Fatal(err)

@ -42,7 +42,7 @@ func newRepoListCmd(out io.Writer) *cobra.Command {
Use: "list [flags]",
Short: "list chart repositories",
RunE: func(cmd *cobra.Command, args []string) error {
list.home = helmpath.Home(homePath())
list.home = settings.Home
return list.run()
},
}

@ -47,7 +47,7 @@ func newRepoRemoveCmd(out io.Writer) *cobra.Command {
return err
}
remove.name = args[0]
remove.home = helmpath.Home(homePath())
remove.home = settings.Home
return remove.run()
},

@ -33,13 +33,13 @@ func TestRepoRemove(t *testing.T) {
t.Fatal(err)
}
oldhome := homePath()
helmHome = thome
oldhome := settings.Home
settings.Home = thome
hh := helmpath.Home(thome)
defer func() {
ts.Stop()
helmHome = oldhome
os.Remove(thome)
settings.Home = oldhome
os.Remove(thome.String())
}()
if err := ensureTestHome(hh, t); err != nil {
t.Fatal(err)

@ -24,6 +24,7 @@ import (
"github.com/spf13/cobra"
"k8s.io/helm/pkg/getter/defaultgetters"
"k8s.io/helm/pkg/helm/helmpath"
"k8s.io/helm/pkg/repo"
)
@ -57,7 +58,7 @@ func newRepoUpdateCmd(out io.Writer) *cobra.Command {
Short: "update information on available charts in the chart repositories",
Long: updateDesc,
RunE: func(cmd *cobra.Command, args []string) error {
u.home = helmpath.Home(homePath())
u.home = settings.Home
return u.run()
},
}
@ -75,7 +76,7 @@ func (u *repoUpdateCmd) run() error {
}
var repos []*repo.ChartRepository
for _, cfg := range f.Repositories {
r, err := repo.NewChartRepository(cfg)
r, err := repo.NewChartRepository(cfg, defaultgetters.Get(settings))
if err != nil {
return err
}

@ -23,6 +23,7 @@ import (
"strings"
"testing"
"k8s.io/helm/pkg/getter/defaultgetters"
"k8s.io/helm/pkg/helm/helmpath"
"k8s.io/helm/pkg/repo"
"k8s.io/helm/pkg/repo/repotest"
@ -33,11 +34,11 @@ func TestUpdateCmd(t *testing.T) {
if err != nil {
t.Fatal(err)
}
oldhome := homePath()
helmHome = thome
oldhome := settings.Home
settings.Home = thome
defer func() {
helmHome = oldhome
os.Remove(thome)
settings.Home = oldhome
os.Remove(thome.String())
}()
out := bytes.NewBuffer(nil)
@ -68,13 +69,13 @@ func TestUpdateCharts(t *testing.T) {
t.Fatal(err)
}
oldhome := homePath()
helmHome = thome
oldhome := settings.Home
settings.Home = thome
hh := helmpath.Home(thome)
defer func() {
ts.Stop()
helmHome = oldhome
os.Remove(thome)
settings.Home = oldhome
os.Remove(thome.String())
}()
if err := ensureTestHome(hh, t); err != nil {
t.Fatal(err)
@ -84,7 +85,7 @@ func TestUpdateCharts(t *testing.T) {
Name: "charts",
URL: ts.URL(),
Cache: hh.CacheIndex("charts"),
})
}, defaultgetters.Get(settings))
if err != nil {
t.Error(err)
}

@ -63,8 +63,8 @@ func newResetCmd(client helm.Interface, out io.Writer) *cobra.Command {
return errors.New("This command does not accept arguments")
}
d.namespace = tillerNamespace
d.home = helmpath.Home(homePath())
d.namespace = settings.TillerNamespace
d.home = settings.Home
d.client = ensureHelmClient(d.client)
return d.run()

@ -48,7 +48,7 @@ type searchCmd struct {
}
func newSearchCmd(out io.Writer) *cobra.Command {
sc := &searchCmd{out: out, helmhome: helmpath.Home(homePath())}
sc := &searchCmd{out: out, helmhome: settings.Home}
cmd := &cobra.Command{
Use: "search [keyword]",

@ -68,9 +68,9 @@ func TestSearchCmd(t *testing.T) {
},
}
oldhome := helmHome
helmHome = "testdata/helmhome"
defer func() { helmHome = oldhome }()
oldhome := settings.Home
settings.Home = "testdata/helmhome"
defer func() { settings.Home = oldhome }()
for _, tt := range tests {
buf := bytes.NewBuffer(nil)

@ -24,7 +24,6 @@ import (
"github.com/spf13/cobra"
"k8s.io/helm/pkg/helm/helmpath"
"k8s.io/helm/pkg/repo"
)
@ -62,7 +61,7 @@ func newServeCmd(out io.Writer) *cobra.Command {
}
f := cmd.Flags()
f.StringVar(&srv.repoPath, "repo-path", helmpath.Home(homePath()).LocalRepository(), "local directory path from which to serve charts")
f.StringVar(&srv.repoPath, "repo-path", settings.Home.LocalRepository(), "local directory path from which to serve charts")
f.StringVar(&srv.address, "address", "127.0.0.1:8879", "address to listen on")
f.StringVar(&srv.url, "url", "", "external URL of chart repository")

@ -67,7 +67,7 @@ func newStatusCmd(client helm.Interface, out io.Writer) *cobra.Command {
}
status.release = args[0]
if status.client == nil {
status.client = helm.NewClient(helm.Host(tillerHost))
status.client = helm.NewClient(helm.Host(settings.TillerHost))
}
return status.run()
},

@ -185,7 +185,7 @@ func (u *upgradeCmd) run() error {
return fmt.Errorf("UPGRADE FAILED: %v", prettyError(err))
}
if flagDebug {
if settings.FlagDebug {
printRelease(u.out, resp.Release)
}

@ -105,7 +105,7 @@ func (v *versionCmd) run() error {
if grpc.Code(err) == codes.Unimplemented {
return errors.New("server is too old to know its version")
}
if flagDebug {
if settings.FlagDebug {
fmt.Fprintln(os.Stderr, err)
}
return errors.New("cannot connect to Tiller")

@ -39,7 +39,7 @@ func TestVersion(t *testing.T) {
{"server", false, true, []string{"-s"}, false},
}
tillerHost = "fake-localhost"
settings.TillerHost = "fake-localhost"
for _, tt := range tests {
b := new(bytes.Buffer)
c := &fakeReleaseClient{}

@ -66,4 +66,4 @@ Environment:
* [helm verify](helm_verify.md) - verify that a chart at the given path has been signed and is valid
* [helm version](helm_version.md) - print the client/server version information
###### Auto generated by spf13/cobra on 12-Apr-2017
###### Auto generated by spf13/cobra on 16-Apr-2017

@ -34,4 +34,4 @@ helm completion
### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 11-Mar-2017
###### Auto generated by spf13/cobra on 16-Apr-2017

@ -53,4 +53,4 @@ helm create NAME
### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 11-Mar-2017
###### Auto generated by spf13/cobra on 16-Apr-2017

@ -44,4 +44,4 @@ helm delete [flags] RELEASE_NAME [...]
### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 12-Apr-2017
###### Auto generated by spf13/cobra on 16-Apr-2017

@ -70,4 +70,4 @@ for this case.
* [helm dependency list](helm_dependency_list.md) - list the dependencies for the given chart
* [helm dependency update](helm_dependency_update.md) - update charts/ based on the contents of requirements.yaml
###### Auto generated by spf13/cobra on 12-Apr-2017
###### Auto generated by spf13/cobra on 16-Apr-2017

@ -40,4 +40,4 @@ helm dependency build [flags] CHART
### SEE ALSO
* [helm dependency](helm_dependency.md) - manage a chart's dependencies
###### Auto generated by spf13/cobra on 11-Mar-2017
###### Auto generated by spf13/cobra on 16-Apr-2017

@ -32,4 +32,4 @@ helm dependency list [flags] CHART
### SEE ALSO
* [helm dependency](helm_dependency.md) - manage a chart's dependencies
###### Auto generated by spf13/cobra on 11-Mar-2017
###### Auto generated by spf13/cobra on 16-Apr-2017

@ -45,4 +45,4 @@ helm dependency update [flags] CHART
### SEE ALSO
* [helm dependency](helm_dependency.md) - manage a chart's dependencies
###### Auto generated by spf13/cobra on 11-Mar-2017
###### Auto generated by spf13/cobra on 16-Apr-2017

@ -49,4 +49,4 @@ helm fetch [flags] [chart URL | repo/chartname] [...]
### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 11-Mar-2017
###### Auto generated by spf13/cobra on 16-Apr-2017

@ -49,4 +49,4 @@ helm get [flags] RELEASE_NAME
* [helm get manifest](helm_get_manifest.md) - download the manifest for a named release
* [helm get values](helm_get_values.md) - download the values file for a named release
###### Auto generated by spf13/cobra on 12-Apr-2017
###### Auto generated by spf13/cobra on 16-Apr-2017

@ -34,4 +34,4 @@ helm get hooks [flags] RELEASE_NAME
### SEE ALSO
* [helm get](helm_get.md) - download a named release
###### Auto generated by spf13/cobra on 11-Mar-2017
###### Auto generated by spf13/cobra on 16-Apr-2017

@ -36,4 +36,4 @@ helm get manifest [flags] RELEASE_NAME
### SEE ALSO
* [helm get](helm_get.md) - download a named release
###### Auto generated by spf13/cobra on 11-Mar-2017
###### Auto generated by spf13/cobra on 16-Apr-2017

@ -33,4 +33,4 @@ helm get values [flags] RELEASE_NAME
### SEE ALSO
* [helm get](helm_get.md) - download a named release
###### Auto generated by spf13/cobra on 11-Mar-2017
###### Auto generated by spf13/cobra on 16-Apr-2017

@ -49,4 +49,4 @@ helm history [flags] RELEASE_NAME
### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 12-Apr-2017
###### Auto generated by spf13/cobra on 16-Apr-2017

@ -27,4 +27,4 @@ helm home
### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 11-Mar-2017
###### Auto generated by spf13/cobra on 16-Apr-2017

@ -61,4 +61,4 @@ helm init
### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 13-Apr-2017
###### Auto generated by spf13/cobra on 16-Apr-2017

@ -39,4 +39,4 @@ helm inspect [CHART]
* [helm inspect chart](helm_inspect_chart.md) - shows inspect chart
* [helm inspect values](helm_inspect_values.md) - shows inspect values
###### Auto generated by spf13/cobra on 11-Mar-2017
###### Auto generated by spf13/cobra on 16-Apr-2017

@ -35,4 +35,4 @@ helm inspect chart [CHART]
### SEE ALSO
* [helm inspect](helm_inspect.md) - inspect a chart
###### Auto generated by spf13/cobra on 11-Mar-2017
###### Auto generated by spf13/cobra on 16-Apr-2017

@ -35,4 +35,4 @@ helm inspect values [CHART]
### SEE ALSO
* [helm inspect](helm_inspect.md) - inspect a chart
###### Auto generated by spf13/cobra on 11-Mar-2017
###### Auto generated by spf13/cobra on 16-Apr-2017

@ -101,4 +101,4 @@ helm install [CHART]
### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 12-Apr-2017
###### Auto generated by spf13/cobra on 16-Apr-2017

@ -37,4 +37,4 @@ helm lint [flags] PATH
### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 11-Mar-2017
###### Auto generated by spf13/cobra on 16-Apr-2017

@ -70,4 +70,4 @@ helm list [flags] [FILTER]
### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 12-Apr-2017
###### Auto generated by spf13/cobra on 16-Apr-2017

@ -44,4 +44,4 @@ helm package [flags] [CHART_PATH] [...]
### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 12-Apr-2017
###### Auto generated by spf13/cobra on 16-Apr-2017

@ -25,4 +25,4 @@ Manage client-side Helm plugins.
* [helm plugin list](helm_plugin_list.md) - list installed Helm plugins
* [helm plugin remove](helm_plugin_remove.md) - remove one or more Helm plugins
###### Auto generated by spf13/cobra on 12-Apr-2017
###### Auto generated by spf13/cobra on 16-Apr-2017

@ -30,4 +30,4 @@ helm plugin install [options] <path|url>...
### SEE ALSO
* [helm plugin](helm_plugin.md) - add, list, or remove Helm plugins
###### Auto generated by spf13/cobra on 12-Apr-2017
###### Auto generated by spf13/cobra on 16-Apr-2017

@ -24,4 +24,4 @@ helm plugin list
### SEE ALSO
* [helm plugin](helm_plugin.md) - add, list, or remove Helm plugins
###### Auto generated by spf13/cobra on 12-Apr-2017
###### Auto generated by spf13/cobra on 16-Apr-2017

@ -24,4 +24,4 @@ helm plugin remove <plugin>...
### SEE ALSO
* [helm plugin](helm_plugin.md) - add, list, or remove Helm plugins
###### Auto generated by spf13/cobra on 12-Apr-2017
###### Auto generated by spf13/cobra on 16-Apr-2017

@ -31,4 +31,4 @@ Example usage:
* [helm repo remove](helm_repo_remove.md) - remove a chart repository
* [helm repo update](helm_repo_update.md) - update information on available charts in the chart repositories
###### Auto generated by spf13/cobra on 11-Mar-2017
###### Auto generated by spf13/cobra on 16-Apr-2017

@ -33,4 +33,4 @@ helm repo add [flags] [NAME] [URL]
### SEE ALSO
* [helm repo](helm_repo.md) - add, list, remove, update, and index chart repositories
###### Auto generated by spf13/cobra on 11-Mar-2017
###### Auto generated by spf13/cobra on 16-Apr-2017

@ -40,4 +40,4 @@ helm repo index [flags] [DIR]
### SEE ALSO
* [helm repo](helm_repo.md) - add, list, remove, update, and index chart repositories
###### Auto generated by spf13/cobra on 11-Mar-2017
###### Auto generated by spf13/cobra on 16-Apr-2017

@ -24,4 +24,4 @@ helm repo list [flags]
### SEE ALSO
* [helm repo](helm_repo.md) - add, list, remove, update, and index chart repositories
###### Auto generated by spf13/cobra on 11-Mar-2017
###### Auto generated by spf13/cobra on 16-Apr-2017

@ -24,4 +24,4 @@ helm repo remove [flags] [NAME]
### SEE ALSO
* [helm repo](helm_repo.md) - add, list, remove, update, and index chart repositories
###### Auto generated by spf13/cobra on 11-Mar-2017
###### Auto generated by spf13/cobra on 16-Apr-2017

@ -30,4 +30,4 @@ helm repo update
### SEE ALSO
* [helm repo](helm_repo.md) - add, list, remove, update, and index chart repositories
###### Auto generated by spf13/cobra on 11-Mar-2017
###### Auto generated by spf13/cobra on 16-Apr-2017

@ -40,4 +40,4 @@ helm reset
### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 12-Apr-2017
###### Auto generated by spf13/cobra on 16-Apr-2017

@ -45,4 +45,4 @@ helm rollback [flags] [RELEASE] [REVISION]
### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 12-Apr-2017
###### Auto generated by spf13/cobra on 16-Apr-2017

@ -36,4 +36,4 @@ helm search [keyword]
### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 11-Mar-2017
###### Auto generated by spf13/cobra on 16-Apr-2017

@ -45,4 +45,4 @@ helm serve
### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 12-Apr-2017
###### Auto generated by spf13/cobra on 16-Apr-2017

@ -44,4 +44,4 @@ helm status [flags] RELEASE_NAME
### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 12-Apr-2017
###### Auto generated by spf13/cobra on 16-Apr-2017

@ -41,4 +41,4 @@ helm test [RELEASE]
### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 12-Apr-2017
###### Auto generated by spf13/cobra on 16-Apr-2017

@ -70,4 +70,4 @@ helm upgrade [RELEASE] [CHART]
### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 12-Apr-2017
###### Auto generated by spf13/cobra on 16-Apr-2017

@ -39,4 +39,4 @@ helm verify [flags] PATH
### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 11-Mar-2017
###### Auto generated by spf13/cobra on 16-Apr-2017

@ -53,4 +53,4 @@ helm version
### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 12-Apr-2017
###### Auto generated by spf13/cobra on 16-Apr-2017

@ -82,4 +82,4 @@ Environment:
.SH HISTORY
.PP
12\-Apr\-2017 Auto generated by spf13/cobra
16\-Apr\-2017 Auto generated by spf13/cobra

@ -1,4 +1,4 @@
.TH "HELM" "1" "Mar 2017" "Auto generated by spf13/cobra" ""
.TH "HELM" "1" "Apr 2017" "Auto generated by spf13/cobra" ""
.nh
.ad l
@ -71,4 +71,4 @@ $ source <(helm completion)
.SH HISTORY
.PP
11\-Mar\-2017 Auto generated by spf13/cobra
16\-Apr\-2017 Auto generated by spf13/cobra

@ -1,4 +1,4 @@
.TH "HELM" "1" "Mar 2017" "Auto generated by spf13/cobra" ""
.TH "HELM" "1" "Apr 2017" "Auto generated by spf13/cobra" ""
.nh
.ad l
@ -83,4 +83,4 @@ will be overwritten, but other files will be left alone.
.SH HISTORY
.PP
11\-Mar\-2017 Auto generated by spf13/cobra
16\-Apr\-2017 Auto generated by spf13/cobra

@ -90,4 +90,4 @@ deleting them.
.SH HISTORY
.PP
12\-Apr\-2017 Auto generated by spf13/cobra
16\-Apr\-2017 Auto generated by spf13/cobra

@ -114,4 +114,4 @@ for this case.
.SH HISTORY
.PP
12\-Apr\-2017 Auto generated by spf13/cobra
16\-Apr\-2017 Auto generated by spf13/cobra

@ -1,4 +1,4 @@
.TH "HELM" "1" "Mar 2017" "Auto generated by spf13/cobra" ""
.TH "HELM" "1" "Apr 2017" "Auto generated by spf13/cobra" ""
.nh
.ad l
@ -66,4 +66,4 @@ of 'helm dependency update'.
.SH HISTORY
.PP
11\-Mar\-2017 Auto generated by spf13/cobra
16\-Apr\-2017 Auto generated by spf13/cobra

@ -1,4 +1,4 @@
.TH "HELM" "1" "Mar 2017" "Auto generated by spf13/cobra" ""
.TH "HELM" "1" "Apr 2017" "Auto generated by spf13/cobra" ""
.nh
.ad l
@ -55,4 +55,4 @@ if it cannot find a requirements.yaml.
.SH HISTORY
.PP
11\-Mar\-2017 Auto generated by spf13/cobra
16\-Apr\-2017 Auto generated by spf13/cobra

@ -1,4 +1,4 @@
.TH "HELM" "1" "Mar 2017" "Auto generated by spf13/cobra" ""
.TH "HELM" "1" "Apr 2017" "Auto generated by spf13/cobra" ""
.nh
.ad l
@ -75,4 +75,4 @@ in the requirements.yaml file, but (b) at the wrong version.
.SH HISTORY
.PP
11\-Mar\-2017 Auto generated by spf13/cobra
16\-Apr\-2017 Auto generated by spf13/cobra

@ -1,4 +1,4 @@
.TH "HELM" "1" "Mar 2017" "Auto generated by spf13/cobra" ""
.TH "HELM" "1" "Apr 2017" "Auto generated by spf13/cobra" ""
.nh
.ad l
@ -91,4 +91,4 @@ result in an error, and the chart will not be saved locally.
.SH HISTORY
.PP
11\-Mar\-2017 Auto generated by spf13/cobra
16\-Apr\-2017 Auto generated by spf13/cobra

@ -86,4 +86,4 @@ chart, the supplied values, and the generated manifest file.
.SH HISTORY
.PP
12\-Apr\-2017 Auto generated by spf13/cobra
16\-Apr\-2017 Auto generated by spf13/cobra

@ -1,4 +1,4 @@
.TH "HELM" "1" "Mar 2017" "Auto generated by spf13/cobra" ""
.TH "HELM" "1" "Apr 2017" "Auto generated by spf13/cobra" ""
.nh
.ad l
@ -56,4 +56,4 @@ Hooks are formatted in YAML and separated by the YAML '\-\-\-\\n' separator.
.SH HISTORY
.PP
11\-Mar\-2017 Auto generated by spf13/cobra
16\-Apr\-2017 Auto generated by spf13/cobra

@ -1,4 +1,4 @@
.TH "HELM" "1" "Mar 2017" "Auto generated by spf13/cobra" ""
.TH "HELM" "1" "Apr 2017" "Auto generated by spf13/cobra" ""
.nh
.ad l
@ -58,4 +58,4 @@ charts, those resources will also be included in the manifest.
.SH HISTORY
.PP
11\-Mar\-2017 Auto generated by spf13/cobra
16\-Apr\-2017 Auto generated by spf13/cobra

@ -1,4 +1,4 @@
.TH "HELM" "1" "Mar 2017" "Auto generated by spf13/cobra" ""
.TH "HELM" "1" "Apr 2017" "Auto generated by spf13/cobra" ""
.nh
.ad l
@ -57,4 +57,4 @@ This command downloads a values file for a given release.
.SH HISTORY
.PP
11\-Mar\-2017 Auto generated by spf13/cobra
16\-Apr\-2017 Auto generated by spf13/cobra

@ -94,4 +94,4 @@ REVISION UPDATED STATUS CHART DESCRIPTIO
.SH HISTORY
.PP
12\-Apr\-2017 Auto generated by spf13/cobra
16\-Apr\-2017 Auto generated by spf13/cobra

@ -1,4 +1,4 @@
.TH "HELM" "1" "Mar 2017" "Auto generated by spf13/cobra" ""
.TH "HELM" "1" "Apr 2017" "Auto generated by spf13/cobra" ""
.nh
.ad l
@ -48,4 +48,4 @@ any helm configuration files live.
.SH HISTORY
.PP
11\-Mar\-2017 Auto generated by spf13/cobra
16\-Apr\-2017 Auto generated by spf13/cobra

@ -124,4 +124,4 @@ To dump a manifest containing the Tiller deployment YAML, combine the
.SH HISTORY
.PP
13\-Apr\-2017 Auto generated by spf13/cobra
16\-Apr\-2017 Auto generated by spf13/cobra

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save