Commit 01f8dcdc authored by Matt Butcher's avatar Matt Butcher Committed by GitHub

Merge pull request #2094 from nokia/custom-getter

Implementation of pluggable downloaders
parents bba0214e b4ca198c
......@@ -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
.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
.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
.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
.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
.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
.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
.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
.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
.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
.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
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment