Merge branch 'master' of github.com:kubernetes/helm

pull/1670/head
Anton Galitsyn 9 years ago
commit 5b28f136b4

2
.gitignore vendored

@ -1,8 +1,10 @@
.DS_Store .DS_Store
.coverage/ .coverage/
.vimrc .vimrc
.vscode/
_dist/ _dist/
_proto/*.pb.go _proto/*.pb.go
bin/ bin/
rootfs/tiller rootfs/tiller
vendor/ vendor/
*.exe

@ -1,7 +1,7 @@
DOCKER_REGISTRY ?= gcr.io DOCKER_REGISTRY ?= gcr.io
IMAGE_PREFIX ?= kubernetes-helm IMAGE_PREFIX ?= kubernetes-helm
SHORT_NAME ?= tiller SHORT_NAME ?= tiller
TARGETS = darwin/amd64 linux/amd64 linux/386 TARGETS = darwin/amd64 linux/amd64 linux/386 windows/amd64
DIST_DIRS = find * -type d -exec DIST_DIRS = find * -type d -exec
# go option # go option
@ -84,6 +84,13 @@ test-style:
protoc: protoc:
$(MAKE) -C _proto/ all $(MAKE) -C _proto/ all
.PHONY: docs
docs: build
@mkdir -p docs/helm docs/man/man1
bin/helm docs --dir ./docs/helm
bin/helm docs --dir ./docs/man/man1 --type man
bin/helm docs --dir ./scripts --type bash
.PHONY: clean .PHONY: clean
clean: clean:
@rm -rf $(BINDIR) ./rootfs/tiller ./_dist @rm -rf $(BINDIR) ./rootfs/tiller ./_dist

@ -51,6 +51,7 @@ including installing pre-releases.
- [Kubernetes Distribution Notes](docs/kubernetes_distros.md) - [Kubernetes Distribution Notes](docs/kubernetes_distros.md)
- [Frequently Asked Questions](docs/install_faq.md) - [Frequently Asked Questions](docs/install_faq.md)
- [Using Helm](docs/using_helm.md) - [Using Helm](docs/using_helm.md)
- [Plugins](docs/plugins.md)
- [Developing Charts](docs/charts.md) - [Developing Charts](docs/charts.md)
- [Chart Lifecycle Hooks](docs/charts_hooks.md) - [Chart Lifecycle Hooks](docs/charts_hooks.md)
- [Chart Tips and Tricks](docs/charts_tips_and_tricks.md) - [Chart Tips and Tricks](docs/charts_tips_and_tricks.md)

@ -3,7 +3,7 @@ machine:
- curl -sSL https://s3.amazonaws.com/circle-downloads/install-circleci-docker.sh | bash -s -- 1.10.0 - curl -sSL https://s3.amazonaws.com/circle-downloads/install-circleci-docker.sh | bash -s -- 1.10.0
environment: environment:
GOVERSION: "1.7.1" GOVERSION: "1.7.3"
GOPATH: "${HOME}/.go_workspace" GOPATH: "${HOME}/.go_workspace"
WORKDIR: "${GOPATH}/src/k8s.io/helm" WORKDIR: "${GOPATH}/src/k8s.io/helm"
PROJECT_NAME: "kubernetes-helm" PROJECT_NAME: "kubernetes-helm"

@ -0,0 +1,80 @@
/*
Copyright 2016 The Kubernetes Authors All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package main
import (
"fmt"
"io"
"path/filepath"
"github.com/spf13/cobra"
"github.com/spf13/cobra/doc"
)
const docsDesc = `
Generate documentation files for Helm.
This command can generate documentation for Helm in the following formats:
- Markdown
- Man pages
It can also generate bash autocompletions.
$ helm docs markdown -dir mydocs/
`
type docsCmd struct {
out io.Writer
dest string
docTypeString string
topCmd *cobra.Command
}
func newDocsCmd(out io.Writer, topCmd *cobra.Command) *cobra.Command {
dc := &docsCmd{out: out, topCmd: topCmd}
cmd := &cobra.Command{
Use: "docs",
Short: "Generate documentation as markdown or man pages",
Long: docsDesc,
Hidden: true,
RunE: func(cmd *cobra.Command, args []string) error {
dc.run()
return nil
},
}
f := cmd.Flags()
f.StringVar(&dc.dest, "dir", "./", "directory to which documentation is written")
f.StringVar(&dc.docTypeString, "type", "markdown", "the type of documentation to generate (markdown, man, bash)")
return cmd
}
func (d *docsCmd) run() error {
switch d.docTypeString {
case "markdown", "mdown", "md":
return doc.GenMarkdownTree(d.topCmd, d.dest)
case "man":
manHdr := &doc.GenManHeader{Title: "HELM", Section: "1"}
return doc.GenManTree(d.topCmd, manHdr, d.dest)
case "bash":
return d.topCmd.GenBashCompletionFile(filepath.Join(d.dest, "completions.bash"))
default:
return fmt.Errorf("unknown doc type %q. Try 'markdown' or 'man'", d.docTypeString)
}
}

@ -44,6 +44,10 @@ const (
// VerifyAlways will always attempt a verification, and will fail if the // VerifyAlways will always attempt a verification, and will fail if the
// verification fails. // verification fails.
VerifyAlways VerifyAlways
// VerifyLater will fetch verification data, but not do any verification.
// This is to accommodate the case where another step of the process will
// perform verification.
VerifyLater
) )
// ChartDownloader handles downloading a chart. // ChartDownloader handles downloading a chart.
@ -67,6 +71,7 @@ type ChartDownloader struct {
// If Verify is set to VerifyNever, the verification will be nil. // If Verify is set to VerifyNever, the verification will be nil.
// If Verify is set to VerifyIfPossible, this will return a verification (or nil on failure), and print a warning on failure. // If Verify is set to VerifyIfPossible, this will return a verification (or nil on failure), and print a warning on failure.
// If Verify is set to VerifyAlways, this will return a verification or an error if the verification fails. // If Verify is set to VerifyAlways, this will return a verification or an error if the verification fails.
// If Verify is set to VerifyLater, this will download the prov file (if it exists), but not verify it.
// //
// For VerifyNever and VerifyIfPossible, the Verification may be empty. // For VerifyNever and VerifyIfPossible, the Verification may be empty.
// //
@ -106,6 +111,7 @@ func (c *ChartDownloader) DownloadTo(ref, version, dest string) (string, *proven
return destfile, nil, err return destfile, nil, err
} }
if c.Verify != VerifyLater {
ver, err = VerifyChart(destfile, c.Keyring) ver, err = VerifyChart(destfile, c.Keyring)
if err != nil { if err != nil {
// Fail always in this case, since it means the verification step // Fail always in this case, since it means the verification step
@ -113,6 +119,7 @@ func (c *ChartDownloader) DownloadTo(ref, version, dest string) (string, *proven
return destfile, ver, err return destfile, ver, err
} }
} }
}
return destfile, ver, nil return destfile, ver, nil
} }

@ -154,3 +154,47 @@ func TestDownloadTo(t *testing.T) {
return return
} }
} }
func TestDownloadTo_VerifyLater(t *testing.T) {
hh, err := ioutil.TempDir("", "helm-downloadto-")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(hh)
dest := filepath.Join(hh, "dest")
os.MkdirAll(dest, 0755)
// Set up a fake repo
srv := repotest.NewServer(hh)
defer srv.Stop()
if _, err := srv.CopyCharts("testdata/*.tgz*"); err != nil {
t.Error(err)
return
}
c := ChartDownloader{
HelmHome: helmpath.Home("testdata/helmhome"),
Out: os.Stderr,
Verify: VerifyLater,
}
cname := "/signtest-0.1.0.tgz"
where, _, err := c.DownloadTo(srv.URL()+cname, "", dest)
if err != nil {
t.Error(err)
return
}
if expect := filepath.Join(dest, cname); where != expect {
t.Errorf("Expected download to %s, got %s", expect, where)
}
if _, err := os.Stat(filepath.Join(dest, cname)); err != nil {
t.Error(err)
return
}
if _, err := os.Stat(filepath.Join(dest, cname+".prov")); err != nil {
t.Error(err)
return
}
}

@ -230,7 +230,7 @@ func (m *Manager) hasAllRepos(deps []*chartutil.Dependency) error {
found = true found = true
} else { } else {
for _, repo := range repos { for _, repo := range repos {
if urlsAreEqual(repo.URL, dd.Repository) { if urlsAreEqual(repo.URL, strings.TrimSuffix(dd.Repository, "/")) {
found = true found = true
} }
} }
@ -317,6 +317,8 @@ func (m *Manager) parallelRepoUpdate(repos []*repo.Entry) {
func urlsAreEqual(a, b string) bool { func urlsAreEqual(a, b string) bool {
au, err := url.Parse(a) au, err := url.Parse(a)
if err != nil { if err != nil {
a = filepath.Clean(a)
b = filepath.Clean(b)
// If urls are paths, return true only if they are an exact match // If urls are paths, return true only if they are an exact match
return a == b return a == b
} }
@ -324,6 +326,13 @@ func urlsAreEqual(a, b string) bool {
if err != nil { if err != nil {
return false return false
} }
for _, u := range []*url.URL{au, bu} {
if u.Path == "" {
u.Path = "/"
}
u.Path = filepath.Clean(u.Path)
}
return au.String() == bu.String() return au.String() == bu.String()
} }

@ -135,3 +135,27 @@ func TestGetRepoNames(t *testing.T) {
} }
} }
} }
func TestUrlsAreEqual(t *testing.T) {
for _, tt := range []struct {
a, b string
match bool
}{
{"http://example.com", "http://example.com", true},
{"http://example.com", "http://another.example.com", false},
{"https://example.com", "https://example.com", true},
{"http://example.com/", "http://example.com", true},
{"https://example.com", "http://example.com", false},
{"http://example.com/foo", "http://example.com/foo/", true},
{"http://example.com/foo//", "http://example.com/foo/", true},
{"http://example.com/./foo/", "http://example.com/foo/", true},
{"http://example.com/bar/../foo/", "http://example.com/foo/", true},
{"/foo", "/foo", true},
{"/foo", "/foo/", true},
{"/foo/.", "/foo/", true},
} {
if tt.match != urlsAreEqual(tt.a, tt.b) {
t.Errorf("Expected %q==%q to be %t", tt.a, tt.b, tt.match)
}
}
}

@ -54,6 +54,7 @@ type fetchCmd struct {
version string version string
verify bool verify bool
verifyLater bool
keyring string keyring string
certFile string certFile string
@ -88,6 +89,7 @@ func newFetchCmd(out io.Writer) *cobra.Command {
f.BoolVar(&fch.untar, "untar", false, "if set to true, will untar the chart after downloading it") f.BoolVar(&fch.untar, "untar", false, "if set to true, will untar the chart after downloading it")
f.StringVar(&fch.untardir, "untardir", ".", "if untar is specified, this flag specifies the name of the directory into which the chart is expanded") f.StringVar(&fch.untardir, "untardir", ".", "if untar is specified, this flag specifies the name of the directory into which the chart is expanded")
f.BoolVar(&fch.verify, "verify", false, "verify the package against its signature") f.BoolVar(&fch.verify, "verify", false, "verify the package against its signature")
f.BoolVar(&fch.verifyLater, "prov", false, "fetch the provenance file, but don't perform verification")
f.StringVar(&fch.version, "version", "", "specific version of a chart. Without this, the latest version is fetched") f.StringVar(&fch.version, "version", "", "specific version of a chart. Without this, the latest version is fetched")
f.StringVar(&fch.keyring, "keyring", defaultKeyring(), "keyring containing public keys") f.StringVar(&fch.keyring, "keyring", defaultKeyring(), "keyring containing public keys")
f.StringVarP(&fch.destdir, "destination", "d", ".", "location to write the chart. If this and tardir are specified, tardir is appended to this") f.StringVarP(&fch.destdir, "destination", "d", ".", "location to write the chart. If this and tardir are specified, tardir is appended to this")
@ -119,6 +121,8 @@ func (f *fetchCmd) run() error {
if f.verify { if f.verify {
c.Verify = downloader.VerifyAlways c.Verify = downloader.VerifyAlways
} else if f.verifyLater {
c.Verify = downloader.VerifyLater
} }
// If untar is set, we fetch to a tempdir, then untar and copy after // If untar is set, we fetch to a tempdir, then untar and copy after

@ -31,6 +31,7 @@ import (
"k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/client/restclient"
"k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/client/unversioned"
"k8s.io/helm/cmd/helm/helmpath"
"k8s.io/helm/pkg/kube" "k8s.io/helm/pkg/kube"
) )
@ -91,7 +92,7 @@ func newRootCmd(out io.Writer) *cobra.Command {
p.StringVar(&helmHome, "home", home, "location of your Helm config. Overrides $HELM_HOME") p.StringVar(&helmHome, "home", home, "location of your Helm config. Overrides $HELM_HOME")
p.StringVar(&tillerHost, "host", thost, "address of tiller. Overrides $HELM_HOST") p.StringVar(&tillerHost, "host", thost, "address of tiller. Overrides $HELM_HOST")
p.StringVar(&kubeContext, "kube-context", "", "name of the kubeconfig context to use") p.StringVar(&kubeContext, "kube-context", "", "name of the kubeconfig context to use")
p.BoolVarP(&flagDebug, "debug", "", false, "enable verbose output") p.BoolVar(&flagDebug, "debug", false, "enable verbose output")
// Tell gRPC not to log to console. // Tell gRPC not to log to console.
grpclog.SetLogger(log.New(ioutil.Discard, "", log.LstdFlags)) grpclog.SetLogger(log.New(ioutil.Discard, "", log.LstdFlags))
@ -121,9 +122,17 @@ func newRootCmd(out io.Writer) *cobra.Command {
newUpgradeCmd(nil, out), newUpgradeCmd(nil, out),
newVerifyCmd(out), newVerifyCmd(out),
newVersionCmd(nil, out), newVersionCmd(nil, out),
// Hidden documentation generator command: 'helm docs'
newDocsCmd(out, cmd),
// Deprecated // Deprecated
rup, rup,
) )
// Find and add plugins
loadPlugins(cmd, helmpath.Home(homePath()), out)
return cmd return cmd
} }
@ -141,7 +150,7 @@ func setupConnection(c *cobra.Command, args []string) error {
return err return err
} }
tillerHost = fmt.Sprintf(":%d", tunnel.Local) tillerHost = fmt.Sprintf("localhost:%d", tunnel.Local)
if flagDebug { if flagDebug {
fmt.Printf("Created tunnel using local port: '%d'\n", tunnel.Local) fmt.Printf("Created tunnel using local port: '%d'\n", tunnel.Local)
} }
@ -151,6 +160,7 @@ func setupConnection(c *cobra.Command, args []string) error {
if flagDebug { if flagDebug {
fmt.Printf("SERVER: %q\n", tillerHost) fmt.Printf("SERVER: %q\n", tillerHost)
} }
// Plugin support.
return nil return nil
} }

@ -241,7 +241,7 @@ func tempHelmHome(t *testing.T) (string, error) {
// //
// t is used only for logging. // t is used only for logging.
func ensureTestHome(home helmpath.Home, t *testing.T) error { func ensureTestHome(home helmpath.Home, t *testing.T) error {
configDirectories := []string{home.String(), home.Repository(), home.Cache(), home.LocalRepository(), home.Starters()} configDirectories := []string{home.String(), home.Repository(), home.Cache(), home.LocalRepository(), home.Plugins(), home.Starters()}
for _, p := range configDirectories { for _, p := range configDirectories {
if fi, err := os.Stat(p); err != nil { if fi, err := os.Stat(p); err != nil {
if err := os.MkdirAll(p, 0755); err != nil { if err := os.MkdirAll(p, 0755); err != nil {

@ -67,3 +67,8 @@ func (h Home) LocalRepository(paths ...string) string {
frag := append([]string{string(h), "repository/local"}, paths...) frag := append([]string{string(h), "repository/local"}, paths...)
return filepath.Join(frag...) return filepath.Join(frag...)
} }
// Plugins returns the path to the plugins directory.
func (h Home) Plugins() string {
return filepath.Join(string(h), "plugins")
}

@ -0,0 +1,40 @@
// Copyright 2016 The Kubernetes Authors All rights reserved.
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// +build darwin dragonfly freebsd linux nacl netbsd openbsd solaris
// +build !windows
package helmpath
import (
"runtime"
"testing"
)
func TestHelmHome(t *testing.T) {
hh := Home("/r")
isEq := func(t *testing.T, a, b string) {
if a != b {
t.Error(runtime.GOOS)
t.Errorf("Expected %q, got %q", a, b)
}
}
isEq(t, hh.String(), "/r")
isEq(t, hh.Repository(), "/r/repository")
isEq(t, hh.RepositoryFile(), "/r/repository/repositories.yaml")
isEq(t, hh.LocalRepository(), "/r/repository/local")
isEq(t, hh.Cache(), "/r/repository/cache")
isEq(t, hh.CacheIndex("t"), "/r/repository/cache/t-index.yaml")
isEq(t, hh.Starters(), "/r/starters")
}

@ -0,0 +1,37 @@
// Copyright 2016 The Kubernetes Authors All rights reserved.
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// +build windows
package helmpath
import (
"testing"
)
func TestHelmHome(t *testing.T) {
hh := Home("r:\\")
isEq := func(t *testing.T, a, b string) {
if a != b {
t.Errorf("Expected %q, got %q", b, a)
}
}
isEq(t, hh.String(), "r:\\")
isEq(t, hh.Repository(), "r:\\repository")
isEq(t, hh.RepositoryFile(), "r:\\repository\\repositories.yaml")
isEq(t, hh.LocalRepository(), "r:\\repository\\local")
isEq(t, hh.Cache(), "r:\\repository\\cache")
isEq(t, hh.CacheIndex("t"), "r:\\repository\\cache\\t-index.yaml")
isEq(t, hh.Starters(), "r:\\starters")
}

@ -144,7 +144,7 @@ func (i *initCmd) run() error {
// //
// If $HELM_HOME does not exist, this function will create it. // If $HELM_HOME does not exist, this function will create it.
func ensureHome(home helmpath.Home, out io.Writer) error { func ensureHome(home helmpath.Home, out io.Writer) error {
configDirectories := []string{home.String(), home.Repository(), home.Cache(), home.LocalRepository(), home.Starters()} configDirectories := []string{home.String(), home.Repository(), home.Cache(), home.LocalRepository(), home.Plugins(), home.Starters()}
for _, p := range configDirectories { for _, p := range configDirectories {
if fi, err := os.Stat(p); err != nil { if fi, err := os.Stat(p); err != nil {
fmt.Fprintf(out, "Creating %s \n", p) fmt.Fprintf(out, "Creating %s \n", p)

@ -49,14 +49,14 @@ func TestInspect(t *testing.T) {
} }
expect := []string{ expect := []string{
strings.TrimSpace(string(cdata)), strings.Replace(strings.TrimSpace(string(cdata)), "\r", "", -1),
strings.TrimSpace(string(data)), strings.Replace(strings.TrimSpace(string(data)), "\r", "", -1),
} }
// Problem: ghodss/yaml doesn't marshal into struct order. To solve, we // Problem: ghodss/yaml doesn't marshal into struct order. To solve, we
// have to carefully craft the Chart.yaml to match. // have to carefully craft the Chart.yaml to match.
for i, got := range parts { for i, got := range parts {
got = strings.TrimSpace(got) got = strings.Replace(strings.TrimSpace(got), "\r", "", -1)
if got != expect[i] { if got != expect[i] {
t.Errorf("Expected\n%q\nGot\n%q\n", expect[i], got) t.Errorf("Expected\n%q\nGot\n%q\n", expect[i], got)
} }

@ -25,7 +25,6 @@ import (
"net/http" "net/http"
"os" "os"
"path/filepath" "path/filepath"
"strconv"
"strings" "strings"
"text/template" "text/template"
@ -36,6 +35,7 @@ import (
"k8s.io/helm/cmd/helm/downloader" "k8s.io/helm/cmd/helm/downloader"
"k8s.io/helm/cmd/helm/helmpath" "k8s.io/helm/cmd/helm/helmpath"
"k8s.io/helm/cmd/helm/strvals"
"k8s.io/helm/pkg/helm" "k8s.io/helm/pkg/helm"
"k8s.io/helm/pkg/kube" "k8s.io/helm/pkg/kube"
"k8s.io/helm/pkg/proto/hapi/release" "k8s.io/helm/pkg/proto/hapi/release"
@ -96,7 +96,7 @@ type installCmd struct {
keyring string keyring string
out io.Writer out io.Writer
client helm.Interface client helm.Interface
values *values values string
nameTemplate string nameTemplate string
version string version string
} }
@ -105,7 +105,6 @@ func newInstallCmd(c helm.Interface, out io.Writer) *cobra.Command {
inst := &installCmd{ inst := &installCmd{
out: out, out: out,
client: c, client: c,
values: new(values),
} }
cmd := &cobra.Command{ cmd := &cobra.Command{
@ -134,7 +133,7 @@ func newInstallCmd(c helm.Interface, out io.Writer) *cobra.Command {
f.BoolVar(&inst.dryRun, "dry-run", false, "simulate an install") f.BoolVar(&inst.dryRun, "dry-run", false, "simulate an install")
f.BoolVar(&inst.disableHooks, "no-hooks", false, "prevent hooks from running during install") f.BoolVar(&inst.disableHooks, "no-hooks", false, "prevent hooks from running during install")
f.BoolVar(&inst.replace, "replace", false, "re-use the given name, even if that name is already used. This is unsafe in production") f.BoolVar(&inst.replace, "replace", false, "re-use the given name, even if that name is already used. This is unsafe in production")
f.Var(inst.values, "set", "set values on the command line. Separate values with commas: key1=val1,key2=val2") f.StringVar(&inst.values, "set", "", "set values on the command line. Separate values with commas: key1=val1,key2=val2")
f.StringVar(&inst.nameTemplate, "name-template", "", "specify template used to name the release") f.StringVar(&inst.nameTemplate, "name-template", "", "specify template used to name the release")
f.BoolVar(&inst.verify, "verify", false, "verify the package before installing it") f.BoolVar(&inst.verify, "verify", false, "verify the package before installing it")
f.StringVar(&inst.keyring, "keyring", defaultKeyring(), "location of public keys used for verification") f.StringVar(&inst.keyring, "keyring", defaultKeyring(), "location of public keys used for verification")
@ -200,7 +199,7 @@ func (i *installCmd) run() error {
} }
func (i *installCmd) vals() ([]byte, error) { func (i *installCmd) vals() ([]byte, error) {
var buffer bytes.Buffer base := map[string]interface{}{}
// User specified a values file via -f/--values // User specified a values file via -f/--values
if i.valuesFile != "" { if i.valuesFile != "" {
@ -208,24 +207,17 @@ func (i *installCmd) vals() ([]byte, error) {
if err != nil { if err != nil {
return []byte{}, err return []byte{}, err
} }
buffer.Write(bytes)
// Force a new line. An extra won't matter, but a missing one can if err := yaml.Unmarshal(bytes, &base); err != nil {
// break things. https://github.com/kubernetes/helm/issues/1430 return []byte{}, fmt.Errorf("failed to parse %s: %s", i.valuesFile, err)
buffer.WriteRune('\n')
} }
// User specified value pairs via --set
// These override any values in the specified file
if len(i.values.pairs) > 0 {
bytes, err := i.values.yaml()
if err != nil {
return []byte{}, err
} }
buffer.Write(bytes)
if err := strvals.ParseInto(i.values, base); err != nil {
return []byte{}, fmt.Errorf("failed parsing --set data: %s", err)
} }
return buffer.Bytes(), nil return yaml.Marshal(base)
} }
// printRelease prints info about a release if the flagDebug is true. // printRelease prints info about a release if the flagDebug is true.
@ -244,81 +236,6 @@ func (i *installCmd) printRelease(rel *release.Release) {
} }
} }
// values represents the command-line value pairs
type values struct {
pairs map[string]interface{}
}
func (v *values) yaml() ([]byte, error) {
return yaml.Marshal(v.pairs)
}
func (v *values) String() string {
out, _ := v.yaml()
return string(out)
}
func (v *values) Type() string {
// Added to pflags.Value interface, but not documented there.
return "struct"
}
func (v *values) Set(data string) error {
v.pairs = map[string]interface{}{}
items := strings.Split(data, ",")
for _, item := range items {
n, val := splitPair(item)
names := strings.Split(n, ".")
ln := len(names)
current := &v.pairs
for i := 0; i < ln; i++ {
if i+1 == ln {
// We're at the last element. Set it.
(*current)[names[i]] = val
} else {
//
if e, ok := (*current)[names[i]]; !ok {
m := map[string]interface{}{}
(*current)[names[i]] = m
current = &m
} else if m, ok := e.(map[string]interface{}); ok {
current = &m
}
}
}
}
return nil
}
func typedVal(val string) interface{} {
if strings.EqualFold(val, "true") {
return true
}
if strings.EqualFold(val, "false") {
return false
}
if iv, err := strconv.ParseInt(val, 10, 64); err == nil {
return iv
}
if fv, err := strconv.ParseFloat(val, 64); err == nil {
return fv
}
return val
}
func splitPair(item string) (name string, value interface{}) {
pair := strings.SplitN(item, "=", 2)
if len(pair) == 1 {
return pair[0], true
}
return pair[0], typedVal(pair[1])
}
// locateChartPath looks for a chart directory in known places, and returns either the full path or an error. // locateChartPath looks for a chart directory in known places, and returns either the full path or an error.
// //
// This does not ensure that the chart is well-formed; only that the requested filename exists. // This does not ensure that the chart is well-formed; only that the requested filename exists.

@ -17,7 +17,6 @@ limitations under the License.
package main package main
import ( import (
"fmt"
"io" "io"
"regexp" "regexp"
"strings" "strings"
@ -99,71 +98,6 @@ func TestInstall(t *testing.T) {
}) })
} }
func TestValues(t *testing.T) {
args := "sailor=sinbad,good,port.source=baghdad,port.destination=basrah,success=True"
vobj := new(values)
vobj.Set(args)
if vobj.Type() != "struct" {
t.Fatalf("Expected Type to be struct, got %s", vobj.Type())
}
vals := vobj.pairs
if fmt.Sprint(vals["good"]) != "true" {
t.Errorf("Expected good to be true. Got %v", vals["good"])
}
if !vals["success"].(bool) {
t.Errorf("Expected boolean true. Got %T, %v", vals["success"], vals["success"])
}
port := vals["port"].(map[string]interface{})
if fmt.Sprint(port["source"]) != "baghdad" {
t.Errorf("Expected source to be baghdad. Got %s", port["source"])
}
if fmt.Sprint(port["destination"]) != "basrah" {
t.Errorf("Expected source to be baghdad. Got %s", port["source"])
}
y := `good: true
port:
destination: basrah
source: baghdad
sailor: sinbad
success: true
`
out, err := vobj.yaml()
if err != nil {
t.Fatal(err)
}
if string(out) != y {
t.Errorf("Expected YAML to be \n%s\nGot\n%s\n", y, out)
}
if vobj.String() != y {
t.Errorf("Expected String() to be \n%s\nGot\n%s\n", y, out)
}
// Combined case, overriding a property
vals["sailor"] = "pisti"
updatedYAML := `good: true
port:
destination: basrah
source: baghdad
sailor: pisti
success: true
`
newOut, err := vobj.yaml()
if err != nil {
t.Fatal(err)
}
if string(newOut) != updatedYAML {
t.Errorf("Expected YAML to be \n%s\nGot\n%s\n", updatedYAML, newOut)
}
}
type nameTemplateTestCase struct { type nameTemplateTestCase struct {
tpl string tpl string
expected string expected string

@ -142,8 +142,8 @@ func (l *listCmd) run() error {
return nil return nil
} }
if res.Next != "" { if res.Next != "" && !l.short {
fmt.Fprintf(l.out, "\tnext: %s", res.Next) fmt.Fprintf(l.out, "\tnext: %s\n", res.Next)
} }
rels := res.Releases rels := res.Releases
@ -194,7 +194,7 @@ func (l *listCmd) statusCodes() []release.Status_Code {
func formatList(rels []*release.Release) string { func formatList(rels []*release.Release) string {
table := uitable.New() table := uitable.New()
table.MaxColWidth = 30 table.MaxColWidth = 60
table.AddRow("NAME", "REVISION", "UPDATED", "STATUS", "CHART") table.AddRow("NAME", "REVISION", "UPDATED", "STATUS", "CHART")
for _, r := range rels { for _, r := range rels {
c := fmt.Sprintf("%s-%s", r.Chart.Metadata.Name, r.Chart.Metadata.Version) c := fmt.Sprintf("%s-%s", r.Chart.Metadata.Name, r.Chart.Metadata.Version)

@ -168,5 +168,5 @@ func promptUser(name string) ([]byte, error) {
fmt.Printf("Password for key %q > ", name) fmt.Printf("Password for key %q > ", name)
pw, err := terminal.ReadPassword(int(syscall.Stdin)) pw, err := terminal.ReadPassword(int(syscall.Stdin))
fmt.Println() fmt.Println()
return []byte(pw), err return pw, err
} }

@ -0,0 +1,186 @@
/*
Copyright 2016 The Kubernetes Authors All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package main
import (
"fmt"
"io"
"os"
"os/exec"
"path/filepath"
"strings"
"github.com/spf13/cobra"
"k8s.io/helm/cmd/helm/helmpath"
"k8s.io/helm/pkg/plugin"
)
const pluginEnvVar = "HELM_PLUGIN"
// loadPlugins loads plugins into the command list.
//
// 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) {
plugdirs := os.Getenv(pluginEnvVar)
if plugdirs == "" {
plugdirs = home.Plugins()
}
found, err := findPlugins(plugdirs)
if err != nil {
fmt.Fprintf(os.Stderr, "failed to load plugins: %s", err)
return
}
// Now we create commands for all of these.
for _, plug := range found {
plug := plug
md := plug.Metadata
if md.Usage == "" {
md.Usage = fmt.Sprintf("the %q plugin", md.Name)
}
c := &cobra.Command{
Use: md.Name,
Short: md.Usage,
Long: md.Description,
RunE: func(cmd *cobra.Command, args []string) error {
k, u := manuallyProcessArgs(args)
if err := cmd.ParseFlags(k); err != nil {
return err
}
// Call setupEnv before PrepareCommand because
// PrepareCommand uses os.ExpandEnv and expects the
// setupEnv vars.
setupEnv(md.Name, plug.Dir, plugdirs, home)
main, argv := plug.PrepareCommand(u)
prog := exec.Command(main, argv...)
prog.Env = os.Environ()
prog.Stdout = out
prog.Stderr = os.Stderr
if err := prog.Run(); err != nil {
if eerr, ok := err.(*exec.ExitError); ok {
os.Stderr.Write(eerr.Stderr)
return fmt.Errorf("plugin %q exited with error", md.Name)
}
return err
}
return nil
},
// This passes all the flags to the subcommand.
DisableFlagParsing: true,
}
if md.UseTunnel {
c.PersistentPreRunE = func(cmd *cobra.Command, args []string) error {
// Parse the parent flag, but not the local flags.
k, _ := manuallyProcessArgs(args)
if err := c.Parent().ParseFlags(k); err != nil {
return err
}
return setupConnection(cmd, args)
}
}
// TODO: Make sure a command with this name does not already exist.
baseCmd.AddCommand(c)
}
}
// manuallyProcessArgs processes an arg array, removing special args.
//
// Returns two sets of args: known and unknown (in that order)
func manuallyProcessArgs(args []string) ([]string, []string) {
known := []string{}
unknown := []string{}
kvargs := []string{"--host", "--kube-context", "--home"}
knownArg := func(a string) bool {
for _, pre := range kvargs {
if strings.HasPrefix(a, pre+"=") {
return true
}
}
return false
}
for i := 0; i < len(args); i++ {
switch a := args[i]; a {
case "--debug":
known = append(known, a)
case "--host", "--kube-context", "--home":
known = append(known, a, args[i+1])
i++
default:
if knownArg(a) {
known = append(known, a)
continue
}
unknown = append(unknown, a)
}
}
return known, unknown
}
// findPlugins returns a list of YAML files that describe plugins.
func findPlugins(plugdirs string) ([]*plugin.Plugin, error) {
found := []*plugin.Plugin{}
// Let's get all UNIXy and allow path separators
for _, p := range filepath.SplitList(plugdirs) {
matches, err := plugin.LoadAll(p)
if err != nil {
return matches, err
}
found = append(found, matches...)
}
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,
} {
os.Setenv(key, val)
}
if flagDebug {
os.Setenv("HELM_DEBUG", "1")
}
}

@ -0,0 +1,170 @@
/*
Copyright 2016 The Kubernetes Authors All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package main
import (
"bytes"
"os"
"path/filepath"
"runtime"
"strings"
"testing"
"k8s.io/helm/cmd/helm/helmpath"
"github.com/spf13/cobra"
)
func TestManuallyProcessArgs(t *testing.T) {
input := []string{
"--debug",
"--foo",
"bar",
"--host",
"example.com",
"--kube-context",
"test1",
"--home=/tmp",
"command",
}
expectKnown := []string{
"--debug", "--host", "example.com", "--kube-context", "test1", "--home=/tmp",
}
expectUnknown := []string{
"--foo", "bar", "command",
}
known, unknown := manuallyProcessArgs(input)
for i, k := range known {
if k != expectKnown[i] {
t.Errorf("expected known flag %d to be %q, got %q", i, expectKnown[i], k)
}
}
for i, k := range unknown {
if k != expectUnknown[i] {
t.Errorf("expected unknown flag %d to be %q, got %q", i, expectUnknown[i], k)
}
}
}
func TestLoadPlugins(t *testing.T) {
// Set helm home to point to testdata
old := helmHome
helmHome = "testdata/helmhome"
defer func() {
helmHome = old
}()
hh := helmpath.Home(homePath())
out := bytes.NewBuffer(nil)
cmd := &cobra.Command{}
loadPlugins(cmd, hh, out)
envs := strings.Join([]string{
"fullenv",
hh.Plugins() + "/fullenv",
hh.Plugins(),
hh.String(),
hh.Repository(),
hh.RepositoryFile(),
hh.Cache(),
hh.LocalRepository(),
os.Args[0],
}, "\n")
// Test that the YAML file was correctly converted to a command.
tests := []struct {
use string
short string
long string
expect string
args []string
}{
{"args", "echo args", "This echos args", "-a -b -c\n", []string{"-a", "-b", "-c"}},
{"echo", "echo stuff", "This echos stuff", "hello\n", []string{}},
{"env", "env stuff", "show the env", hh.String() + "\n", []string{}},
{"fullenv", "show env vars", "show all env vars", envs + "\n", []string{}},
}
plugins := cmd.Commands()
if len(plugins) != len(tests) {
t.Fatalf("Expected %d plugins, got %d", len(tests), len(plugins))
}
for i := 0; i < len(plugins); i++ {
out.Reset()
tt := tests[i]
pp := plugins[i]
if pp.Use != tt.use {
t.Errorf("%d: Expected Use=%q, got %q", i, tt.use, pp.Use)
}
if pp.Short != tt.short {
t.Errorf("%d: Expected Use=%q, got %q", i, tt.short, pp.Short)
}
if pp.Long != tt.long {
t.Errorf("%d: Expected Use=%q, got %q", i, tt.long, pp.Long)
}
// Currently, plugins assume a Linux subsystem. Skip the execution
// tests until this is fixed
if runtime.GOOS != "windows" {
if err := pp.RunE(pp, tt.args); err != nil {
t.Errorf("Error running %s: %s", tt.use, err)
}
if out.String() != tt.expect {
t.Errorf("Expected %s to output:\n%s\ngot\n%s", tt.use, tt.expect, out.String())
}
}
}
}
func TestSetupEnv(t *testing.T) {
name := "pequod"
hh := helmpath.Home("testdata/helmhome")
base := filepath.Join(hh.Plugins(), name)
plugdirs := hh.Plugins()
flagDebug = true
defer func() {
flagDebug = false
}()
setupEnv(name, base, plugdirs, hh)
for _, tt := range []struct {
name string
expect string
}{
{"HELM_PLUGIN_NAME", name},
{"HELM_PLUGIN_DIR", base},
{"HELM_PLUGIN", hh.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},
} {
if got := os.Getenv(tt.name); got != tt.expect {
t.Errorf("Expected $%s=%q, got %q", tt.name, tt.expect, got)
}
}
}

@ -21,6 +21,7 @@ import (
"io" "io"
"net/http" "net/http"
"path/filepath" "path/filepath"
"strings"
"github.com/spf13/cobra" "github.com/spf13/cobra"
@ -117,7 +118,7 @@ func insertRepoLine(name, url string, home helmpath.Home) error {
} }
f.Add(&repo.Entry{ f.Add(&repo.Entry{
Name: name, Name: name,
URL: url, URL: strings.TrimSuffix(url, "/"),
Cache: filepath.Base(cif), Cache: filepath.Base(cif),
}) })
return f.WriteFile(home.RepositoryFile(), 0644) return f.WriteFile(home.RepositoryFile(), 0644)

@ -24,7 +24,7 @@ package search
import ( import (
"errors" "errors"
"path/filepath" "path"
"regexp" "regexp"
"sort" "sort"
"strings" "strings"
@ -70,7 +70,9 @@ func (i *Index) AddRepo(rname string, ind *repo.IndexFile, all bool) {
// By convention, an index file is supposed to have the newest at the // By convention, an index file is supposed to have the newest at the
// 0 slot, so our best bet is to grab the 0 entry and build the index // 0 slot, so our best bet is to grab the 0 entry and build the index
// entry off of that. // entry off of that.
fname := filepath.Join(rname, name) // Note: Do not use filePath.Join since on Windows it will return \
// which results in a repo name that cannot be understood.
fname := path.Join(rname, name)
if !all { if !all {
i.lines[fname] = indstr(rname, ref[0]) i.lines[fname] = indstr(rname, ref[0])
i.charts[fname] = ref[0] i.charts[fname] = ref[0]

@ -13,25 +13,20 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package helmpath /*Package strvals provides tools for working with strval lines.
import ( Helm supports a compressed format for YAML settings which we call strvals.
"testing" The format is roughly like this:
)
name=value,topname.subname=value
func TestHelmHome(t *testing.T) {
hh := Home("/r") The above is equivalent to the YAML document
isEq := func(t *testing.T, a, b string) {
if a != b { name: value
t.Errorf("Expected %q, got %q", a, b) topname:
} subname: value
}
This package provides a parser and utilities for converting the strvals format
isEq(t, hh.String(), "/r") to other formats.
isEq(t, hh.Repository(), "/r/repository") */
isEq(t, hh.RepositoryFile(), "/r/repository/repositories.yaml") package strvals
isEq(t, hh.LocalRepository(), "/r/repository/local")
isEq(t, hh.Cache(), "/r/repository/cache")
isEq(t, hh.CacheIndex("t"), "/r/repository/cache/t-index.yaml")
isEq(t, hh.Starters(), "/r/starters")
}

@ -0,0 +1,257 @@
/*
Copyright 2016 The Kubernetes Authors All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package strvals
import (
"bytes"
"errors"
"fmt"
"io"
"strconv"
"strings"
"github.com/ghodss/yaml"
)
// ErrNotList indicates that a non-list was treated as a list.
var ErrNotList = errors.New("not a list")
// ToYAML takes a string of arguments and converts to a YAML document.
func ToYAML(s string) (string, error) {
m, err := Parse(s)
if err != nil {
return "", err
}
d, err := yaml.Marshal(m)
return string(d), err
}
// Parse parses a set line.
//
// A set line is of the form name1=value1,name2=value2
func Parse(s string) (map[string]interface{}, error) {
vals := map[string]interface{}{}
scanner := bytes.NewBufferString(s)
t := newParser(scanner, vals)
err := t.parse()
return vals, err
}
//ParseInto parses a strvals line and merges the result into dest.
//
// If the strval string has a key that exists in dest, it overwrites the
// dest version.
func ParseInto(s string, dest map[string]interface{}) error {
scanner := bytes.NewBufferString(s)
t := newParser(scanner, dest)
return t.parse()
}
// parser is a simple parser that takes a strvals line and parses it into a
// map representation.
type parser struct {
sc *bytes.Buffer
data map[string]interface{}
}
func newParser(sc *bytes.Buffer, data map[string]interface{}) *parser {
return &parser{sc: sc, data: data}
}
func (t *parser) parse() error {
for {
err := t.key(t.data)
if err == nil {
continue
}
if err == io.EOF {
return nil
}
return err
}
}
func runeSet(r []rune) map[rune]bool {
s := make(map[rune]bool, len(r))
for _, rr := range r {
s[rr] = true
}
return s
}
func (t *parser) key(data map[string]interface{}) error {
stop := runeSet([]rune{'=', ',', '.'})
for {
switch k, last, err := runesUntil(t.sc, stop); {
case err != nil:
if len(k) == 0 {
return err
}
return fmt.Errorf("key %q has no value", string(k))
//set(data, string(k), "")
//return err
case last == '=':
//End of key. Consume =, Get value.
// FIXME: Get value list first
vl, e := t.valList()
switch e {
case nil:
set(data, string(k), vl)
return nil
case io.EOF:
set(data, string(k), "")
return e
case ErrNotList:
v, e := t.val()
set(data, string(k), typedVal(v))
return e
default:
return e
}
case last == ',':
// No value given. Set the value to empty string. Return error.
set(data, string(k), "")
return fmt.Errorf("key %q has no value (cannot end with ,)", string(k))
case last == '.':
// First, create or find the target map.
inner := map[string]interface{}{}
if _, ok := data[string(k)]; ok {
inner = data[string(k)].(map[string]interface{})
}
// Recurse
e := t.key(inner)
if len(inner) == 0 {
return fmt.Errorf("key map %q has no value", string(k))
}
set(data, string(k), inner)
return e
}
}
}
func set(data map[string]interface{}, key string, val interface{}) {
// If key is empty, don't set it.
if len(key) == 0 {
return
}
data[key] = val
}
func (t *parser) val() ([]rune, error) {
stop := runeSet([]rune{','})
v, _, err := runesUntil(t.sc, stop)
return v, err
}
func (t *parser) valList() ([]interface{}, error) {
r, _, e := t.sc.ReadRune()
if e != nil {
return []interface{}{}, e
}
if r != '{' {
t.sc.UnreadRune()
return []interface{}{}, ErrNotList
}
list := []interface{}{}
stop := runeSet([]rune{',', '}'})
for {
switch v, last, err := runesUntil(t.sc, stop); {
case err != nil:
if err == io.EOF {
err = errors.New("list must terminate with '}'")
}
return list, err
case last == '}':
// If this is followed by ',', consume it.
if r, _, e := t.sc.ReadRune(); e == nil && r != ',' {
t.sc.UnreadRune()
}
list = append(list, typedVal(v))
return list, nil
case last == ',':
list = append(list, typedVal(v))
}
}
}
func runesUntil(in io.RuneReader, stop map[rune]bool) ([]rune, rune, error) {
v := []rune{}
for {
switch r, _, e := in.ReadRune(); {
case e != nil:
return v, r, e
case inMap(r, stop):
return v, r, nil
case r == '\\':
next, _, e := in.ReadRune()
if e != nil {
return v, next, e
}
v = append(v, next)
default:
v = append(v, r)
}
}
}
func inMap(k rune, m map[rune]bool) bool {
_, ok := m[k]
return ok
}
func (t *parser) listVal() []rune {
v := []rune{}
for {
switch r, _, e := t.sc.ReadRune(); {
case e != nil:
// End of input or error with reader stops value parsing.
return v
case r == '\\':
//Escape char. Consume next and append.
next, _, e := t.sc.ReadRune()
if e != nil {
return v
}
v = append(v, next)
case r == ',':
//End of key. Consume ',' and return.
return v
default:
v = append(v, r)
}
}
}
func typedVal(v []rune) interface{} {
val := string(v)
if strings.EqualFold(val, "true") {
return true
}
if strings.EqualFold(val, "false") {
return false
}
if iv, err := strconv.ParseInt(val, 10, 64); err == nil {
return iv
}
return val
}

@ -0,0 +1,232 @@
/*
Copyright 2016 The Kubernetes Authors All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package strvals
import (
"testing"
"github.com/ghodss/yaml"
)
func TestParseSet(t *testing.T) {
tests := []struct {
str string
expect map[string]interface{}
err bool
}{
{
"name1=value1",
map[string]interface{}{"name1": "value1"},
false,
},
{
"name1=value1,name2=value2",
map[string]interface{}{"name1": "value1", "name2": "value2"},
false,
},
{
"name1=value1,name2=value2,",
map[string]interface{}{"name1": "value1", "name2": "value2"},
false,
},
{
str: "name1=value1,,,,name2=value2,",
err: true,
},
{
str: "name1=,name2=value2",
expect: map[string]interface{}{"name1": "", "name2": "value2"},
},
{
str: "name1,name2=",
err: true,
},
{
str: "name1,name2=value2",
err: true,
},
{
str: "name1,name2=value2\\",
err: true,
},
{
str: "name1,name2",
err: true,
},
{
"name1=one\\,two,name2=three\\,four",
map[string]interface{}{"name1": "one,two", "name2": "three,four"},
false,
},
{
"name1=one\\=two,name2=three\\=four",
map[string]interface{}{"name1": "one=two", "name2": "three=four"},
false,
},
{
"name1=one two three,name2=three two one",
map[string]interface{}{"name1": "one two three", "name2": "three two one"},
false,
},
{
"outer.inner=value",
map[string]interface{}{"outer": map[string]interface{}{"inner": "value"}},
false,
},
{
"outer.middle.inner=value",
map[string]interface{}{"outer": map[string]interface{}{"middle": map[string]interface{}{"inner": "value"}}},
false,
},
{
"outer.inner1=value,outer.inner2=value2",
map[string]interface{}{"outer": map[string]interface{}{"inner1": "value", "inner2": "value2"}},
false,
},
{
"outer.inner1=value,outer.middle.inner=value",
map[string]interface{}{
"outer": map[string]interface{}{
"inner1": "value",
"middle": map[string]interface{}{
"inner": "value",
},
},
},
false,
},
{
str: "name1.name2",
err: true,
},
{
str: "name1.name2,name1.name3",
err: true,
},
{
str: "name1.name2=",
expect: map[string]interface{}{"name1": map[string]interface{}{"name2": ""}},
},
{
str: "name1.=name2",
err: true,
},
{
str: "name1.,name2",
err: true,
},
{
"name1={value1,value2}",
map[string]interface{}{"name1": []string{"value1", "value2"}},
false,
},
{
"name1={value1,value2},name2={value1,value2}",
map[string]interface{}{
"name1": []string{"value1", "value2"},
"name2": []string{"value1", "value2"},
},
false,
},
{
"name1={1021,902}",
map[string]interface{}{"name1": []int{1021, 902}},
false,
},
{
"name1.name2={value1,value2}",
map[string]interface{}{"name1": map[string]interface{}{"name2": []string{"value1", "value2"}}},
false,
},
{
str: "name1={1021,902",
err: true,
},
}
for _, tt := range tests {
got, err := Parse(tt.str)
if err != nil {
if tt.err {
continue
}
t.Fatalf("%s: %s", tt.str, err)
}
if tt.err {
t.Errorf("%s: Expected error. Got nil", tt.str)
}
y1, err := yaml.Marshal(tt.expect)
if err != nil {
t.Fatal(err)
}
y2, err := yaml.Marshal(got)
if err != nil {
t.Fatalf("Error serializing parsed value: %s", err)
}
if string(y1) != string(y2) {
t.Errorf("%s: Expected:\n%s\nGot:\n%s", tt.str, y1, y2)
}
}
}
func TestParseInto(t *testing.T) {
got := map[string]interface{}{
"outer": map[string]interface{}{
"inner1": "overwrite",
"inner2": "value2",
},
}
input := "outer.inner1=value1,outer.inner3=value3"
expect := map[string]interface{}{
"outer": map[string]interface{}{
"inner1": "value1",
"inner2": "value2",
"inner3": "value3",
},
}
if err := ParseInto(input, got); err != nil {
t.Fatal(err)
}
y1, err := yaml.Marshal(expect)
if err != nil {
t.Fatal(err)
}
y2, err := yaml.Marshal(got)
if err != nil {
t.Fatalf("Error serializing parsed value: %s", err)
}
if string(y1) != string(y2) {
t.Errorf("%s: Expected:\n%s\nGot:\n%s", input, y1, y2)
}
}
func TestToYAML(t *testing.T) {
// The TestParse does the hard part. We just verify that YAML formatting is
// happening.
o, err := ToYAML("name=value")
if err != nil {
t.Fatal(err)
}
expect := "name: value\n"
if o != expect {
t.Errorf("Expected %q, got %q", expect, o)
}
}

@ -0,0 +1,2 @@
#!/bin/bash
echo $*

@ -0,0 +1,4 @@
name: args
usage: "echo args"
description: "This echos args"
command: "$HELM_PLUGIN_DIR/args.sh"

@ -0,0 +1,4 @@
name: echo
usage: "echo stuff"
description: "This echos stuff"
command: "echo hello"

@ -0,0 +1,4 @@
name: env
usage: "env stuff"
description: "show the env"
command: "echo $HELM_HOME"

@ -0,0 +1,10 @@
#!/bin/sh
echo $HELM_PLUGIN_NAME
echo $HELM_PLUGIN_DIR
echo $HELM_PLUGIN
echo $HELM_HOME
echo $HELM_PATH_REPOSITORY
echo $HELM_PATH_REPOSITORY_FILE
echo $HELM_PATH_CACHE
echo $HELM_PATH_LOCAL_REPOSITORY
echo $HELM_BIN

@ -0,0 +1,4 @@
name: fullenv
usage: "show env vars"
description: "show all env vars"
command: "$HELM_PLUGIN_DIR/fullenv.sh"

@ -17,14 +17,15 @@ limitations under the License.
package main package main
import ( import (
"bytes"
"fmt" "fmt"
"io" "io"
"io/ioutil" "io/ioutil"
"strings" "strings"
"github.com/ghodss/yaml"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"k8s.io/helm/cmd/helm/strvals"
"k8s.io/helm/pkg/helm" "k8s.io/helm/pkg/helm"
"k8s.io/helm/pkg/storage/driver" "k8s.io/helm/pkg/storage/driver"
) )
@ -49,7 +50,7 @@ type upgradeCmd struct {
dryRun bool dryRun bool
disableHooks bool disableHooks bool
valuesFile string valuesFile string
values *values values string
verify bool verify bool
keyring string keyring string
install bool install bool
@ -62,7 +63,6 @@ func newUpgradeCmd(client helm.Interface, out io.Writer) *cobra.Command {
upgrade := &upgradeCmd{ upgrade := &upgradeCmd{
out: out, out: out,
client: client, client: client,
values: new(values),
} }
cmd := &cobra.Command{ cmd := &cobra.Command{
@ -86,14 +86,17 @@ func newUpgradeCmd(client helm.Interface, out io.Writer) *cobra.Command {
f := cmd.Flags() f := cmd.Flags()
f.StringVarP(&upgrade.valuesFile, "values", "f", "", "path to a values YAML file") f.StringVarP(&upgrade.valuesFile, "values", "f", "", "path to a values YAML file")
f.BoolVar(&upgrade.dryRun, "dry-run", false, "simulate an upgrade") f.BoolVar(&upgrade.dryRun, "dry-run", false, "simulate an upgrade")
f.Var(upgrade.values, "set", "set values on the command line. Separate values with commas: key1=val1,key2=val2") f.StringVar(&upgrade.values, "set", "", "set values on the command line. Separate values with commas: key1=val1,key2=val2")
f.BoolVar(&upgrade.disableHooks, "disable-hooks", false, "disable pre/post upgrade hooks") f.BoolVar(&upgrade.disableHooks, "disable-hooks", false, "disable pre/post upgrade hooks. DEPRECATED. Use no-hooks")
f.BoolVar(&upgrade.disableHooks, "no-hooks", false, "disable pre/post upgrade hooks")
f.BoolVar(&upgrade.verify, "verify", false, "verify the provenance of the chart before upgrading") f.BoolVar(&upgrade.verify, "verify", false, "verify the provenance of the chart before upgrading")
f.StringVar(&upgrade.keyring, "keyring", defaultKeyring(), "path to the keyring that contains public singing keys") f.StringVar(&upgrade.keyring, "keyring", defaultKeyring(), "path to the keyring that contains public singing keys")
f.BoolVarP(&upgrade.install, "install", "i", false, "if a release by this name doesn't already exist, run an install") f.BoolVarP(&upgrade.install, "install", "i", false, "if a release by this name doesn't already exist, run an install")
f.StringVar(&upgrade.namespace, "namespace", "default", "namespace to install the release into (only used if --install is set)") f.StringVar(&upgrade.namespace, "namespace", "default", "namespace to install the release into (only used if --install is set)")
f.StringVar(&upgrade.version, "version", "", "specify the exact chart version to use. If this is not specified, the latest version is used") f.StringVar(&upgrade.version, "version", "", "specify the exact chart version to use. If this is not specified, the latest version is used")
f.MarkDeprecated("disable-hooks", "use --no-hooks instead")
return cmd return cmd
} }
@ -135,7 +138,12 @@ func (u *upgradeCmd) run() error {
return err return err
} }
_, err = u.client.UpdateRelease(u.release, chartPath, helm.UpdateValueOverrides(rawVals), helm.UpgradeDryRun(u.dryRun), helm.UpgradeDisableHooks(u.disableHooks)) _, err = u.client.UpdateRelease(
u.release,
chartPath,
helm.UpdateValueOverrides(rawVals),
helm.UpgradeDryRun(u.dryRun),
helm.UpgradeDisableHooks(u.disableHooks))
if err != nil { if err != nil {
return fmt.Errorf("UPGRADE FAILED: %v", prettyError(err)) return fmt.Errorf("UPGRADE FAILED: %v", prettyError(err))
} }
@ -154,7 +162,7 @@ func (u *upgradeCmd) run() error {
} }
func (u *upgradeCmd) vals() ([]byte, error) { func (u *upgradeCmd) vals() ([]byte, error) {
var buffer bytes.Buffer base := map[string]interface{}{}
// User specified a values file via -f/--values // User specified a values file via -f/--values
if u.valuesFile != "" { if u.valuesFile != "" {
@ -162,18 +170,15 @@ func (u *upgradeCmd) vals() ([]byte, error) {
if err != nil { if err != nil {
return []byte{}, err return []byte{}, err
} }
buffer.Write(bytes)
}
// User specified value pairs via --set if err := yaml.Unmarshal(bytes, &base); err != nil {
// These override any values in the specified file return []byte{}, fmt.Errorf("failed to parse %s: %s", u.valuesFile, err)
if len(u.values.pairs) > 0 { }
bytes, err := u.values.yaml()
if err != nil {
return []byte{}, err
} }
buffer.Write(bytes)
if err := strvals.ParseInto(u.values, base); err != nil {
return []byte{}, fmt.Errorf("failed parsing --set data: %s", err)
} }
return buffer.Bytes(), nil return yaml.Marshal(base)
} }

@ -17,10 +17,22 @@ package main
import ( import (
"bytes" "bytes"
"fmt"
"runtime"
"testing" "testing"
) )
func TestVerifyCmd(t *testing.T) { func TestVerifyCmd(t *testing.T) {
stat_exe := "stat"
stat_path_msg := "no such file or directory"
stat_file_msg := stat_path_msg
if runtime.GOOS == "windows" {
stat_exe = "GetFileAttributesEx"
stat_path_msg = "The system cannot find the path specified."
stat_file_msg = "The system cannot find the file specified."
}
tests := []struct { tests := []struct {
name string name string
args []string args []string
@ -36,7 +48,7 @@ func TestVerifyCmd(t *testing.T) {
{ {
name: "verify requires that chart exists", name: "verify requires that chart exists",
args: []string{"no/such/file"}, args: []string{"no/such/file"},
expect: "stat no/such/file: no such file or directory", expect: fmt.Sprintf("%s no/such/file: %s", stat_exe, stat_path_msg),
err: true, err: true,
}, },
{ {
@ -48,7 +60,7 @@ func TestVerifyCmd(t *testing.T) {
{ {
name: "verify requires that chart has prov file", name: "verify requires that chart has prov file",
args: []string{"testdata/testcharts/compressedchart-0.1.0.tgz"}, args: []string{"testdata/testcharts/compressedchart-0.1.0.tgz"},
expect: "could not load provenance file testdata/testcharts/compressedchart-0.1.0.tgz.prov: stat testdata/testcharts/compressedchart-0.1.0.tgz.prov: no such file or directory", expect: fmt.Sprintf("could not load provenance file testdata/testcharts/compressedchart-0.1.0.tgz.prov: %s testdata/testcharts/compressedchart-0.1.0.tgz.prov: %s", stat_exe, stat_file_msg),
err: true, err: true,
}, },
{ {

@ -24,7 +24,6 @@ import (
"os" "os"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"google.golang.org/grpc"
"k8s.io/helm/pkg/proto/hapi/services" "k8s.io/helm/pkg/proto/hapi/services"
"k8s.io/helm/pkg/storage" "k8s.io/helm/pkg/storage"
@ -41,7 +40,7 @@ const (
// rootServer is the root gRPC server. // rootServer is the root gRPC server.
// //
// Each gRPC service registers itself to this server during init(). // Each gRPC service registers itself to this server during init().
var rootServer = grpc.NewServer() var rootServer = tiller.NewServer()
// env is the default environment. // env is the default environment.
// //

@ -9,6 +9,8 @@ Helm provides access to files through the `.Files` object. Before we get going w
- Files in `templates/` cannot be accessed. - Files in `templates/` cannot be accessed.
- Charts to not preserve UNIX mode information, so file-level permissions will have no impact on the availability of a file when it comes to the `.Files` object. - Charts to not preserve UNIX mode information, so file-level permissions will have no impact on the availability of a file when it comes to the `.Files` object.
## Basic example
With those caveats behind, let's write a template that reads three files into our ConfigMap. To get started, we will add three files to the chart, putting all three directly inside of the `mychart/` directory. With those caveats behind, let's write a template that reads three files into our ConfigMap. To get started, we will add three files to the chart, putting all three directly inside of the `mychart/` directory.
`config1.toml`: `config1.toml`:
@ -65,6 +67,42 @@ data:
message = Goodbye from config 3 message = Goodbye from config 3
``` ```
## Glob patterns
As your chart grows, you may find you have a greater need to organize your
files more, and so we provide a `Files.Glob(pattern string)` method to assist
in extracting certain files with all the flexibility of [glob patterns](//godoc.org/github.com/gobwas/glob).
For example, imagine the directory structure:
```
foo/:
foo.txt foo.yaml
bar/:
bar.go bar.conf baz.yaml
```
You have multiple options with Globs:
```yaml
{{ range $path := .Files.Glob "**.yaml" }}
{{ $path }}: |
{{ .Files.Get $path }}
{{ end }}
```
Or
```yaml
{{ range $path, $bytes := .Files.Glob "foo/*" }}
{{ $path }}: '{{ b64enc $bytes }}'
{{ end }}
```
## Secrets
When working with a Secret resource, you can import a file and have the template base-64 encode it for you: When working with a Secret resource, you can import a file and have the template base-64 encode it for you:
```yaml ```yaml

@ -61,6 +61,29 @@ Because YAML ascribes significance to indentation levels and whitespace,
this is one great way to include snippets of code, but handle this is one great way to include snippets of code, but handle
indentation in a relevant context. indentation in a relevant context.
## Automatically Roll Deployments When ConfigMaps or Secrets change
Often times configmaps or secrets are injected as configuration
files in containers.
Depending on the application a restart may be required should those
be updated with a subsequent `helm upgrade`, but if the
deployment spec itself didn't change the application keeps running
with the old configuration resulting in an inconsistent deployment.
The `sha256sum` function can be used together with the `include`
function to ensure a deployments template section is updated if another
spec changes:
```
kind: Deployment
spec:
template:
metadata:
annotations:
checksum/config: {{ include "mychart/templates/configmap.yaml" . | sha256sum }}
[...]
```
## Using "Partials" and Template Includes ## Using "Partials" and Template Includes
Sometimes you want to create some reusable parts in your chart, whether Sometimes you want to create some reusable parts in your chart, whether

@ -32,6 +32,19 @@ To run Helm and Tiller locally, you can run `bin/helm` or `bin/tiller`.
- Tiller must have access to a Kubernetes cluster. It learns about the - Tiller must have access to a Kubernetes cluster. It learns about the
cluster by examining the Kube config files that `kubectl` uses. cluster by examining the Kube config files that `kubectl` uses.
### Man pages
Man pages and Markdown documentation are already pre-built in `docs/`. You may
regenerate documentation using `make docs`.
To expose the Helm man pages to your `man` client, you can put the files in your
`$MANPATH`:
```
$ export MANPATH=$GOPATH/src/k8s.io/helm/docs/man:$MANPATH
$ man helm
```
## gRPC and Protobuf ## gRPC and Protobuf
Helm and Tiller communicate using gRPC. To get started with gRPC, you will need to... Helm and Tiller communicate using gRPC. To get started with gRPC, you will need to...

@ -2,7 +2,7 @@
{{/* {{/*
Expand the name of the chart. Expand the name of the chart.
*/}} */}}
{{define "name"}}{{default "nginx" .Values.nameOverride | trunc 24 }}{{end}} {{define "name"}}{{default "nginx" .Values.nameOverride | trunc 24 | trimSuffix "-" }}{{end}}
{{/* {{/*
Create a default fully qualified app name. Create a default fully qualified app name.
@ -12,5 +12,5 @@ We truncate at 24 chars because some Kubernetes name fields are limited to this
*/}} */}}
{{define "fullname"}} {{define "fullname"}}
{{- $name := default "nginx" .Values.nameOverride -}} {{- $name := default "nginx" .Values.nameOverride -}}
{{printf "%s-%s" .Release.Name $name | trunc 24 -}} {{printf "%s-%s" .Release.Name $name | trunc 24 | trimSuffix "-" -}}
{{end}} {{end}}

@ -0,0 +1,62 @@
## helm
The Helm package manager for Kubernetes.
### Synopsis
The Kubernetes package manager
To begin working with Helm, run the 'helm init' command:
$ helm init
This will install Tiller to your running Kubernetes cluster.
It will also set up any necessary local configuration.
Common actions from this point include:
- helm search: search for charts
- helm fetch: download a chart to your local directory to view
- helm install: upload the chart to Kubernetes
- helm list: list releases of charts
Environment:
$HELM_HOME set an alternative location for Helm files. By default, these are stored in ~/.helm
$HELM_HOST set an alternative Tiller host. The format is host:port
$KUBECONFIG set an alternate Kubernetes configuration file (default "~/.kube/config")
### Options
```
--debug enable verbose output
--home string location of your Helm config. Overrides $HELM_HOME (default "/Users/mattbutcher/Code/helm_home")
--host string address of tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use
```
### SEE ALSO
* [helm create](helm_create.md) - create a new chart with the given name
* [helm delete](helm_delete.md) - given a release name, delete the release from Kubernetes
* [helm dependency](helm_dependency.md) - manage a chart's dependencies
* [helm fetch](helm_fetch.md) - download a chart from a repository and (optionally) unpack it in local directory
* [helm get](helm_get.md) - download a named release
* [helm history](helm_history.md) - fetch release history
* [helm home](helm_home.md) - displays the location of HELM_HOME
* [helm init](helm_init.md) - initialize Helm on both client and server
* [helm inspect](helm_inspect.md) - inspect a chart
* [helm install](helm_install.md) - install a chart archive
* [helm lint](helm_lint.md) - examines a chart for possible issues
* [helm list](helm_list.md) - list releases
* [helm package](helm_package.md) - package a chart directory into a chart archive
* [helm repo](helm_repo.md) - add, list, remove, update, and index chart repositories
* [helm rollback](helm_rollback.md) - roll back a release to a previous revision
* [helm search](helm_search.md) - search for a keyword in charts
* [helm serve](helm_serve.md) - start a local http web server
* [helm status](helm_status.md) - displays the status of the named release
* [helm upgrade](helm_upgrade.md) - upgrade a release
* [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 1-Nov-2016

@ -0,0 +1,49 @@
## helm create
create a new chart with the given name
### Synopsis
This command creates a chart directory along with the common files and
directories used in a chart.
For example, 'helm create foo' will create a directory structure that looks
something like this:
foo/
|
|- .helmignore # Contains patterns to ignore when packaging Helm charts.
|
|- Chart.yaml # Information about your chart
|
|- values.yaml # The default values for your templates
|
|- charts/ # Charts that this chart depends on
|
|- templates/ # The template files
'helm create' takes a path for an argument. If directories in the given path
do not exist, Helm will attempt to create them as it goes. If the given
destination exists and there are files in that directory, conflicting files
will be overwritten, but other files will be left alone.
```
helm create NAME
```
### Options inherited from parent commands
```
--debug enable verbose output
--home string location of your Helm config. Overrides $HELM_HOME (default "/Users/mattbutcher/Code/helm_home")
--host string address of tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use
```
### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 1-Nov-2016

@ -0,0 +1,40 @@
## helm delete
given a release name, delete the release from Kubernetes
### Synopsis
This command takes a release name, and then deletes the release from Kubernetes.
It removes all of the resources associated with the last release of the chart.
Use the '--dry-run' flag to see which releases will be deleted without actually
deleting them.
```
helm delete [flags] RELEASE_NAME [...]
```
### Options
```
--dry-run simulate a delete
--no-hooks prevent hooks from running during deletion
--purge remove the release from the store and make its name free for later use
```
### Options inherited from parent commands
```
--debug enable verbose output
--home string location of your Helm config. Overrides $HELM_HOME (default "/Users/mattbutcher/Code/helm_home")
--host string address of tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use
```
### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 1-Nov-2016

@ -0,0 +1,58 @@
## helm dependency
manage a chart's dependencies
### Synopsis
Manage the dependencies of a chart.
Helm charts store their dependencies in 'charts/'. For chart developers, it is
often easier to manage a single dependency file ('requirements.yaml')
which declares all dependencies.
The dependency commands operate on that file, making it easy to synchronize
between the desired dependencies and the actual dependencies stored in the
'charts/' directory.
A 'requirements.yaml' file is a YAML file in which developers can declare chart
dependencies, along with the location of the chart and the desired version.
For example, this requirements file declares two dependencies:
# requirements.yaml
dependencies:
- name: nginx
version: "1.2.3"
repository: "https://example.com/charts"
- name: memcached
version: "3.2.1"
repository: "https://another.example.com/charts"
The 'name' should be the name of a chart, where that name must match the name
in that chart's 'Chart.yaml' file.
The 'version' field should contain a semantic version or version range.
The 'repository' URL should point to a Chart Repository. Helm expects that by
appending '/index.yaml' to the URL, it should be able to retrieve the chart
repository's index. Note: 'repository' cannot be a repository alias. It must be
a URL.
### Options inherited from parent commands
```
--debug enable verbose output
--home string location of your Helm config. Overrides $HELM_HOME (default "/Users/mattbutcher/Code/helm_home")
--host string address of tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use
```
### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes.
* [helm dependency build](helm_dependency_build.md) - rebuild the charts/ directory based on the requirements.lock file
* [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 1-Nov-2016

@ -0,0 +1,42 @@
## helm dependency build
rebuild the charts/ directory based on the requirements.lock file
### Synopsis
Build out the charts/ directory from the requirements.lock file.
Build is used to reconstruct a chart's dependencies to the state specified in
the lock file. This will not re-negotiate dependencies, as 'helm dependency update'
does.
If no lock file is found, 'helm dependency build' will mirror the behavior
of 'helm dependency update'.
```
helm dependency build [flags] CHART
```
### Options
```
--keyring string keyring containing public keys (default "/Users/mattbutcher/.gnupg/pubring.gpg")
--verify verify the packages against signatures
```
### Options inherited from parent commands
```
--debug enable verbose output
--home string location of your Helm config. Overrides $HELM_HOME (default "/Users/mattbutcher/Code/helm_home")
--host string address of tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use
```
### SEE ALSO
* [helm dependency](helm_dependency.md) - manage a chart's dependencies
###### Auto generated by spf13/cobra on 1-Nov-2016

@ -0,0 +1,34 @@
## helm dependency list
list the dependencies for the given chart
### Synopsis
List all of the dependencies declared in a chart.
This can take chart archives and chart directories as input. It will not alter
the contents of a chart.
This will produce an error if the chart cannot be loaded. It will emit a warning
if it cannot find a requirements.yaml.
```
helm dependency list [flags] CHART
```
### Options inherited from parent commands
```
--debug enable verbose output
--home string location of your Helm config. Overrides $HELM_HOME (default "/Users/mattbutcher/Code/helm_home")
--host string address of tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use
```
### SEE ALSO
* [helm dependency](helm_dependency.md) - manage a chart's dependencies
###### Auto generated by spf13/cobra on 1-Nov-2016

@ -0,0 +1,41 @@
## helm dependency update
update charts/ based on the contents of requirements.yaml
### Synopsis
Update the on-disk dependencies to mirror the requirements.yaml file.
This command verifies that the required charts, as expressed in 'requirements.yaml',
are present in 'charts/' and are at an acceptable version.
On successful update, this will generate a lock file that can be used to
rebuild the requirements to an exact version.
```
helm dependency update [flags] CHART
```
### Options
```
--keyring string keyring containing public keys (default "/Users/mattbutcher/.gnupg/pubring.gpg")
--verify verify the packages against signatures
```
### Options inherited from parent commands
```
--debug enable verbose output
--home string location of your Helm config. Overrides $HELM_HOME (default "/Users/mattbutcher/Code/helm_home")
--host string address of tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use
```
### SEE ALSO
* [helm dependency](helm_dependency.md) - manage a chart's dependencies
###### Auto generated by spf13/cobra on 1-Nov-2016

@ -0,0 +1,50 @@
## helm fetch
download a chart from a repository and (optionally) unpack it in local directory
### Synopsis
Retrieve a package from a package repository, and download it locally.
This is useful for fetching packages to inspect, modify, or repackage. It can
also be used to perform cryptographic verification of a chart without installing
the chart.
There are options for unpacking the chart after download. This will create a
directory for the chart and uncomparess into that directory.
If the --verify flag is specified, the requested chart MUST have a provenance
file, and MUST pass the verification process. Failure in any part of this will
result in an error, and the chart will not be saved locally.
```
helm fetch [flags] [chart URL | repo/chartname] [...]
```
### Options
```
-d, --destination string location to write the chart. If this and tardir are specified, tardir is appended to this (default ".")
--keyring string keyring containing public keys (default "/Users/mattbutcher/.gnupg/pubring.gpg")
--untar if set to true, will untar the chart after downloading it
--untardir string if untar is specified, this flag specifies the name of the directory into which the chart is expanded (default ".")
--verify verify the package against its signature
--version string specific version of a chart. Without this, the latest version is fetched
```
### Options inherited from parent commands
```
--debug enable verbose output
--home string location of your Helm config. Overrides $HELM_HOME (default "/Users/mattbutcher/Code/helm_home")
--host string address of tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use
```
### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 1-Nov-2016

@ -0,0 +1,46 @@
## helm get
download a named release
### Synopsis
This command shows the details of a named release.
It can be used to get extended information about the release, including:
- The values used to generate the release
- The chart used to generate the release
- The generated manifest file
By default, this prints a human readable collection of information about the
chart, the supplied values, and the generated manifest file.
```
helm get [flags] RELEASE_NAME
```
### Options
```
--revision value get the named release with revision
```
### Options inherited from parent commands
```
--debug enable verbose output
--home string location of your Helm config. Overrides $HELM_HOME (default "/Users/mattbutcher/Code/helm_home")
--host string address of tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use
```
### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes.
* [helm get hooks](helm_get_hooks.md) - download all hooks for a named release
* [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 1-Nov-2016

@ -0,0 +1,36 @@
## helm get hooks
download all hooks for a named release
### Synopsis
This command downloads hooks for a given release.
Hooks are formatted in YAML and separated by the YAML '---\n' separator.
```
helm get hooks [flags] RELEASE_NAME
```
### Options
```
--revision value get the named release with revision
```
### Options inherited from parent commands
```
--debug enable verbose output
--home string location of your Helm config. Overrides $HELM_HOME (default "/Users/mattbutcher/Code/helm_home")
--host string address of tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use
```
### SEE ALSO
* [helm get](helm_get.md) - download a named release
###### Auto generated by spf13/cobra on 1-Nov-2016

@ -0,0 +1,38 @@
## helm get manifest
download the manifest for a named release
### Synopsis
This command fetches the generated manifest for a given release.
A manifest is a YAML-encoded representation of the Kubernetes resources that
were generated from this release's chart(s). If a chart is dependent on other
charts, those resources will also be included in the manifest.
```
helm get manifest [flags] RELEASE_NAME
```
### Options
```
--revision value get the named release with revision
```
### Options inherited from parent commands
```
--debug enable verbose output
--home string location of your Helm config. Overrides $HELM_HOME (default "/Users/mattbutcher/Code/helm_home")
--host string address of tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use
```
### SEE ALSO
* [helm get](helm_get.md) - download a named release
###### Auto generated by spf13/cobra on 1-Nov-2016

@ -0,0 +1,35 @@
## helm get values
download the values file for a named release
### Synopsis
This command downloads a values file for a given release.
```
helm get values [flags] RELEASE_NAME
```
### Options
```
-a, --all dump all (computed) values
--revision value get the named release with revision
```
### Options inherited from parent commands
```
--debug enable verbose output
--home string location of your Helm config. Overrides $HELM_HOME (default "/Users/mattbutcher/Code/helm_home")
--host string address of tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use
```
### SEE ALSO
* [helm get](helm_get.md) - download a named release
###### Auto generated by spf13/cobra on 1-Nov-2016

@ -0,0 +1,46 @@
## helm history
fetch release history
### Synopsis
History prints historical revisions for a given release.
A default maximum of 256 revisions will be returned. Setting '--max'
configures the maximum length of the revision list returned.
The historical release set is printed as a formatted table, e.g:
$ helm history angry-bird --max=4
REVISION UPDATED STATUS CHART
1 Mon Oct 3 10:15:13 2016 SUPERSEDED alpine-0.1.0
2 Mon Oct 3 10:15:13 2016 SUPERSEDED alpine-0.1.0
3 Mon Oct 3 10:15:13 2016 SUPERSEDED alpine-0.1.0
4 Mon Oct 3 10:15:13 2016 DEPLOYED alpine-0.1.0
```
helm history [flags] RELEASE_NAME
```
### Options
```
--max value maximum number of revision to include in history (default 256)
```
### Options inherited from parent commands
```
--debug enable verbose output
--home string location of your Helm config. Overrides $HELM_HOME (default "/Users/mattbutcher/Code/helm_home")
--host string address of tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use
```
### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 1-Nov-2016

@ -0,0 +1,29 @@
## helm home
displays the location of HELM_HOME
### Synopsis
This command displays the location of HELM_HOME. This is where
any helm configuration files live.
```
helm home
```
### Options inherited from parent commands
```
--debug enable verbose output
--home string location of your Helm config. Overrides $HELM_HOME (default "/Users/mattbutcher/Code/helm_home")
--host string address of tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use
```
### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 1-Nov-2016

@ -0,0 +1,54 @@
## helm init
initialize Helm on both client and server
### Synopsis
This command installs Tiller (the helm server side component) onto your
Kubernetes Cluster and sets up local configuration in $HELM_HOME (default ~/.helm/)
As with the rest of the Helm commands, 'helm init' discovers Kubernetes clusters
by reading $KUBECONFIG (default '~/.kube/config') and using the default context.
To set up just a local environment, use '--client-only'. That will configure
$HELM_HOME, but not attempt to connect to a remote cluster and install the Tiller
deployment.
When installing Tiller, 'helm init' will attempt to install the latest released
version. You can specify an alternative image with '--tiller-image'. For those
frequently working on the latest code, the flag '--canary-image' will install
the latest pre-release version of Tiller (e.g. the HEAD commit in the GitHub
repository on the master branch).
To dump a manifest containing the Tiller deployment YAML, combine the
'--dry-run' and '--debug' flags.
```
helm init
```
### Options
```
--canary-image use the canary tiller image
-c, --client-only if set does not install tiller
--dry-run do not install local or remote
-i, --tiller-image string override tiller image
```
### Options inherited from parent commands
```
--debug enable verbose output
--home string location of your Helm config. Overrides $HELM_HOME (default "/Users/mattbutcher/Code/helm_home")
--host string address of tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use
```
### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 1-Nov-2016

@ -0,0 +1,41 @@
## helm inspect
inspect a chart
### Synopsis
This command inspects a chart and displays information. It takes a chart reference
('stable/drupal'), a full path to a directory or packaged chart, or a URL.
Inspect prints the contents of the Chart.yaml file and the values.yaml file.
```
helm inspect [CHART]
```
### Options
```
--keyring string path to the keyring containing public verification keys (default "/Users/mattbutcher/.gnupg/pubring.gpg")
--verify verify the provenance data for this chart
--version string version of the chart. By default, the newest chart is shown
```
### Options inherited from parent commands
```
--debug enable verbose output
--home string location of your Helm config. Overrides $HELM_HOME (default "/Users/mattbutcher/Code/helm_home")
--host string address of tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use
```
### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes.
* [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 1-Nov-2016

@ -0,0 +1,37 @@
## helm inspect chart
shows inspect chart
### Synopsis
This command inspects a chart (directory, file, or URL) and displays the contents
of the Charts.yaml file
```
helm inspect chart [CHART]
```
### Options
```
--keyring string path to the keyring containing public verification keys (default "/Users/mattbutcher/.gnupg/pubring.gpg")
--verify verify the provenance data for this chart
--version string version of the chart. By default, the newest chart is shown
```
### Options inherited from parent commands
```
--debug enable verbose output
--home string location of your Helm config. Overrides $HELM_HOME (default "/Users/mattbutcher/Code/helm_home")
--host string address of tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use
```
### SEE ALSO
* [helm inspect](helm_inspect.md) - inspect a chart
###### Auto generated by spf13/cobra on 1-Nov-2016

@ -0,0 +1,37 @@
## helm inspect values
shows inspect values
### Synopsis
This command inspects a chart (directory, file, or URL) and displays the contents
of the values.yaml file
```
helm inspect values [CHART]
```
### Options
```
--keyring string path to the keyring containing public verification keys (default "/Users/mattbutcher/.gnupg/pubring.gpg")
--verify verify the provenance data for this chart
--version string version of the chart. By default, the newest chart is shown
```
### Options inherited from parent commands
```
--debug enable verbose output
--home string location of your Helm config. Overrides $HELM_HOME (default "/Users/mattbutcher/Code/helm_home")
--host string address of tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use
```
### SEE ALSO
* [helm inspect](helm_inspect.md) - inspect a chart
###### Auto generated by spf13/cobra on 1-Nov-2016

@ -0,0 +1,84 @@
## helm install
install a chart archive
### Synopsis
This command installs a chart archive.
The install argument must be either a relative path to a chart directory or the
name of a chart in the current working directory.
To override values in a chart, use either the '--values' flag and pass in a file
or use the '--set' flag and pass configuration from the command line.
$ helm install -f myvalues.yaml ./redis
or
$ helm install --set name=prod ./redis
To check the generated manifests of a release without installing the chart,
the '--debug' and '--dry-run' flags can be combined. This will still require a
round-trip to the Tiller server.
If --verify is set, the chart MUST have a provenance file, and the provenenace
fall MUST pass all verification steps.
There are four different ways you can express the chart you want to install:
1. By chart reference: helm install stable/mariadb
2. By path to a packaged chart: helm install ./nginx-1.2.3.tgz
3. By path to an unpacked chart directory: helm install ./nginx
4. By absolute URL: helm install https://example.com/charts/nginx-1.2.3.tgz
CHART REFERENCES
A chart reference is a convenient way of reference a chart in a chart repository.
When you use a chart reference ('stable/mariadb'), Helm will look in the local
configuration for a chart repository named 'stable', and will then look for a
chart in that repository whose name is 'mariadb'. It will install the latest
version of that chart unless you also supply a version number with the
'--version' flag.
To see the list of chart repositories, use 'helm repo list'. To search for
charts in a repository, use 'helm search'.
```
helm install [CHART]
```
### Options
```
--dry-run simulate an install
--keyring string location of public keys used for verification (default "/Users/mattbutcher/.gnupg/pubring.gpg")
-n, --name string release name. If unspecified, it will autogenerate one for you
--name-template string specify template used to name the release
--namespace string namespace to install the release into
--no-hooks prevent hooks from running during install
--replace re-use the given name, even if that name is already used. This is unsafe in production
--set value set values on the command line. Separate values with commas: key1=val1,key2=val2 (default null
)
-f, --values string specify values in a YAML file
--verify verify the package before installing it
--version string specify the exact chart version to install. If this is not specified, the latest version is installed
```
### Options inherited from parent commands
```
--debug enable verbose output
--home string location of your Helm config. Overrides $HELM_HOME (default "/Users/mattbutcher/Code/helm_home")
--host string address of tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use
```
### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 1-Nov-2016

@ -0,0 +1,39 @@
## helm lint
examines a chart for possible issues
### Synopsis
This command takes a path to a chart and runs a series of tests to verify that
the chart is well-formed.
If the linter encounters things that will cause the chart to fail installation,
it will emit [ERROR] messages. If it encounters issues that break with convention
or recommendation, it will emit [WARNING] messages.
```
helm lint [flags] PATH
```
### Options
```
--strict fail on lint warnings
```
### Options inherited from parent commands
```
--debug enable verbose output
--home string location of your Helm config. Overrides $HELM_HOME (default "/Users/mattbutcher/Code/helm_home")
--host string address of tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use
```
### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 1-Nov-2016

@ -0,0 +1,65 @@
## helm list
list releases
### Synopsis
This command lists all of the releases.
By default, it lists only releases that are deployed or failed. Flags like
'--delete' and '--all' will alter this behavior. Such flags can be combined:
'--deleted --failed'.
By default, items are sorted alphabetically. Use the '-d' flag to sort by
release date.
If an argument is provided, it will be treated as a filter. Filters are
regular expressions (Perl compatible) that are applied to the list of releases.
Only items that match the filter will be returned.
$ helm list 'ara[a-z]+'
NAME UPDATED CHART
maudlin-arachnid Mon May 9 16:07:08 2016 alpine-0.1.0
If no results are found, 'helm list' will exit 0, but with no output (or in
the case of no '-q' flag, only headers).
By default, up to 256 items may be returned. To limit this, use the '--max' flag.
Setting '--max' to 0 will not return all results. Rather, it will return the
server's default, which may be much higher than 256. Pairing the '--max'
flag with the '--offset' flag allows you to page through results.
```
helm list [flags] [FILTER]
```
### Options
```
--all show all releases, not just the ones marked DEPLOYED
-d, --date sort by release date
--deleted show deleted releases
--deployed show deployed releases. If no other is specified, this will be automatically enabled
--failed show failed releases
-m, --max int maximum number of releases to fetch (default 256)
-o, --offset string next release name in the list, used to offset from start value
-r, --reverse reverse the sort order
-q, --short output short (quiet) listing format
```
### Options inherited from parent commands
```
--debug enable verbose output
--home string location of your Helm config. Overrides $HELM_HOME (default "/Users/mattbutcher/Code/helm_home")
--host string address of tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use
```
### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 1-Nov-2016

@ -0,0 +1,44 @@
## helm package
package a chart directory into a chart archive
### Synopsis
This command packages a chart into a versioned chart archive file. If a path
is given, this will look at that path for a chart (which must contain a
Chart.yaml file) and then package that directory.
If no path is given, this will look in the present working directory for a
Chart.yaml file, and (if found) build the current directory into a chart.
Versioned chart archives are used by Helm package repositories.
```
helm package [flags] [CHART_PATH] [...]
```
### Options
```
--key string name of the key to use when signing. Used if --sign is true
--keyring string location of a public keyring (default "/Users/mattbutcher/.gnupg/pubring.gpg")
--save save packaged chart to local chart repository (default true)
--sign use a PGP private key to sign this package
```
### Options inherited from parent commands
```
--debug enable verbose output
--home string location of your Helm config. Overrides $HELM_HOME (default "/Users/mattbutcher/Code/helm_home")
--host string address of tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use
```
### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 1-Nov-2016

@ -0,0 +1,33 @@
## helm repo
add, list, remove, update, and index chart repositories
### Synopsis
This command consists of multiple subcommands to interact with chart repositories.
It can be used to add, remove, list, and index chart repositories.
Example usage:
$ helm repo add [NAME] [REPO_URL]
### Options inherited from parent commands
```
--debug enable verbose output
--home string location of your Helm config. Overrides $HELM_HOME (default "/Users/mattbutcher/Code/helm_home")
--host string address of tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use
```
### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes.
* [helm repo add](helm_repo_add.md) - add a chart repository
* [helm repo index](helm_repo_index.md) - generate an index file given a directory containing packaged charts
* [helm repo list](helm_repo_list.md) - list chart repositories
* [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 1-Nov-2016

@ -0,0 +1,32 @@
## helm repo add
add a chart repository
### Synopsis
add a chart repository
```
helm repo add [flags] [NAME] [URL]
```
### Options
```
--no-update raise error if repo is already registered
```
### Options inherited from parent commands
```
--debug enable verbose output
--home string location of your Helm config. Overrides $HELM_HOME (default "/Users/mattbutcher/Code/helm_home")
--host string address of tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use
```
### SEE ALSO
* [helm repo](helm_repo.md) - add, list, remove, update, and index chart repositories
###### Auto generated by spf13/cobra on 1-Nov-2016

@ -0,0 +1,42 @@
## helm repo index
generate an index file given a directory containing packaged charts
### Synopsis
Read the current directory and generate an index file based on the charts found.
This tool is used for creating an 'index.yaml' file for a chart repository. To
set an absolute URL to the charts, use '--url' flag.
To merge the generated index with an existing index file, use the '--merge'
flag. In this case, the charts found in the current directory will be merged
into the existing index, with local charts taking priority over existing charts.
```
helm repo index [flags] [DIR]
```
### Options
```
--merge string merge the generated index into the given index
--url string url of chart repository
```
### Options inherited from parent commands
```
--debug enable verbose output
--home string location of your Helm config. Overrides $HELM_HOME (default "/Users/mattbutcher/Code/helm_home")
--host string address of tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use
```
### SEE ALSO
* [helm repo](helm_repo.md) - add, list, remove, update, and index chart repositories
###### Auto generated by spf13/cobra on 1-Nov-2016

@ -0,0 +1,26 @@
## helm repo list
list chart repositories
### Synopsis
list chart repositories
```
helm repo list [flags]
```
### Options inherited from parent commands
```
--debug enable verbose output
--home string location of your Helm config. Overrides $HELM_HOME (default "/Users/mattbutcher/Code/helm_home")
--host string address of tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use
```
### SEE ALSO
* [helm repo](helm_repo.md) - add, list, remove, update, and index chart repositories
###### Auto generated by spf13/cobra on 1-Nov-2016

@ -0,0 +1,26 @@
## helm repo remove
remove a chart repository
### Synopsis
remove a chart repository
```
helm repo remove [flags] [NAME]
```
### Options inherited from parent commands
```
--debug enable verbose output
--home string location of your Helm config. Overrides $HELM_HOME (default "/Users/mattbutcher/Code/helm_home")
--host string address of tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use
```
### SEE ALSO
* [helm repo](helm_repo.md) - add, list, remove, update, and index chart repositories
###### Auto generated by spf13/cobra on 1-Nov-2016

@ -0,0 +1,32 @@
## helm repo update
update information on available charts in the chart repositories
### Synopsis
Update gets the latest information about charts from the respective chart repositories.
Information is cached locally, where it is used by commands like 'helm search'.
'helm update' is the deprecated form of 'helm repo update'. It will be removed in
future releases.
```
helm repo update
```
### Options inherited from parent commands
```
--debug enable verbose output
--home string location of your Helm config. Overrides $HELM_HOME (default "/Users/mattbutcher/Code/helm_home")
--host string address of tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use
```
### SEE ALSO
* [helm repo](helm_repo.md) - add, list, remove, update, and index chart repositories
###### Auto generated by spf13/cobra on 1-Nov-2016

@ -0,0 +1,36 @@
## helm rollback
roll back a release to a previous revision
### Synopsis
This command rolls back a release to the previous revision.
The argument of the rollback command is the name of a release.
```
helm rollback [RELEASE]
```
### Options
```
--dry-run simulate a rollback
--no-hooks prevent hooks from running during rollback
```
### Options inherited from parent commands
```
--debug enable verbose output
--home string location of your Helm config. Overrides $HELM_HOME (default "/Users/mattbutcher/Code/helm_home")
--host string address of tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use
```
### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 1-Nov-2016

@ -0,0 +1,38 @@
## helm search
search for a keyword in charts
### Synopsis
Search reads through all of the repositories configured on the system, and
looks for matches.
Repositories are managed with 'helm repo' commands.
```
helm search [keyword]
```
### Options
```
-r, --regexp use regular expressions for searching
-l, --versions show the long listing, with each version of each chart on its own line
```
### Options inherited from parent commands
```
--debug enable verbose output
--home string location of your Helm config. Overrides $HELM_HOME (default "/Users/mattbutcher/Code/helm_home")
--host string address of tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use
```
### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 1-Nov-2016

@ -0,0 +1,39 @@
## helm serve
start a local http web server
### Synopsis
This command starts a local chart repository server that serves charts from a local directory.
The new server will provide HTTP access to a repository. By default, it will
scan all of the charts in '$HELM_HOME/repository/local' and serve those over
the a local IPv4 TCP port (default '127.0.0.1:8879').
```
helm serve
```
### Options
```
--address string address to listen on (default "127.0.0.1:8879")
--repo-path string local directory path from which to serve charts (default "/Users/mattbutcher/Code/helm_home/repository/local")
```
### Options inherited from parent commands
```
--debug enable verbose output
--home string location of your Helm config. Overrides $HELM_HOME (default "/Users/mattbutcher/Code/helm_home")
--host string address of tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use
```
### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 1-Nov-2016

@ -0,0 +1,34 @@
## helm status
displays the status of the named release
### Synopsis
This command shows the status of a named release.
```
helm status [flags] RELEASE_NAME
```
### Options
```
--revision value if set, display the status of the named release with revision
```
### Options inherited from parent commands
```
--debug enable verbose output
--home string location of your Helm config. Overrides $HELM_HOME (default "/Users/mattbutcher/Code/helm_home")
--host string address of tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use
```
### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 1-Nov-2016

@ -0,0 +1,51 @@
## helm upgrade
upgrade a release
### Synopsis
This command upgrades a release to a new version of a chart.
The upgrade arguments must be a release and chart. The chart
argument can be either: a chart reference('stable/mariadb'), a path to a chart directory,
a packaged chart, or a fully qualified URL. For chart references, the latest
version will be specified unless the '--version' flag is set.
To override values in a chart, use either the '--values' flag and pass in a file
or use the '--set' flag and pass configuration from the command line.
```
helm upgrade [RELEASE] [CHART]
```
### Options
```
--disable-hooks disable pre/post upgrade hooks
--dry-run simulate an upgrade
-i, --install if a release by this name doesn't already exist, run an install
--keyring string path to the keyring that contains public singing keys (default "/Users/mattbutcher/.gnupg/pubring.gpg")
--namespace string namespace to install the release into (only used if --install is set) (default "default")
--set value set values on the command line. Separate values with commas: key1=val1,key2=val2 (default null
)
-f, --values string path to a values YAML file
--verify verify the provenance of the chart before upgrading
--version string specify the exact chart version to use. If this is not specified, the latest version is used
```
### Options inherited from parent commands
```
--debug enable verbose output
--home string location of your Helm config. Overrides $HELM_HOME (default "/Users/mattbutcher/Code/helm_home")
--host string address of tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use
```
### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 1-Nov-2016

@ -0,0 +1,41 @@
## helm verify
verify that a chart at the given path has been signed and is valid
### Synopsis
Verify that the given chart has a valid provenance file.
Provenance files provide crytographic verification that a chart has not been
tampered with, and was packaged by a trusted provider.
This command can be used to verify a local chart. Several other commands provide
'--verify' flags that run the same validation. To generate a signed package, use
the 'helm package --sign' command.
```
helm verify [flags] PATH
```
### Options
```
--keyring string keyring containing public keys (default "/Users/mattbutcher/.gnupg/pubring.gpg")
```
### Options inherited from parent commands
```
--debug enable verbose output
--home string location of your Helm config. Overrides $HELM_HOME (default "/Users/mattbutcher/Code/helm_home")
--host string address of tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use
```
### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 1-Nov-2016

@ -0,0 +1,49 @@
## helm version
print the client/server version information
### Synopsis
Show the client and server versions for Helm and tiller.
This will print a representation of the client and server versions of Helm and
Tiller. The output will look something like this:
Client: &version.Version{SemVer:"v2.0.0-beta.1", GitCommit:"ff52399e51bb880526e9cd0ed8386f6433b74da1", GitTreeState:"dirty"}
Server: &version.Version{SemVer:"v2.0.0-beta.1", GitCommit:"b0c113dfb9f612a9add796549da66c0d294508a3", GitTreeState:"clean"}
- SemVer is the semantic version of the release.
- GitCommit is the SHA for the commit that this version was built from.
- GitTreeState is "clean" if there are no local code changes when this binary was
built, and "dirty" if the binary was built from locally modified code.
To print just the client version, use '--client'. To print just the server version,
use '--server'.
```
helm version
```
### Options
```
-c, --client if set, show the client version
-s, --server if set, show the server version
```
### Options inherited from parent commands
```
--debug enable verbose output
--home string location of your Helm config. Overrides $HELM_HOME (default "/Users/mattbutcher/Code/helm_home")
--host string address of tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use
```
### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 1-Nov-2016

@ -0,0 +1,79 @@
.TH "HELM" "1" "Nov 2016" "Auto generated by spf13/cobra" ""
.nh
.ad l
.SH NAME
.PP
helm \- The Helm package manager for Kubernetes.
.SH SYNOPSIS
.PP
\fBhelm\fP
.SH DESCRIPTION
.PP
The Kubernetes package manager
.PP
To begin working with Helm, run the 'helm init' command:
.PP
.RS
.nf
$ helm init
.fi
.RE
.PP
This will install Tiller to your running Kubernetes cluster.
It will also set up any necessary local configuration.
.PP
Common actions from this point include:
.IP \(bu 2
helm search: search for charts
.IP \(bu 2
helm fetch: download a chart to your local directory to view
.IP \(bu 2
helm install: upload the chart to Kubernetes
.IP \(bu 2
helm list: list releases of charts
.PP
Environment:
$HELM\_HOME set an alternative location for Helm files. By default, these are stored in \~/.helm
$HELM\_HOST set an alternative Tiller host. The format is host:port
$KUBECONFIG set an alternate Kubernetes configuration file (default "\~/.kube/config")
.SH OPTIONS
.PP
\fB\-\-debug\fP[=false]
enable verbose output
.PP
\fB\-\-home\fP="/Users/mattbutcher/Code/helm\_home"
location of your Helm config. Overrides $HELM\_HOME
.PP
\fB\-\-host\fP=""
address of tiller. Overrides $HELM\_HOST
.PP
\fB\-\-kube\-context\fP=""
name of the kubeconfig context to use
.SH SEE ALSO
.PP
\fBhelm\-create(1)\fP, \fBhelm\-delete(1)\fP, \fBhelm\-dependency(1)\fP, \fBhelm\-fetch(1)\fP, \fBhelm\-get(1)\fP, \fBhelm\-history(1)\fP, \fBhelm\-home(1)\fP, \fBhelm\-init(1)\fP, \fBhelm\-inspect(1)\fP, \fBhelm\-install(1)\fP, \fBhelm\-lint(1)\fP, \fBhelm\-list(1)\fP, \fBhelm\-package(1)\fP, \fBhelm\-repo(1)\fP, \fBhelm\-rollback(1)\fP, \fBhelm\-search(1)\fP, \fBhelm\-serve(1)\fP, \fBhelm\-status(1)\fP, \fBhelm\-upgrade(1)\fP, \fBhelm\-verify(1)\fP, \fBhelm\-version(1)\fP
.SH HISTORY
.PP
1\-Nov\-2016 Auto generated by spf13/cobra

@ -0,0 +1,76 @@
.TH "HELM" "1" "Nov 2016" "Auto generated by spf13/cobra" ""
.nh
.ad l
.SH NAME
.PP
helm\-create \- create a new chart with the given name
.SH SYNOPSIS
.PP
\fBhelm create NAME\fP
.SH DESCRIPTION
.PP
This command creates a chart directory along with the common files and
directories used in a chart.
.PP
For example, 'helm create foo' will create a directory structure that looks
something like this:
.PP
.RS
.nf
foo/
|
|\- .helmignore # Contains patterns to ignore when packaging Helm charts.
|
|\- Chart.yaml # Information about your chart
|
|\- values.yaml # The default values for your templates
|
|\- charts/ # Charts that this chart depends on
|
|\- templates/ # The template files
.fi
.RE
.PP
\&'helm create' takes a path for an argument. If directories in the given path
do not exist, Helm will attempt to create them as it goes. If the given
destination exists and there are files in that directory, conflicting files
will be overwritten, but other files will be left alone.
.SH OPTIONS INHERITED FROM PARENT COMMANDS
.PP
\fB\-\-debug\fP[=false]
enable verbose output
.PP
\fB\-\-home\fP="/Users/mattbutcher/Code/helm\_home"
location of your Helm config. Overrides $HELM\_HOME
.PP
\fB\-\-host\fP=""
address of tiller. Overrides $HELM\_HOST
.PP
\fB\-\-kube\-context\fP=""
name of the kubeconfig context to use
.SH SEE ALSO
.PP
\fBhelm(1)\fP
.SH HISTORY
.PP
1\-Nov\-2016 Auto generated by spf13/cobra

@ -0,0 +1,65 @@
.TH "HELM" "1" "Nov 2016" "Auto generated by spf13/cobra" ""
.nh
.ad l
.SH NAME
.PP
helm\-delete \- given a release name, delete the release from Kubernetes
.SH SYNOPSIS
.PP
\fBhelm delete [flags] RELEASE\_NAME [...]\fP
.SH DESCRIPTION
.PP
This command takes a release name, and then deletes the release from Kubernetes.
It removes all of the resources associated with the last release of the chart.
.PP
Use the '\-\-dry\-run' flag to see which releases will be deleted without actually
deleting them.
.SH OPTIONS
.PP
\fB\-\-dry\-run\fP[=false]
simulate a delete
.PP
\fB\-\-no\-hooks\fP[=false]
prevent hooks from running during deletion
.PP
\fB\-\-purge\fP[=false]
remove the release from the store and make its name free for later use
.SH OPTIONS INHERITED FROM PARENT COMMANDS
.PP
\fB\-\-debug\fP[=false]
enable verbose output
.PP
\fB\-\-home\fP="/Users/mattbutcher/Code/helm\_home"
location of your Helm config. Overrides $HELM\_HOME
.PP
\fB\-\-host\fP=""
address of tiller. Overrides $HELM\_HOST
.PP
\fB\-\-kube\-context\fP=""
name of the kubeconfig context to use
.SH SEE ALSO
.PP
\fBhelm(1)\fP
.SH HISTORY
.PP
1\-Nov\-2016 Auto generated by spf13/cobra

@ -0,0 +1,90 @@
.TH "HELM" "1" "Nov 2016" "Auto generated by spf13/cobra" ""
.nh
.ad l
.SH NAME
.PP
helm\-dependency \- manage a chart's dependencies
.SH SYNOPSIS
.PP
\fBhelm dependency update|build|list\fP
.SH DESCRIPTION
.PP
Manage the dependencies of a chart.
.PP
Helm charts store their dependencies in 'charts/'. For chart developers, it is
often easier to manage a single dependency file ('requirements.yaml')
which declares all dependencies.
.PP
The dependency commands operate on that file, making it easy to synchronize
between the desired dependencies and the actual dependencies stored in the
'charts/' directory.
.PP
A 'requirements.yaml' file is a YAML file in which developers can declare chart
dependencies, along with the location of the chart and the desired version.
For example, this requirements file declares two dependencies:
.PP
.RS
.nf
# requirements.yaml
dependencies:
\- name: nginx
version: "1.2.3"
repository: "https://example.com/charts"
\- name: memcached
version: "3.2.1"
repository: "https://another.example.com/charts"
.fi
.RE
.PP
The 'name' should be the name of a chart, where that name must match the name
in that chart's 'Chart.yaml' file.
.PP
The 'version' field should contain a semantic version or version range.
.PP
The 'repository' URL should point to a Chart Repository. Helm expects that by
appending '/index.yaml' to the URL, it should be able to retrieve the chart
repository's index. Note: 'repository' cannot be a repository alias. It must be
a URL.
.SH OPTIONS INHERITED FROM PARENT COMMANDS
.PP
\fB\-\-debug\fP[=false]
enable verbose output
.PP
\fB\-\-home\fP="/Users/mattbutcher/Code/helm\_home"
location of your Helm config. Overrides $HELM\_HOME
.PP
\fB\-\-host\fP=""
address of tiller. Overrides $HELM\_HOST
.PP
\fB\-\-kube\-context\fP=""
name of the kubeconfig context to use
.SH SEE ALSO
.PP
\fBhelm(1)\fP, \fBhelm\-dependency\-build(1)\fP, \fBhelm\-dependency\-list(1)\fP, \fBhelm\-dependency\-update(1)\fP
.SH HISTORY
.PP
1\-Nov\-2016 Auto generated by spf13/cobra

@ -0,0 +1,65 @@
.TH "HELM" "1" "Nov 2016" "Auto generated by spf13/cobra" ""
.nh
.ad l
.SH NAME
.PP
helm\-dependency\-build \- rebuild the charts/ directory based on the requirements.lock file
.SH SYNOPSIS
.PP
\fBhelm dependency build [flags] CHART\fP
.SH DESCRIPTION
.PP
Build out the charts/ directory from the requirements.lock file.
.PP
Build is used to reconstruct a chart's dependencies to the state specified in
the lock file. This will not re\-negotiate dependencies, as 'helm dependency update'
does.
.PP
If no lock file is found, 'helm dependency build' will mirror the behavior
of 'helm dependency update'.
.SH OPTIONS
.PP
\fB\-\-keyring\fP="/Users/mattbutcher/.gnupg/pubring.gpg"
keyring containing public keys
.PP
\fB\-\-verify\fP[=false]
verify the packages against signatures
.SH OPTIONS INHERITED FROM PARENT COMMANDS
.PP
\fB\-\-debug\fP[=false]
enable verbose output
.PP
\fB\-\-home\fP="/Users/mattbutcher/Code/helm\_home"
location of your Helm config. Overrides $HELM\_HOME
.PP
\fB\-\-host\fP=""
address of tiller. Overrides $HELM\_HOST
.PP
\fB\-\-kube\-context\fP=""
name of the kubeconfig context to use
.SH SEE ALSO
.PP
\fBhelm\-dependency(1)\fP
.SH HISTORY
.PP
1\-Nov\-2016 Auto generated by spf13/cobra

@ -0,0 +1,54 @@
.TH "HELM" "1" "Nov 2016" "Auto generated by spf13/cobra" ""
.nh
.ad l
.SH NAME
.PP
helm\-dependency\-list \- list the dependencies for the given chart
.SH SYNOPSIS
.PP
\fBhelm dependency list [flags] CHART\fP
.SH DESCRIPTION
.PP
List all of the dependencies declared in a chart.
.PP
This can take chart archives and chart directories as input. It will not alter
the contents of a chart.
.PP
This will produce an error if the chart cannot be loaded. It will emit a warning
if it cannot find a requirements.yaml.
.SH OPTIONS INHERITED FROM PARENT COMMANDS
.PP
\fB\-\-debug\fP[=false]
enable verbose output
.PP
\fB\-\-home\fP="/Users/mattbutcher/Code/helm\_home"
location of your Helm config. Overrides $HELM\_HOME
.PP
\fB\-\-host\fP=""
address of tiller. Overrides $HELM\_HOST
.PP
\fB\-\-kube\-context\fP=""
name of the kubeconfig context to use
.SH SEE ALSO
.PP
\fBhelm\-dependency(1)\fP
.SH HISTORY
.PP
1\-Nov\-2016 Auto generated by spf13/cobra

@ -0,0 +1,64 @@
.TH "HELM" "1" "Nov 2016" "Auto generated by spf13/cobra" ""
.nh
.ad l
.SH NAME
.PP
helm\-dependency\-update \- update charts/ based on the contents of requirements.yaml
.SH SYNOPSIS
.PP
\fBhelm dependency update [flags] CHART\fP
.SH DESCRIPTION
.PP
Update the on\-disk dependencies to mirror the requirements.yaml file.
.PP
This command verifies that the required charts, as expressed in 'requirements.yaml',
are present in 'charts/' and are at an acceptable version.
.PP
On successful update, this will generate a lock file that can be used to
rebuild the requirements to an exact version.
.SH OPTIONS
.PP
\fB\-\-keyring\fP="/Users/mattbutcher/.gnupg/pubring.gpg"
keyring containing public keys
.PP
\fB\-\-verify\fP[=false]
verify the packages against signatures
.SH OPTIONS INHERITED FROM PARENT COMMANDS
.PP
\fB\-\-debug\fP[=false]
enable verbose output
.PP
\fB\-\-home\fP="/Users/mattbutcher/Code/helm\_home"
location of your Helm config. Overrides $HELM\_HOME
.PP
\fB\-\-host\fP=""
address of tiller. Overrides $HELM\_HOST
.PP
\fB\-\-kube\-context\fP=""
name of the kubeconfig context to use
.SH SEE ALSO
.PP
\fBhelm\-dependency(1)\fP
.SH HISTORY
.PP
1\-Nov\-2016 Auto generated by spf13/cobra

@ -0,0 +1,86 @@
.TH "HELM" "1" "Nov 2016" "Auto generated by spf13/cobra" ""
.nh
.ad l
.SH NAME
.PP
helm\-fetch \- download a chart from a repository and (optionally) unpack it in local directory
.SH SYNOPSIS
.PP
\fBhelm fetch [flags] [chart URL | repo/chartname] [...]\fP
.SH DESCRIPTION
.PP
Retrieve a package from a package repository, and download it locally.
.PP
This is useful for fetching packages to inspect, modify, or repackage. It can
also be used to perform cryptographic verification of a chart without installing
the chart.
.PP
There are options for unpacking the chart after download. This will create a
directory for the chart and uncomparess into that directory.
.PP
If the \-\-verify flag is specified, the requested chart MUST have a provenance
file, and MUST pass the verification process. Failure in any part of this will
result in an error, and the chart will not be saved locally.
.SH OPTIONS
.PP
\fB\-d\fP, \fB\-\-destination\fP="."
location to write the chart. If this and tardir are specified, tardir is appended to this
.PP
\fB\-\-keyring\fP="/Users/mattbutcher/.gnupg/pubring.gpg"
keyring containing public keys
.PP
\fB\-\-untar\fP[=false]
if set to true, will untar the chart after downloading it
.PP
\fB\-\-untardir\fP="."
if untar is specified, this flag specifies the name of the directory into which the chart is expanded
.PP
\fB\-\-verify\fP[=false]
verify the package against its signature
.PP
\fB\-\-version\fP=""
specific version of a chart. Without this, the latest version is fetched
.SH OPTIONS INHERITED FROM PARENT COMMANDS
.PP
\fB\-\-debug\fP[=false]
enable verbose output
.PP
\fB\-\-home\fP="/Users/mattbutcher/Code/helm\_home"
location of your Helm config. Overrides $HELM\_HOME
.PP
\fB\-\-host\fP=""
address of tiller. Overrides $HELM\_HOST
.PP
\fB\-\-kube\-context\fP=""
name of the kubeconfig context to use
.SH SEE ALSO
.PP
\fBhelm(1)\fP
.SH HISTORY
.PP
1\-Nov\-2016 Auto generated by spf13/cobra

@ -0,0 +1,65 @@
.TH "HELM" "1" "Nov 2016" "Auto generated by spf13/cobra" ""
.nh
.ad l
.SH NAME
.PP
helm\-get \- download a named release
.SH SYNOPSIS
.PP
\fBhelm get [flags] RELEASE\_NAME\fP
.SH DESCRIPTION
.PP
This command shows the details of a named release.
.PP
It can be used to get extended information about the release, including:
.IP \(bu 2
The values used to generate the release
.IP \(bu 2
The chart used to generate the release
.IP \(bu 2
The generated manifest file
.PP
By default, this prints a human readable collection of information about the
chart, the supplied values, and the generated manifest file.
.SH OPTIONS
.PP
\fB\-\-revision\fP=0
get the named release with revision
.SH OPTIONS INHERITED FROM PARENT COMMANDS
.PP
\fB\-\-debug\fP[=false]
enable verbose output
.PP
\fB\-\-home\fP="/Users/mattbutcher/Code/helm\_home"
location of your Helm config. Overrides $HELM\_HOME
.PP
\fB\-\-host\fP=""
address of tiller. Overrides $HELM\_HOST
.PP
\fB\-\-kube\-context\fP=""
name of the kubeconfig context to use
.SH SEE ALSO
.PP
\fBhelm(1)\fP, \fBhelm\-get\-hooks(1)\fP, \fBhelm\-get\-manifest(1)\fP, \fBhelm\-get\-values(1)\fP
.SH HISTORY
.PP
1\-Nov\-2016 Auto generated by spf13/cobra

@ -0,0 +1,55 @@
.TH "HELM" "1" "Nov 2016" "Auto generated by spf13/cobra" ""
.nh
.ad l
.SH NAME
.PP
helm\-get\-hooks \- download all hooks for a named release
.SH SYNOPSIS
.PP
\fBhelm get hooks [flags] RELEASE\_NAME\fP
.SH DESCRIPTION
.PP
This command downloads hooks for a given release.
.PP
Hooks are formatted in YAML and separated by the YAML '\-\-\-\\n' separator.
.SH OPTIONS
.PP
\fB\-\-revision\fP=0
get the named release with revision
.SH OPTIONS INHERITED FROM PARENT COMMANDS
.PP
\fB\-\-debug\fP[=false]
enable verbose output
.PP
\fB\-\-home\fP="/Users/mattbutcher/Code/helm\_home"
location of your Helm config. Overrides $HELM\_HOME
.PP
\fB\-\-host\fP=""
address of tiller. Overrides $HELM\_HOST
.PP
\fB\-\-kube\-context\fP=""
name of the kubeconfig context to use
.SH SEE ALSO
.PP
\fBhelm\-get(1)\fP
.SH HISTORY
.PP
1\-Nov\-2016 Auto generated by spf13/cobra

@ -0,0 +1,57 @@
.TH "HELM" "1" "Nov 2016" "Auto generated by spf13/cobra" ""
.nh
.ad l
.SH NAME
.PP
helm\-get\-manifest \- download the manifest for a named release
.SH SYNOPSIS
.PP
\fBhelm get manifest [flags] RELEASE\_NAME\fP
.SH DESCRIPTION
.PP
This command fetches the generated manifest for a given release.
.PP
A manifest is a YAML\-encoded representation of the Kubernetes resources that
were generated from this release's chart(s). If a chart is dependent on other
charts, those resources will also be included in the manifest.
.SH OPTIONS
.PP
\fB\-\-revision\fP=0
get the named release with revision
.SH OPTIONS INHERITED FROM PARENT COMMANDS
.PP
\fB\-\-debug\fP[=false]
enable verbose output
.PP
\fB\-\-home\fP="/Users/mattbutcher/Code/helm\_home"
location of your Helm config. Overrides $HELM\_HOME
.PP
\fB\-\-host\fP=""
address of tiller. Overrides $HELM\_HOST
.PP
\fB\-\-kube\-context\fP=""
name of the kubeconfig context to use
.SH SEE ALSO
.PP
\fBhelm\-get(1)\fP
.SH HISTORY
.PP
1\-Nov\-2016 Auto generated by spf13/cobra

@ -0,0 +1,56 @@
.TH "HELM" "1" "Nov 2016" "Auto generated by spf13/cobra" ""
.nh
.ad l
.SH NAME
.PP
helm\-get\-values \- download the values file for a named release
.SH SYNOPSIS
.PP
\fBhelm get values [flags] RELEASE\_NAME\fP
.SH DESCRIPTION
.PP
This command downloads a values file for a given release.
.SH OPTIONS
.PP
\fB\-a\fP, \fB\-\-all\fP[=false]
dump all (computed) values
.PP
\fB\-\-revision\fP=0
get the named release with revision
.SH OPTIONS INHERITED FROM PARENT COMMANDS
.PP
\fB\-\-debug\fP[=false]
enable verbose output
.PP
\fB\-\-home\fP="/Users/mattbutcher/Code/helm\_home"
location of your Helm config. Overrides $HELM\_HOME
.PP
\fB\-\-host\fP=""
address of tiller. Overrides $HELM\_HOST
.PP
\fB\-\-kube\-context\fP=""
name of the kubeconfig context to use
.SH SEE ALSO
.PP
\fBhelm\-get(1)\fP
.SH HISTORY
.PP
1\-Nov\-2016 Auto generated by spf13/cobra

@ -0,0 +1,73 @@
.TH "HELM" "1" "Nov 2016" "Auto generated by spf13/cobra" ""
.nh
.ad l
.SH NAME
.PP
helm\-history \- fetch release history
.SH SYNOPSIS
.PP
\fBhelm history [flags] RELEASE\_NAME\fP
.SH DESCRIPTION
.PP
History prints historical revisions for a given release.
.PP
A default maximum of 256 revisions will be returned. Setting '\-\-max'
configures the maximum length of the revision list returned.
.PP
The historical release set is printed as a formatted table, e.g:
.PP
.RS
.nf
$ helm history angry\-bird \-\-max=4
REVISION UPDATED STATUS CHART
1 Mon Oct 3 10:15:13 2016 SUPERSEDED alpine\-0.1.0
2 Mon Oct 3 10:15:13 2016 SUPERSEDED alpine\-0.1.0
3 Mon Oct 3 10:15:13 2016 SUPERSEDED alpine\-0.1.0
4 Mon Oct 3 10:15:13 2016 DEPLOYED alpine\-0.1.0
.fi
.RE
.SH OPTIONS
.PP
\fB\-\-max\fP=256
maximum number of revision to include in history
.SH OPTIONS INHERITED FROM PARENT COMMANDS
.PP
\fB\-\-debug\fP[=false]
enable verbose output
.PP
\fB\-\-home\fP="/Users/mattbutcher/Code/helm\_home"
location of your Helm config. Overrides $HELM\_HOME
.PP
\fB\-\-host\fP=""
address of tiller. Overrides $HELM\_HOST
.PP
\fB\-\-kube\-context\fP=""
name of the kubeconfig context to use
.SH SEE ALSO
.PP
\fBhelm(1)\fP
.SH HISTORY
.PP
1\-Nov\-2016 Auto generated by spf13/cobra

@ -0,0 +1,47 @@
.TH "HELM" "1" "Nov 2016" "Auto generated by spf13/cobra" ""
.nh
.ad l
.SH NAME
.PP
helm\-home \- displays the location of HELM\_HOME
.SH SYNOPSIS
.PP
\fBhelm home\fP
.SH DESCRIPTION
.PP
This command displays the location of HELM\_HOME. This is where
any helm configuration files live.
.SH OPTIONS INHERITED FROM PARENT COMMANDS
.PP
\fB\-\-debug\fP[=false]
enable verbose output
.PP
\fB\-\-home\fP="/Users/mattbutcher/Code/helm\_home"
location of your Helm config. Overrides $HELM\_HOME
.PP
\fB\-\-host\fP=""
address of tiller. Overrides $HELM\_HOST
.PP
\fB\-\-kube\-context\fP=""
name of the kubeconfig context to use
.SH SEE ALSO
.PP
\fBhelm(1)\fP
.SH HISTORY
.PP
1\-Nov\-2016 Auto generated by spf13/cobra

@ -0,0 +1,85 @@
.TH "HELM" "1" "Nov 2016" "Auto generated by spf13/cobra" ""
.nh
.ad l
.SH NAME
.PP
helm\-init \- initialize Helm on both client and server
.SH SYNOPSIS
.PP
\fBhelm init\fP
.SH DESCRIPTION
.PP
This command installs Tiller (the helm server side component) onto your
Kubernetes Cluster and sets up local configuration in $HELM\_HOME (default \~/.helm/)
.PP
As with the rest of the Helm commands, 'helm init' discovers Kubernetes clusters
by reading $KUBECONFIG (default '\~/.kube/config') and using the default context.
.PP
To set up just a local environment, use '\-\-client\-only'. That will configure
$HELM\_HOME, but not attempt to connect to a remote cluster and install the Tiller
deployment.
.PP
When installing Tiller, 'helm init' will attempt to install the latest released
version. You can specify an alternative image with '\-\-tiller\-image'. For those
frequently working on the latest code, the flag '\-\-canary\-image' will install
the latest pre\-release version of Tiller (e.g. the HEAD commit in the GitHub
repository on the master branch).
.PP
To dump a manifest containing the Tiller deployment YAML, combine the
'\-\-dry\-run' and '\-\-debug' flags.
.SH OPTIONS
.PP
\fB\-\-canary\-image\fP[=false]
use the canary tiller image
.PP
\fB\-c\fP, \fB\-\-client\-only\fP[=false]
if set does not install tiller
.PP
\fB\-\-dry\-run\fP[=false]
do not install local or remote
.PP
\fB\-i\fP, \fB\-\-tiller\-image\fP=""
override tiller image
.SH OPTIONS INHERITED FROM PARENT COMMANDS
.PP
\fB\-\-debug\fP[=false]
enable verbose output
.PP
\fB\-\-home\fP="/Users/mattbutcher/Code/helm\_home"
location of your Helm config. Overrides $HELM\_HOME
.PP
\fB\-\-host\fP=""
address of tiller. Overrides $HELM\_HOST
.PP
\fB\-\-kube\-context\fP=""
name of the kubeconfig context to use
.SH SEE ALSO
.PP
\fBhelm(1)\fP
.SH HISTORY
.PP
1\-Nov\-2016 Auto generated by spf13/cobra

@ -0,0 +1,64 @@
.TH "HELM" "1" "Nov 2016" "Auto generated by spf13/cobra" ""
.nh
.ad l
.SH NAME
.PP
helm\-inspect \- inspect a chart
.SH SYNOPSIS
.PP
\fBhelm inspect [CHART]\fP
.SH DESCRIPTION
.PP
This command inspects a chart and displays information. It takes a chart reference
('stable/drupal'), a full path to a directory or packaged chart, or a URL.
.PP
Inspect prints the contents of the Chart.yaml file and the values.yaml file.
.SH OPTIONS
.PP
\fB\-\-keyring\fP="/Users/mattbutcher/.gnupg/pubring.gpg"
path to the keyring containing public verification keys
.PP
\fB\-\-verify\fP[=false]
verify the provenance data for this chart
.PP
\fB\-\-version\fP=""
version of the chart. By default, the newest chart is shown
.SH OPTIONS INHERITED FROM PARENT COMMANDS
.PP
\fB\-\-debug\fP[=false]
enable verbose output
.PP
\fB\-\-home\fP="/Users/mattbutcher/Code/helm\_home"
location of your Helm config. Overrides $HELM\_HOME
.PP
\fB\-\-host\fP=""
address of tiller. Overrides $HELM\_HOST
.PP
\fB\-\-kube\-context\fP=""
name of the kubeconfig context to use
.SH SEE ALSO
.PP
\fBhelm(1)\fP, \fBhelm\-inspect\-chart(1)\fP, \fBhelm\-inspect\-values(1)\fP
.SH HISTORY
.PP
1\-Nov\-2016 Auto generated by spf13/cobra

@ -0,0 +1,61 @@
.TH "HELM" "1" "Nov 2016" "Auto generated by spf13/cobra" ""
.nh
.ad l
.SH NAME
.PP
helm\-inspect\-chart \- shows inspect chart
.SH SYNOPSIS
.PP
\fBhelm inspect chart [CHART]\fP
.SH DESCRIPTION
.PP
This command inspects a chart (directory, file, or URL) and displays the contents
of the Charts.yaml file
.SH OPTIONS
.PP
\fB\-\-keyring\fP="/Users/mattbutcher/.gnupg/pubring.gpg"
path to the keyring containing public verification keys
.PP
\fB\-\-verify\fP[=false]
verify the provenance data for this chart
.PP
\fB\-\-version\fP=""
version of the chart. By default, the newest chart is shown
.SH OPTIONS INHERITED FROM PARENT COMMANDS
.PP
\fB\-\-debug\fP[=false]
enable verbose output
.PP
\fB\-\-home\fP="/Users/mattbutcher/Code/helm\_home"
location of your Helm config. Overrides $HELM\_HOME
.PP
\fB\-\-host\fP=""
address of tiller. Overrides $HELM\_HOST
.PP
\fB\-\-kube\-context\fP=""
name of the kubeconfig context to use
.SH SEE ALSO
.PP
\fBhelm\-inspect(1)\fP
.SH HISTORY
.PP
1\-Nov\-2016 Auto generated by spf13/cobra

@ -0,0 +1,61 @@
.TH "HELM" "1" "Nov 2016" "Auto generated by spf13/cobra" ""
.nh
.ad l
.SH NAME
.PP
helm\-inspect\-values \- shows inspect values
.SH SYNOPSIS
.PP
\fBhelm inspect values [CHART]\fP
.SH DESCRIPTION
.PP
This command inspects a chart (directory, file, or URL) and displays the contents
of the values.yaml file
.SH OPTIONS
.PP
\fB\-\-keyring\fP="/Users/mattbutcher/.gnupg/pubring.gpg"
path to the keyring containing public verification keys
.PP
\fB\-\-verify\fP[=false]
verify the provenance data for this chart
.PP
\fB\-\-version\fP=""
version of the chart. By default, the newest chart is shown
.SH OPTIONS INHERITED FROM PARENT COMMANDS
.PP
\fB\-\-debug\fP[=false]
enable verbose output
.PP
\fB\-\-home\fP="/Users/mattbutcher/Code/helm\_home"
location of your Helm config. Overrides $HELM\_HOME
.PP
\fB\-\-host\fP=""
address of tiller. Overrides $HELM\_HOST
.PP
\fB\-\-kube\-context\fP=""
name of the kubeconfig context to use
.SH SEE ALSO
.PP
\fBhelm\-inspect(1)\fP
.SH HISTORY
.PP
1\-Nov\-2016 Auto generated by spf13/cobra

@ -0,0 +1,167 @@
.TH "HELM" "1" "Nov 2016" "Auto generated by spf13/cobra" ""
.nh
.ad l
.SH NAME
.PP
helm\-install \- install a chart archive
.SH SYNOPSIS
.PP
\fBhelm install [CHART]\fP
.SH DESCRIPTION
.PP
This command installs a chart archive.
.PP
The install argument must be either a relative path to a chart directory or the
name of a chart in the current working directory.
.PP
To override values in a chart, use either the '\-\-values' flag and pass in a file
or use the '\-\-set' flag and pass configuration from the command line.
.PP
.RS
.nf
$ helm install \-f myvalues.yaml ./redis
.fi
.RE
.PP
or
.PP
.RS
.nf
$ helm install \-\-set name=prod ./redis
.fi
.RE
.PP
To check the generated manifests of a release without installing the chart,
the '\-\-debug' and '\-\-dry\-run' flags can be combined. This will still require a
round\-trip to the Tiller server.
.PP
If \-\-verify is set, the chart MUST have a provenance file, and the provenenace
fall MUST pass all verification steps.
.PP
There are four different ways you can express the chart you want to install:
.IP " 1." 5
By chart reference: helm install stable/mariadb
.IP " 2." 5
By path to a packaged chart: helm install ./nginx\-1.2.3.tgz
.IP " 3." 5
By path to an unpacked chart directory: helm install ./nginx
.IP " 4." 5
By absolute URL: helm install
\[la]https://example.com/charts/nginx-1.2.3.tgz\[ra]
.PP
CHART REFERENCES
.PP
A chart reference is a convenient way of reference a chart in a chart repository.
.PP
When you use a chart reference ('stable/mariadb'), Helm will look in the local
configuration for a chart repository named 'stable', and will then look for a
chart in that repository whose name is 'mariadb'. It will install the latest
version of that chart unless you also supply a version number with the
'\-\-version' flag.
.PP
To see the list of chart repositories, use 'helm repo list'. To search for
charts in a repository, use 'helm search'.
.SH OPTIONS
.PP
\fB\-\-dry\-run\fP[=false]
simulate an install
.PP
\fB\-\-keyring\fP="/Users/mattbutcher/.gnupg/pubring.gpg"
location of public keys used for verification
.PP
\fB\-n\fP, \fB\-\-name\fP=""
release name. If unspecified, it will autogenerate one for you
.PP
\fB\-\-name\-template\fP=""
specify template used to name the release
.PP
\fB\-\-namespace\fP=""
namespace to install the release into
.PP
\fB\-\-no\-hooks\fP[=false]
prevent hooks from running during install
.PP
\fB\-\-replace\fP[=false]
re\-use the given name, even if that name is already used. This is unsafe in production
.PP
\fB\-\-set\fP=null
.PP
.RS
.nf
set values on the command line. Separate values with commas: key1=val1,key2=val2
.fi
.RE
.PP
\fB\-f\fP, \fB\-\-values\fP=""
specify values in a YAML file
.PP
\fB\-\-verify\fP[=false]
verify the package before installing it
.PP
\fB\-\-version\fP=""
specify the exact chart version to install. If this is not specified, the latest version is installed
.SH OPTIONS INHERITED FROM PARENT COMMANDS
.PP
\fB\-\-debug\fP[=false]
enable verbose output
.PP
\fB\-\-home\fP="/Users/mattbutcher/Code/helm\_home"
location of your Helm config. Overrides $HELM\_HOME
.PP
\fB\-\-host\fP=""
address of tiller. Overrides $HELM\_HOST
.PP
\fB\-\-kube\-context\fP=""
name of the kubeconfig context to use
.SH SEE ALSO
.PP
\fBhelm(1)\fP
.SH HISTORY
.PP
1\-Nov\-2016 Auto generated by spf13/cobra

@ -0,0 +1,58 @@
.TH "HELM" "1" "Nov 2016" "Auto generated by spf13/cobra" ""
.nh
.ad l
.SH NAME
.PP
helm\-lint \- examines a chart for possible issues
.SH SYNOPSIS
.PP
\fBhelm lint [flags] PATH\fP
.SH DESCRIPTION
.PP
This command takes a path to a chart and runs a series of tests to verify that
the chart is well\-formed.
.PP
If the linter encounters things that will cause the chart to fail installation,
it will emit [ERROR] messages. If it encounters issues that break with convention
or recommendation, it will emit [WARNING] messages.
.SH OPTIONS
.PP
\fB\-\-strict\fP[=false]
fail on lint warnings
.SH OPTIONS INHERITED FROM PARENT COMMANDS
.PP
\fB\-\-debug\fP[=false]
enable verbose output
.PP
\fB\-\-home\fP="/Users/mattbutcher/Code/helm\_home"
location of your Helm config. Overrides $HELM\_HOME
.PP
\fB\-\-host\fP=""
address of tiller. Overrides $HELM\_HOST
.PP
\fB\-\-kube\-context\fP=""
name of the kubeconfig context to use
.SH SEE ALSO
.PP
\fBhelm(1)\fP
.SH HISTORY
.PP
1\-Nov\-2016 Auto generated by spf13/cobra

@ -0,0 +1,119 @@
.TH "HELM" "1" "Nov 2016" "Auto generated by spf13/cobra" ""
.nh
.ad l
.SH NAME
.PP
helm\-list \- list releases
.SH SYNOPSIS
.PP
\fBhelm list [flags] [FILTER]\fP
.SH DESCRIPTION
.PP
This command lists all of the releases.
.PP
By default, it lists only releases that are deployed or failed. Flags like
'\-\-delete' and '\-\-all' will alter this behavior. Such flags can be combined:
'\-\-deleted \-\-failed'.
.PP
By default, items are sorted alphabetically. Use the '\-d' flag to sort by
release date.
.PP
If an argument is provided, it will be treated as a filter. Filters are
regular expressions (Perl compatible) that are applied to the list of releases.
Only items that match the filter will be returned.
.PP
.RS
.nf
$ helm list 'ara[a\-z]+'
NAME UPDATED CHART
maudlin\-arachnid Mon May 9 16:07:08 2016 alpine\-0.1.0
.fi
.RE
.PP
If no results are found, 'helm list' will exit 0, but with no output (or in
the case of no '\-q' flag, only headers).
.PP
By default, up to 256 items may be returned. To limit this, use the '\-\-max' flag.
Setting '\-\-max' to 0 will not return all results. Rather, it will return the
server's default, which may be much higher than 256. Pairing the '\-\-max'
flag with the '\-\-offset' flag allows you to page through results.
.SH OPTIONS
.PP
\fB\-\-all\fP[=false]
show all releases, not just the ones marked DEPLOYED
.PP
\fB\-d\fP, \fB\-\-date\fP[=false]
sort by release date
.PP
\fB\-\-deleted\fP[=false]
show deleted releases
.PP
\fB\-\-deployed\fP[=false]
show deployed releases. If no other is specified, this will be automatically enabled
.PP
\fB\-\-failed\fP[=false]
show failed releases
.PP
\fB\-m\fP, \fB\-\-max\fP=256
maximum number of releases to fetch
.PP
\fB\-o\fP, \fB\-\-offset\fP=""
next release name in the list, used to offset from start value
.PP
\fB\-r\fP, \fB\-\-reverse\fP[=false]
reverse the sort order
.PP
\fB\-q\fP, \fB\-\-short\fP[=false]
output short (quiet) listing format
.SH OPTIONS INHERITED FROM PARENT COMMANDS
.PP
\fB\-\-debug\fP[=false]
enable verbose output
.PP
\fB\-\-home\fP="/Users/mattbutcher/Code/helm\_home"
location of your Helm config. Overrides $HELM\_HOME
.PP
\fB\-\-host\fP=""
address of tiller. Overrides $HELM\_HOST
.PP
\fB\-\-kube\-context\fP=""
name of the kubeconfig context to use
.SH SEE ALSO
.PP
\fBhelm(1)\fP
.SH HISTORY
.PP
1\-Nov\-2016 Auto generated by spf13/cobra

@ -0,0 +1,73 @@
.TH "HELM" "1" "Nov 2016" "Auto generated by spf13/cobra" ""
.nh
.ad l
.SH NAME
.PP
helm\-package \- package a chart directory into a chart archive
.SH SYNOPSIS
.PP
\fBhelm package [flags] [CHART\_PATH] [...]\fP
.SH DESCRIPTION
.PP
This command packages a chart into a versioned chart archive file. If a path
is given, this will look at that path for a chart (which must contain a
Chart.yaml file) and then package that directory.
.PP
If no path is given, this will look in the present working directory for a
Chart.yaml file, and (if found) build the current directory into a chart.
.PP
Versioned chart archives are used by Helm package repositories.
.SH OPTIONS
.PP
\fB\-\-key\fP=""
name of the key to use when signing. Used if \-\-sign is true
.PP
\fB\-\-keyring\fP="/Users/mattbutcher/.gnupg/pubring.gpg"
location of a public keyring
.PP
\fB\-\-save\fP[=true]
save packaged chart to local chart repository
.PP
\fB\-\-sign\fP[=false]
use a PGP private key to sign this package
.SH OPTIONS INHERITED FROM PARENT COMMANDS
.PP
\fB\-\-debug\fP[=false]
enable verbose output
.PP
\fB\-\-home\fP="/Users/mattbutcher/Code/helm\_home"
location of your Helm config. Overrides $HELM\_HOME
.PP
\fB\-\-host\fP=""
address of tiller. Overrides $HELM\_HOST
.PP
\fB\-\-kube\-context\fP=""
name of the kubeconfig context to use
.SH SEE ALSO
.PP
\fBhelm(1)\fP
.SH HISTORY
.PP
1\-Nov\-2016 Auto generated by spf13/cobra

@ -0,0 +1,51 @@
.TH "HELM" "1" "Nov 2016" "Auto generated by spf13/cobra" ""
.nh
.ad l
.SH NAME
.PP
helm\-repo \- add, list, remove, update, and index chart repositories
.SH SYNOPSIS
.PP
\fBhelm repo [FLAGS] add|remove|list|index|update [ARGS]\fP
.SH DESCRIPTION
.PP
This command consists of multiple subcommands to interact with chart repositories.
.PP
It can be used to add, remove, list, and index chart repositories.
Example usage:
$ helm repo add [NAME] [REPO\_URL]
.SH OPTIONS INHERITED FROM PARENT COMMANDS
.PP
\fB\-\-debug\fP[=false]
enable verbose output
.PP
\fB\-\-home\fP="/Users/mattbutcher/Code/helm\_home"
location of your Helm config. Overrides $HELM\_HOME
.PP
\fB\-\-host\fP=""
address of tiller. Overrides $HELM\_HOST
.PP
\fB\-\-kube\-context\fP=""
name of the kubeconfig context to use
.SH SEE ALSO
.PP
\fBhelm(1)\fP, \fBhelm\-repo\-add(1)\fP, \fBhelm\-repo\-index(1)\fP, \fBhelm\-repo\-list(1)\fP, \fBhelm\-repo\-remove(1)\fP, \fBhelm\-repo\-update(1)\fP
.SH HISTORY
.PP
1\-Nov\-2016 Auto generated by spf13/cobra

@ -0,0 +1,52 @@
.TH "HELM" "1" "Nov 2016" "Auto generated by spf13/cobra" ""
.nh
.ad l
.SH NAME
.PP
helm\-repo\-add \- add a chart repository
.SH SYNOPSIS
.PP
\fBhelm repo add [flags] [NAME] [URL]\fP
.SH DESCRIPTION
.PP
add a chart repository
.SH OPTIONS
.PP
\fB\-\-no\-update\fP[=false]
raise error if repo is already registered
.SH OPTIONS INHERITED FROM PARENT COMMANDS
.PP
\fB\-\-debug\fP[=false]
enable verbose output
.PP
\fB\-\-home\fP="/Users/mattbutcher/Code/helm\_home"
location of your Helm config. Overrides $HELM\_HOME
.PP
\fB\-\-host\fP=""
address of tiller. Overrides $HELM\_HOST
.PP
\fB\-\-kube\-context\fP=""
name of the kubeconfig context to use
.SH SEE ALSO
.PP
\fBhelm\-repo(1)\fP
.SH HISTORY
.PP
1\-Nov\-2016 Auto generated by spf13/cobra

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

Loading…
Cancel
Save