Commit a66a39a1 authored by Matthew Fisher's avatar Matthew Fisher

fix helm init --wait

parent c3124646
...@@ -57,7 +57,7 @@ func newDeleteCmd(c helm.Interface, out io.Writer) *cobra.Command { ...@@ -57,7 +57,7 @@ func newDeleteCmd(c helm.Interface, out io.Writer) *cobra.Command {
SuggestFor: []string{"remove", "rm"}, SuggestFor: []string{"remove", "rm"},
Short: "given a release name, delete the release from Kubernetes", Short: "given a release name, delete the release from Kubernetes",
Long: deleteDesc, Long: deleteDesc,
PreRunE: setupConnection, PreRunE: func(_ *cobra.Command, _ []string) error { return setupConnection() },
RunE: func(cmd *cobra.Command, args []string) error { RunE: func(cmd *cobra.Command, args []string) error {
if len(args) == 0 { if len(args) == 0 {
return errors.New("command 'delete' requires a release name") return errors.New("command 'delete' requires a release name")
......
...@@ -57,7 +57,7 @@ func newGetCmd(client helm.Interface, out io.Writer) *cobra.Command { ...@@ -57,7 +57,7 @@ func newGetCmd(client helm.Interface, out io.Writer) *cobra.Command {
Use: "get [flags] RELEASE_NAME", Use: "get [flags] RELEASE_NAME",
Short: "download a named release", Short: "download a named release",
Long: getHelp, Long: getHelp,
PreRunE: setupConnection, PreRunE: func(_ *cobra.Command, _ []string) error { return setupConnection() },
RunE: func(cmd *cobra.Command, args []string) error { RunE: func(cmd *cobra.Command, args []string) error {
if len(args) == 0 { if len(args) == 0 {
return errReleaseRequired return errReleaseRequired
......
...@@ -47,7 +47,7 @@ func newGetHooksCmd(client helm.Interface, out io.Writer) *cobra.Command { ...@@ -47,7 +47,7 @@ func newGetHooksCmd(client helm.Interface, out io.Writer) *cobra.Command {
Use: "hooks [flags] RELEASE_NAME", Use: "hooks [flags] RELEASE_NAME",
Short: "download all hooks for a named release", Short: "download all hooks for a named release",
Long: getHooksHelp, Long: getHooksHelp,
PreRunE: setupConnection, PreRunE: func(_ *cobra.Command, _ []string) error { return setupConnection() },
RunE: func(cmd *cobra.Command, args []string) error { RunE: func(cmd *cobra.Command, args []string) error {
if len(args) == 0 { if len(args) == 0 {
return errReleaseRequired return errReleaseRequired
......
...@@ -49,7 +49,7 @@ func newGetManifestCmd(client helm.Interface, out io.Writer) *cobra.Command { ...@@ -49,7 +49,7 @@ func newGetManifestCmd(client helm.Interface, out io.Writer) *cobra.Command {
Use: "manifest [flags] RELEASE_NAME", Use: "manifest [flags] RELEASE_NAME",
Short: "download the manifest for a named release", Short: "download the manifest for a named release",
Long: getManifestHelp, Long: getManifestHelp,
PreRunE: setupConnection, PreRunE: func(_ *cobra.Command, _ []string) error { return setupConnection() },
RunE: func(cmd *cobra.Command, args []string) error { RunE: func(cmd *cobra.Command, args []string) error {
if len(args) == 0 { if len(args) == 0 {
return errReleaseRequired return errReleaseRequired
......
...@@ -47,7 +47,7 @@ func newGetValuesCmd(client helm.Interface, out io.Writer) *cobra.Command { ...@@ -47,7 +47,7 @@ func newGetValuesCmd(client helm.Interface, out io.Writer) *cobra.Command {
Use: "values [flags] RELEASE_NAME", Use: "values [flags] RELEASE_NAME",
Short: "download the values file for a named release", Short: "download the values file for a named release",
Long: getValuesHelp, Long: getValuesHelp,
PreRunE: setupConnection, PreRunE: func(_ *cobra.Command, _ []string) error { return setupConnection() },
RunE: func(cmd *cobra.Command, args []string) error { RunE: func(cmd *cobra.Command, args []string) error {
if len(args) == 0 { if len(args) == 0 {
return errReleaseRequired return errReleaseRequired
......
...@@ -165,7 +165,7 @@ func markDeprecated(cmd *cobra.Command, notice string) *cobra.Command { ...@@ -165,7 +165,7 @@ func markDeprecated(cmd *cobra.Command, notice string) *cobra.Command {
return cmd return cmd
} }
func setupConnection(c *cobra.Command, args []string) error { func setupConnection() error {
if settings.TillerHost == "" { if settings.TillerHost == "" {
config, client, err := getKubeClient(settings.KubeContext) config, client, err := getKubeClient(settings.KubeContext)
if err != nil { if err != nil {
...@@ -266,7 +266,7 @@ func ensureHelmClient(h helm.Interface) helm.Interface { ...@@ -266,7 +266,7 @@ func ensureHelmClient(h helm.Interface) helm.Interface {
} }
func newClient() helm.Interface { func newClient() helm.Interface {
options := []helm.Option{helm.Host(settings.TillerHost)} options := []helm.Option{helm.Host(settings.TillerHost), helm.ConnectTimeout(settings.TillerConnectionTimeout)}
if tlsVerify || tlsEnable { if tlsVerify || tlsEnable {
if tlsCaCertFile == "" { if tlsCaCertFile == "" {
......
...@@ -61,7 +61,7 @@ func newHistoryCmd(c helm.Interface, w io.Writer) *cobra.Command { ...@@ -61,7 +61,7 @@ func newHistoryCmd(c helm.Interface, w io.Writer) *cobra.Command {
Long: historyHelp, Long: historyHelp,
Short: "fetch release history", Short: "fetch release history",
Aliases: []string{"hist"}, Aliases: []string{"hist"},
PreRunE: setupConnection, PreRunE: func(_ *cobra.Command, _ []string) error { return setupConnection() },
RunE: func(cmd *cobra.Command, args []string) error { RunE: func(cmd *cobra.Command, args []string) error {
switch { switch {
case len(args) == 0: case len(args) == 0:
......
...@@ -23,6 +23,7 @@ import ( ...@@ -23,6 +23,7 @@ import (
"fmt" "fmt"
"io" "io"
"os" "os"
"time"
"github.com/spf13/cobra" "github.com/spf13/cobra"
apierrors "k8s.io/apimachinery/pkg/api/errors" apierrors "k8s.io/apimachinery/pkg/api/errors"
...@@ -33,6 +34,7 @@ import ( ...@@ -33,6 +34,7 @@ import (
"k8s.io/helm/pkg/getter" "k8s.io/helm/pkg/getter"
"k8s.io/helm/pkg/helm" "k8s.io/helm/pkg/helm"
"k8s.io/helm/pkg/helm/helmpath" "k8s.io/helm/pkg/helm/helmpath"
"k8s.io/helm/pkg/helm/portforwarder"
"k8s.io/helm/pkg/repo" "k8s.io/helm/pkg/repo"
) )
...@@ -310,13 +312,13 @@ func (i *initCmd) run() error { ...@@ -310,13 +312,13 @@ func (i *initCmd) run() error {
"(Use --client-only to suppress this message, or --upgrade to upgrade Tiller to the current version.)") "(Use --client-only to suppress this message, or --upgrade to upgrade Tiller to the current version.)")
} }
} else { } else {
if err := i.ping(); err != nil {
return err
}
fmt.Fprintln(i.out, "\nTiller (the Helm server-side component) has been installed into your Kubernetes Cluster.\n\n"+ fmt.Fprintln(i.out, "\nTiller (the Helm server-side component) has been installed into your Kubernetes Cluster.\n\n"+
"Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.\n"+ "Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.\n"+
"For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation") "For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation")
} }
if err := i.ping(); err != nil {
return err
}
} else { } else {
fmt.Fprintln(i.out, "Not installing Tiller due to 'client-only' flag having been set") fmt.Fprintln(i.out, "Not installing Tiller due to 'client-only' flag having been set")
} }
...@@ -327,6 +329,19 @@ func (i *initCmd) run() error { ...@@ -327,6 +329,19 @@ func (i *initCmd) run() error {
func (i *initCmd) ping() error { func (i *initCmd) ping() error {
if i.wait { if i.wait {
_, kubeClient, err := getKubeClient(settings.KubeContext)
if err != nil {
return err
}
if !watchTillerUntilReady(settings.TillerNamespace, kubeClient, settings.TillerConnectionTimeout) {
return fmt.Errorf("tiller was not found. polling deadline exceeded")
}
// establish a connection to Tiller now that we've effectively guaranteed it's available
if err := setupConnection(); err != nil {
return err
}
i.client = newClient()
if err := i.client.PingTiller(); err != nil { if err := i.client.PingTiller(); err != nil {
return fmt.Errorf("could not ping Tiller: %s", err) return fmt.Errorf("could not ping Tiller: %s", err)
} }
...@@ -443,3 +458,34 @@ func ensureRepoFileFormat(file string, out io.Writer) error { ...@@ -443,3 +458,34 @@ func ensureRepoFileFormat(file string, out io.Writer) error {
return nil return nil
} }
// watchTillerUntilReady waits for the tiller pod to become available. This is useful in situations where we
// want to wait before we call New().
//
// Returns true if it exists. If the timeout was reached and it could not find the pod, it returns false.
func watchTillerUntilReady(namespace string, client kubernetes.Interface, timeout int64) bool {
deadlinePollingChan := time.NewTimer(time.Duration(timeout) * time.Second).C
checkTillerPodTicker := time.NewTicker(500 * time.Millisecond)
doneChan := make(chan bool)
defer checkTillerPodTicker.Stop()
go func() {
for range checkTillerPodTicker.C {
_, err := portforwarder.GetTillerPodName(client.CoreV1(), namespace)
if err == nil {
doneChan <- true
break
}
}
}()
for {
select {
case <-deadlinePollingChan:
return false
case <-doneChan:
return true
}
}
}
...@@ -153,7 +153,7 @@ func newInstallCmd(c helm.Interface, out io.Writer) *cobra.Command { ...@@ -153,7 +153,7 @@ func newInstallCmd(c helm.Interface, out io.Writer) *cobra.Command {
Use: "install [CHART]", Use: "install [CHART]",
Short: "install a chart archive", Short: "install a chart archive",
Long: installDesc, Long: installDesc,
PreRunE: setupConnection, PreRunE: func(_ *cobra.Command, _ []string) error { return setupConnection() },
RunE: func(cmd *cobra.Command, args []string) error { RunE: func(cmd *cobra.Command, args []string) error {
if err := checkArgsLength(len(args), "chart name"); err != nil { if err := checkArgsLength(len(args), "chart name"); err != nil {
return err return err
......
...@@ -88,7 +88,7 @@ func newListCmd(client helm.Interface, out io.Writer) *cobra.Command { ...@@ -88,7 +88,7 @@ func newListCmd(client helm.Interface, out io.Writer) *cobra.Command {
Short: "list releases", Short: "list releases",
Long: listHelp, Long: listHelp,
Aliases: []string{"ls"}, Aliases: []string{"ls"},
PreRunE: setupConnection, PreRunE: func(_ *cobra.Command, _ []string) error { return setupConnection() },
RunE: func(cmd *cobra.Command, args []string) error { RunE: func(cmd *cobra.Command, args []string) error {
if len(args) > 0 { if len(args) > 0 {
list.filter = strings.Join(args, " ") list.filter = strings.Join(args, " ")
......
...@@ -103,7 +103,7 @@ func loadPlugins(baseCmd *cobra.Command, out io.Writer) { ...@@ -103,7 +103,7 @@ func loadPlugins(baseCmd *cobra.Command, out io.Writer) {
if _, err := processParent(cmd, args); err != nil { if _, err := processParent(cmd, args); err != nil {
return err return err
} }
return setupConnection(cmd, args) return setupConnection()
} }
} }
......
...@@ -51,7 +51,7 @@ func newReleaseTestCmd(c helm.Interface, out io.Writer) *cobra.Command { ...@@ -51,7 +51,7 @@ func newReleaseTestCmd(c helm.Interface, out io.Writer) *cobra.Command {
Use: "test [RELEASE]", Use: "test [RELEASE]",
Short: "test a release", Short: "test a release",
Long: releaseTestDesc, Long: releaseTestDesc,
PreRunE: setupConnection, PreRunE: func(_ *cobra.Command, _ []string) error { return setupConnection() },
RunE: func(cmd *cobra.Command, args []string) error { RunE: func(cmd *cobra.Command, args []string) error {
if err := checkArgsLength(len(args), "release name"); err != nil { if err := checkArgsLength(len(args), "release name"); err != nil {
return err return err
......
...@@ -58,7 +58,7 @@ func newResetCmd(client helm.Interface, out io.Writer) *cobra.Command { ...@@ -58,7 +58,7 @@ func newResetCmd(client helm.Interface, out io.Writer) *cobra.Command {
Short: "uninstalls Tiller from a cluster", Short: "uninstalls Tiller from a cluster",
Long: resetDesc, Long: resetDesc,
PreRunE: func(cmd *cobra.Command, args []string) error { PreRunE: func(cmd *cobra.Command, args []string) error {
if err := setupConnection(cmd, args); !d.force && err != nil { if err := setupConnection(); !d.force && err != nil {
return err return err
} }
return nil return nil
......
...@@ -57,7 +57,7 @@ func newRollbackCmd(c helm.Interface, out io.Writer) *cobra.Command { ...@@ -57,7 +57,7 @@ func newRollbackCmd(c helm.Interface, out io.Writer) *cobra.Command {
Use: "rollback [flags] [RELEASE] [REVISION]", Use: "rollback [flags] [RELEASE] [REVISION]",
Short: "roll back a release to a previous revision", Short: "roll back a release to a previous revision",
Long: rollbackDesc, Long: rollbackDesc,
PreRunE: setupConnection, PreRunE: func(_ *cobra.Command, _ []string) error { return setupConnection() },
RunE: func(cmd *cobra.Command, args []string) error { RunE: func(cmd *cobra.Command, args []string) error {
if err := checkArgsLength(len(args), "release name", "revision number"); err != nil { if err := checkArgsLength(len(args), "release name", "revision number"); err != nil {
return err return err
......
...@@ -63,7 +63,7 @@ func newStatusCmd(client helm.Interface, out io.Writer) *cobra.Command { ...@@ -63,7 +63,7 @@ func newStatusCmd(client helm.Interface, out io.Writer) *cobra.Command {
Use: "status [flags] RELEASE_NAME", Use: "status [flags] RELEASE_NAME",
Short: "displays the status of the named release", Short: "displays the status of the named release",
Long: statusHelp, Long: statusHelp,
PreRunE: setupConnection, PreRunE: func(_ *cobra.Command, _ []string) error { return setupConnection() },
RunE: func(cmd *cobra.Command, args []string) error { RunE: func(cmd *cobra.Command, args []string) error {
if len(args) == 0 { if len(args) == 0 {
return errReleaseRequired return errReleaseRequired
......
...@@ -91,7 +91,7 @@ func newUpgradeCmd(client helm.Interface, out io.Writer) *cobra.Command { ...@@ -91,7 +91,7 @@ func newUpgradeCmd(client helm.Interface, out io.Writer) *cobra.Command {
Use: "upgrade [RELEASE] [CHART]", Use: "upgrade [RELEASE] [CHART]",
Short: "upgrade a release", Short: "upgrade a release",
Long: upgradeDesc, Long: upgradeDesc,
PreRunE: setupConnection, PreRunE: func(_ *cobra.Command, _ []string) error { return setupConnection() },
RunE: func(cmd *cobra.Command, args []string) error { RunE: func(cmd *cobra.Command, args []string) error {
if err := checkArgsLength(len(args), "release name", "chart path"); err != nil { if err := checkArgsLength(len(args), "release name", "chart path"); err != nil {
return err return err
......
...@@ -76,7 +76,7 @@ func newVersionCmd(c helm.Interface, out io.Writer) *cobra.Command { ...@@ -76,7 +76,7 @@ func newVersionCmd(c helm.Interface, out io.Writer) *cobra.Command {
if version.showServer { if version.showServer {
// We do this manually instead of in PreRun because we only // We do this manually instead of in PreRun because we only
// need a tunnel if server version is requested. // need a tunnel if server version is requested.
setupConnection(cmd, args) setupConnection()
} }
version.client = ensureHelmClient(version.client) version.client = ensureHelmClient(version.client)
return version.run() return version.run()
......
...@@ -33,6 +33,8 @@ import ( ...@@ -33,6 +33,8 @@ import (
goprom "github.com/grpc-ecosystem/go-grpc-prometheus" goprom "github.com/grpc-ecosystem/go-grpc-prometheus"
"google.golang.org/grpc" "google.golang.org/grpc"
"google.golang.org/grpc/credentials" "google.golang.org/grpc/credentials"
"google.golang.org/grpc/health"
healthpb "google.golang.org/grpc/health/grpc_health_v1"
"google.golang.org/grpc/keepalive" "google.golang.org/grpc/keepalive"
"k8s.io/helm/pkg/kube" "k8s.io/helm/pkg/kube"
...@@ -113,6 +115,9 @@ func main() { ...@@ -113,6 +115,9 @@ func main() {
func start() { func start() {
healthSrv := health.NewServer()
healthSrv.SetServingStatus("Tiller", healthpb.HealthCheckResponse_NOT_SERVING)
clientset, err := kube.New(nil).ClientSet() clientset, err := kube.New(nil).ClientSet()
if err != nil { if err != nil {
logger.Fatalf("Cannot initialize Kubernetes connection: %s", err) logger.Fatalf("Cannot initialize Kubernetes connection: %s", err)
...@@ -168,6 +173,7 @@ func start() { ...@@ -168,6 +173,7 @@ func start() {
})) }))
rootServer = tiller.NewServer(opts...) rootServer = tiller.NewServer(opts...)
healthpb.RegisterHealthServer(rootServer, healthSrv)
lstn, err := net.Listen("tcp", *grpcAddr) lstn, err := net.Listen("tcp", *grpcAddr)
if err != nil { if err != nil {
...@@ -207,6 +213,8 @@ func start() { ...@@ -207,6 +213,8 @@ func start() {
} }
}() }()
healthSrv.SetServingStatus("Tiller", healthpb.HealthCheckResponse_SERVING)
select { select {
case err := <-srvErrCh: case err := <-srvErrCh:
logger.Fatalf("Server died: %s", err) logger.Fatalf("Server died: %s", err)
......
...@@ -36,6 +36,7 @@ Environment: ...@@ -36,6 +36,7 @@ Environment:
--home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm") --home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm")
--host string address of Tiller. Overrides $HELM_HOST --host string address of Tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use --kube-context string name of the kubeconfig context to use
--tiller-connection-timeout int the duration (in seconds) Helm will wait to establish a connection to tiller (default 300)
--tiller-namespace string namespace of Tiller (default "kube-system") --tiller-namespace string namespace of Tiller (default "kube-system")
``` ```
...@@ -67,4 +68,4 @@ Environment: ...@@ -67,4 +68,4 @@ Environment:
* [helm verify](helm_verify.md) - verify that a chart at the given path has been signed and is valid * [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 * [helm version](helm_version.md) - print the client/server version information
###### Auto generated by spf13/cobra on 25-Jan-2018 ###### Auto generated by spf13/cobra on 8-Mar-2018
...@@ -28,10 +28,11 @@ helm completion SHELL ...@@ -28,10 +28,11 @@ helm completion SHELL
--home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm") --home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm")
--host string address of Tiller. Overrides $HELM_HOST --host string address of Tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use --kube-context string name of the kubeconfig context to use
--tiller-connection-timeout int the duration (in seconds) Helm will wait to establish a connection to tiller (default 300)
--tiller-namespace string namespace of Tiller (default "kube-system") --tiller-namespace string namespace of Tiller (default "kube-system")
``` ```
### SEE ALSO ### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes. * [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 25-Jan-2018 ###### Auto generated by spf13/cobra on 8-Mar-2018
...@@ -47,10 +47,11 @@ helm create NAME ...@@ -47,10 +47,11 @@ helm create NAME
--home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm") --home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm")
--host string address of Tiller. Overrides $HELM_HOST --host string address of Tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use --kube-context string name of the kubeconfig context to use
--tiller-connection-timeout int the duration (in seconds) Helm will wait to establish a connection to tiller (default 300)
--tiller-namespace string namespace of Tiller (default "kube-system") --tiller-namespace string namespace of Tiller (default "kube-system")
``` ```
### SEE ALSO ### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes. * [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 25-Jan-2018 ###### Auto generated by spf13/cobra on 8-Mar-2018
...@@ -38,10 +38,11 @@ helm delete [flags] RELEASE_NAME [...] ...@@ -38,10 +38,11 @@ helm delete [flags] RELEASE_NAME [...]
--home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm") --home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm")
--host string address of Tiller. Overrides $HELM_HOST --host string address of Tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use --kube-context string name of the kubeconfig context to use
--tiller-connection-timeout int the duration (in seconds) Helm will wait to establish a connection to tiller (default 300)
--tiller-namespace string namespace of Tiller (default "kube-system") --tiller-namespace string namespace of Tiller (default "kube-system")
``` ```
### SEE ALSO ### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes. * [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 25-Jan-2018 ###### Auto generated by spf13/cobra on 8-Mar-2018
...@@ -61,6 +61,7 @@ for this case. ...@@ -61,6 +61,7 @@ for this case.
--home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm") --home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm")
--host string address of Tiller. Overrides $HELM_HOST --host string address of Tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use --kube-context string name of the kubeconfig context to use
--tiller-connection-timeout int the duration (in seconds) Helm will wait to establish a connection to tiller (default 300)
--tiller-namespace string namespace of Tiller (default "kube-system") --tiller-namespace string namespace of Tiller (default "kube-system")
``` ```
...@@ -70,4 +71,4 @@ for this case. ...@@ -70,4 +71,4 @@ for this case.
* [helm dependency list](helm_dependency_list.md) - list the dependencies for the given chart * [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 * [helm dependency update](helm_dependency_update.md) - update charts/ based on the contents of requirements.yaml
###### Auto generated by spf13/cobra on 25-Jan-2018 ###### Auto generated by spf13/cobra on 8-Mar-2018
...@@ -34,10 +34,11 @@ helm dependency build [flags] CHART ...@@ -34,10 +34,11 @@ helm dependency build [flags] CHART
--home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm") --home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm")
--host string address of Tiller. Overrides $HELM_HOST --host string address of Tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use --kube-context string name of the kubeconfig context to use
--tiller-connection-timeout int the duration (in seconds) Helm will wait to establish a connection to tiller (default 300)
--tiller-namespace string namespace of Tiller (default "kube-system") --tiller-namespace string namespace of Tiller (default "kube-system")
``` ```
### SEE ALSO ### SEE ALSO
* [helm dependency](helm_dependency.md) - manage a chart's dependencies * [helm dependency](helm_dependency.md) - manage a chart's dependencies
###### Auto generated by spf13/cobra on 25-Jan-2018 ###### Auto generated by spf13/cobra on 8-Mar-2018
...@@ -26,10 +26,11 @@ helm dependency list [flags] CHART ...@@ -26,10 +26,11 @@ helm dependency list [flags] CHART
--home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm") --home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm")
--host string address of Tiller. Overrides $HELM_HOST --host string address of Tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use --kube-context string name of the kubeconfig context to use
--tiller-connection-timeout int the duration (in seconds) Helm will wait to establish a connection to tiller (default 300)
--tiller-namespace string namespace of Tiller (default "kube-system") --tiller-namespace string namespace of Tiller (default "kube-system")
``` ```
### SEE ALSO ### SEE ALSO
* [helm dependency](helm_dependency.md) - manage a chart's dependencies * [helm dependency](helm_dependency.md) - manage a chart's dependencies
###### Auto generated by spf13/cobra on 25-Jan-2018 ###### Auto generated by spf13/cobra on 8-Mar-2018
...@@ -39,10 +39,11 @@ helm dependency update [flags] CHART ...@@ -39,10 +39,11 @@ helm dependency update [flags] CHART
--home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm") --home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm")
--host string address of Tiller. Overrides $HELM_HOST --host string address of Tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use --kube-context string name of the kubeconfig context to use
--tiller-connection-timeout int the duration (in seconds) Helm will wait to establish a connection to tiller (default 300)
--tiller-namespace string namespace of Tiller (default "kube-system") --tiller-namespace string namespace of Tiller (default "kube-system")
``` ```
### SEE ALSO ### SEE ALSO
* [helm dependency](helm_dependency.md) - manage a chart's dependencies * [helm dependency](helm_dependency.md) - manage a chart's dependencies
###### Auto generated by spf13/cobra on 25-Jan-2018 ###### Auto generated by spf13/cobra on 8-Mar-2018
...@@ -48,10 +48,11 @@ helm fetch [flags] [chart URL | repo/chartname] [...] ...@@ -48,10 +48,11 @@ helm fetch [flags] [chart URL | repo/chartname] [...]
--home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm") --home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm")
--host string address of Tiller. Overrides $HELM_HOST --host string address of Tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use --kube-context string name of the kubeconfig context to use
--tiller-connection-timeout int the duration (in seconds) Helm will wait to establish a connection to tiller (default 300)
--tiller-namespace string namespace of Tiller (default "kube-system") --tiller-namespace string namespace of Tiller (default "kube-system")
``` ```
### SEE ALSO ### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes. * [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 25-Jan-2018 ###### Auto generated by spf13/cobra on 8-Mar-2018
...@@ -40,6 +40,7 @@ helm get [flags] RELEASE_NAME ...@@ -40,6 +40,7 @@ helm get [flags] RELEASE_NAME
--home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm") --home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm")
--host string address of Tiller. Overrides $HELM_HOST --host string address of Tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use --kube-context string name of the kubeconfig context to use
--tiller-connection-timeout int the duration (in seconds) Helm will wait to establish a connection to tiller (default 300)
--tiller-namespace string namespace of Tiller (default "kube-system") --tiller-namespace string namespace of Tiller (default "kube-system")
``` ```
...@@ -49,4 +50,4 @@ helm get [flags] RELEASE_NAME ...@@ -49,4 +50,4 @@ helm get [flags] RELEASE_NAME
* [helm get manifest](helm_get_manifest.md) - download the manifest 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 * [helm get values](helm_get_values.md) - download the values file for a named release
###### Auto generated by spf13/cobra on 25-Jan-2018 ###### Auto generated by spf13/cobra on 8-Mar-2018
...@@ -33,10 +33,11 @@ helm get hooks [flags] RELEASE_NAME ...@@ -33,10 +33,11 @@ helm get hooks [flags] RELEASE_NAME
--home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm") --home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm")
--host string address of Tiller. Overrides $HELM_HOST --host string address of Tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use --kube-context string name of the kubeconfig context to use
--tiller-connection-timeout int the duration (in seconds) Helm will wait to establish a connection to tiller (default 300)
--tiller-namespace string namespace of Tiller (default "kube-system") --tiller-namespace string namespace of Tiller (default "kube-system")
``` ```
### SEE ALSO ### SEE ALSO
* [helm get](helm_get.md) - download a named release * [helm get](helm_get.md) - download a named release
###### Auto generated by spf13/cobra on 25-Jan-2018 ###### Auto generated by spf13/cobra on 8-Mar-2018
...@@ -35,10 +35,11 @@ helm get manifest [flags] RELEASE_NAME ...@@ -35,10 +35,11 @@ helm get manifest [flags] RELEASE_NAME
--home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm") --home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm")
--host string address of Tiller. Overrides $HELM_HOST --host string address of Tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use --kube-context string name of the kubeconfig context to use
--tiller-connection-timeout int the duration (in seconds) Helm will wait to establish a connection to tiller (default 300)
--tiller-namespace string namespace of Tiller (default "kube-system") --tiller-namespace string namespace of Tiller (default "kube-system")
``` ```
### SEE ALSO ### SEE ALSO
* [helm get](helm_get.md) - download a named release * [helm get](helm_get.md) - download a named release
###### Auto generated by spf13/cobra on 25-Jan-2018 ###### Auto generated by spf13/cobra on 8-Mar-2018
...@@ -32,10 +32,11 @@ helm get values [flags] RELEASE_NAME ...@@ -32,10 +32,11 @@ helm get values [flags] RELEASE_NAME
--home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm") --home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm")
--host string address of Tiller. Overrides $HELM_HOST --host string address of Tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use --kube-context string name of the kubeconfig context to use
--tiller-connection-timeout int the duration (in seconds) Helm will wait to establish a connection to tiller (default 300)
--tiller-namespace string namespace of Tiller (default "kube-system") --tiller-namespace string namespace of Tiller (default "kube-system")
``` ```
### SEE ALSO ### SEE ALSO
* [helm get](helm_get.md) - download a named release * [helm get](helm_get.md) - download a named release
###### Auto generated by spf13/cobra on 25-Jan-2018 ###### Auto generated by spf13/cobra on 8-Mar-2018
...@@ -44,10 +44,11 @@ helm history [flags] RELEASE_NAME ...@@ -44,10 +44,11 @@ helm history [flags] RELEASE_NAME
--home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm") --home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm")
--host string address of Tiller. Overrides $HELM_HOST --host string address of Tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use --kube-context string name of the kubeconfig context to use
--tiller-connection-timeout int the duration (in seconds) Helm will wait to establish a connection to tiller (default 300)
--tiller-namespace string namespace of Tiller (default "kube-system") --tiller-namespace string namespace of Tiller (default "kube-system")
``` ```
### SEE ALSO ### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes. * [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 25-Jan-2018 ###### Auto generated by spf13/cobra on 8-Mar-2018
...@@ -21,10 +21,11 @@ helm home ...@@ -21,10 +21,11 @@ helm home
--home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm") --home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm")
--host string address of Tiller. Overrides $HELM_HOST --host string address of Tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use --kube-context string name of the kubeconfig context to use
--tiller-connection-timeout int the duration (in seconds) Helm will wait to establish a connection to tiller (default 300)
--tiller-namespace string namespace of Tiller (default "kube-system") --tiller-namespace string namespace of Tiller (default "kube-system")
``` ```
### SEE ALSO ### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes. * [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 25-Jan-2018 ###### Auto generated by spf13/cobra on 8-Mar-2018
...@@ -64,10 +64,11 @@ helm init ...@@ -64,10 +64,11 @@ helm init
--home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm") --home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm")
--host string address of Tiller. Overrides $HELM_HOST --host string address of Tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use --kube-context string name of the kubeconfig context to use
--tiller-connection-timeout int the duration (in seconds) Helm will wait to establish a connection to tiller (default 300)
--tiller-namespace string namespace of Tiller (default "kube-system") --tiller-namespace string namespace of Tiller (default "kube-system")
``` ```
### SEE ALSO ### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes. * [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 6-Mar-2018 ###### Auto generated by spf13/cobra on 8-Mar-2018
...@@ -35,6 +35,7 @@ helm inspect [CHART] ...@@ -35,6 +35,7 @@ helm inspect [CHART]
--home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm") --home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm")
--host string address of Tiller. Overrides $HELM_HOST --host string address of Tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use --kube-context string name of the kubeconfig context to use
--tiller-connection-timeout int the duration (in seconds) Helm will wait to establish a connection to tiller (default 300)
--tiller-namespace string namespace of Tiller (default "kube-system") --tiller-namespace string namespace of Tiller (default "kube-system")
``` ```
...@@ -43,4 +44,4 @@ helm inspect [CHART] ...@@ -43,4 +44,4 @@ helm inspect [CHART]
* [helm inspect chart](helm_inspect_chart.md) - shows inspect chart * [helm inspect chart](helm_inspect_chart.md) - shows inspect chart
* [helm inspect values](helm_inspect_values.md) - shows inspect values * [helm inspect values](helm_inspect_values.md) - shows inspect values
###### Auto generated by spf13/cobra on 25-Jan-2018 ###### Auto generated by spf13/cobra on 8-Mar-2018
...@@ -33,10 +33,11 @@ helm inspect chart [CHART] ...@@ -33,10 +33,11 @@ helm inspect chart [CHART]
--home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm") --home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm")
--host string address of Tiller. Overrides $HELM_HOST --host string address of Tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use --kube-context string name of the kubeconfig context to use
--tiller-connection-timeout int the duration (in seconds) Helm will wait to establish a connection to tiller (default 300)
--tiller-namespace string namespace of Tiller (default "kube-system") --tiller-namespace string namespace of Tiller (default "kube-system")
``` ```
### SEE ALSO ### SEE ALSO
* [helm inspect](helm_inspect.md) - inspect a chart * [helm inspect](helm_inspect.md) - inspect a chart
###### Auto generated by spf13/cobra on 25-Jan-2018 ###### Auto generated by spf13/cobra on 8-Mar-2018
...@@ -33,10 +33,11 @@ helm inspect values [CHART] ...@@ -33,10 +33,11 @@ helm inspect values [CHART]
--home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm") --home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm")
--host string address of Tiller. Overrides $HELM_HOST --host string address of Tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use --kube-context string name of the kubeconfig context to use
--tiller-connection-timeout int the duration (in seconds) Helm will wait to establish a connection to tiller (default 300)
--tiller-namespace string namespace of Tiller (default "kube-system") --tiller-namespace string namespace of Tiller (default "kube-system")
``` ```
### SEE ALSO ### SEE ALSO
* [helm inspect](helm_inspect.md) - inspect a chart * [helm inspect](helm_inspect.md) - inspect a chart
###### Auto generated by spf13/cobra on 25-Jan-2018 ###### Auto generated by spf13/cobra on 8-Mar-2018
...@@ -102,10 +102,11 @@ helm install [CHART] ...@@ -102,10 +102,11 @@ helm install [CHART]
--home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm") --home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm")
--host string address of Tiller. Overrides $HELM_HOST --host string address of Tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use --kube-context string name of the kubeconfig context to use
--tiller-connection-timeout int the duration (in seconds) Helm will wait to establish a connection to tiller (default 300)
--tiller-namespace string namespace of Tiller (default "kube-system") --tiller-namespace string namespace of Tiller (default "kube-system")
``` ```
### SEE ALSO ### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes. * [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 25-Jan-2018 ###### Auto generated by spf13/cobra on 8-Mar-2018
...@@ -34,10 +34,11 @@ helm lint [flags] PATH ...@@ -34,10 +34,11 @@ helm lint [flags] PATH
--home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm") --home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm")
--host string address of Tiller. Overrides $HELM_HOST --host string address of Tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use --kube-context string name of the kubeconfig context to use
--tiller-connection-timeout int the duration (in seconds) Helm will wait to establish a connection to tiller (default 300)
--tiller-namespace string namespace of Tiller (default "kube-system") --tiller-namespace string namespace of Tiller (default "kube-system")
``` ```
### SEE ALSO ### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes. * [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 25-Jan-2018 ###### Auto generated by spf13/cobra on 8-Mar-2018
...@@ -66,10 +66,11 @@ helm list [flags] [FILTER] ...@@ -66,10 +66,11 @@ helm list [flags] [FILTER]
--home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm") --home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm")
--host string address of Tiller. Overrides $HELM_HOST --host string address of Tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use --kube-context string name of the kubeconfig context to use
--tiller-connection-timeout int the duration (in seconds) Helm will wait to establish a connection to tiller (default 300)
--tiller-namespace string namespace of Tiller (default "kube-system") --tiller-namespace string namespace of Tiller (default "kube-system")
``` ```
### SEE ALSO ### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes. * [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 25-Jan-2018 ###### Auto generated by spf13/cobra on 8-Mar-2018
...@@ -40,10 +40,11 @@ helm package [flags] [CHART_PATH] [...] ...@@ -40,10 +40,11 @@ helm package [flags] [CHART_PATH] [...]
--home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm") --home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm")
--host string address of Tiller. Overrides $HELM_HOST --host string address of Tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use --kube-context string name of the kubeconfig context to use
--tiller-connection-timeout int the duration (in seconds) Helm will wait to establish a connection to tiller (default 300)
--tiller-namespace string namespace of Tiller (default "kube-system") --tiller-namespace string namespace of Tiller (default "kube-system")
``` ```
### SEE ALSO ### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes. * [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 25-Jan-2018 ###### Auto generated by spf13/cobra on 8-Mar-2018
...@@ -16,6 +16,7 @@ Manage client-side Helm plugins. ...@@ -16,6 +16,7 @@ Manage client-side Helm plugins.
--home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm") --home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm")
--host string address of Tiller. Overrides $HELM_HOST --host string address of Tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use --kube-context string name of the kubeconfig context to use
--tiller-connection-timeout int the duration (in seconds) Helm will wait to establish a connection to tiller (default 300)
--tiller-namespace string namespace of Tiller (default "kube-system") --tiller-namespace string namespace of Tiller (default "kube-system")
``` ```
...@@ -26,4 +27,4 @@ Manage client-side Helm plugins. ...@@ -26,4 +27,4 @@ Manage client-side Helm plugins.
* [helm plugin remove](helm_plugin_remove.md) - remove one or more Helm plugins * [helm plugin remove](helm_plugin_remove.md) - remove one or more Helm plugins
* [helm plugin update](helm_plugin_update.md) - update one or more Helm plugins * [helm plugin update](helm_plugin_update.md) - update one or more Helm plugins
###### Auto generated by spf13/cobra on 25-Jan-2018 ###### Auto generated by spf13/cobra on 8-Mar-2018
...@@ -29,10 +29,11 @@ helm plugin install [options] <path|url>... ...@@ -29,10 +29,11 @@ helm plugin install [options] <path|url>...
--home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm") --home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm")
--host string address of Tiller. Overrides $HELM_HOST --host string address of Tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use --kube-context string name of the kubeconfig context to use
--tiller-connection-timeout int the duration (in seconds) Helm will wait to establish a connection to tiller (default 300)
--tiller-namespace string namespace of Tiller (default "kube-system") --tiller-namespace string namespace of Tiller (default "kube-system")
``` ```
### SEE ALSO ### SEE ALSO
* [helm plugin](helm_plugin.md) - add, list, or remove Helm plugins * [helm plugin](helm_plugin.md) - add, list, or remove Helm plugins
###### Auto generated by spf13/cobra on 25-Jan-2018 ###### Auto generated by spf13/cobra on 8-Mar-2018
...@@ -18,10 +18,11 @@ helm plugin list ...@@ -18,10 +18,11 @@ helm plugin list
--home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm") --home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm")
--host string address of Tiller. Overrides $HELM_HOST --host string address of Tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use --kube-context string name of the kubeconfig context to use
--tiller-connection-timeout int the duration (in seconds) Helm will wait to establish a connection to tiller (default 300)
--tiller-namespace string namespace of Tiller (default "kube-system") --tiller-namespace string namespace of Tiller (default "kube-system")
``` ```
### SEE ALSO ### SEE ALSO
* [helm plugin](helm_plugin.md) - add, list, or remove Helm plugins * [helm plugin](helm_plugin.md) - add, list, or remove Helm plugins
###### Auto generated by spf13/cobra on 25-Jan-2018 ###### Auto generated by spf13/cobra on 8-Mar-2018
...@@ -18,10 +18,11 @@ helm plugin remove <plugin>... ...@@ -18,10 +18,11 @@ helm plugin remove <plugin>...
--home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm") --home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm")
--host string address of Tiller. Overrides $HELM_HOST --host string address of Tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use --kube-context string name of the kubeconfig context to use
--tiller-connection-timeout int the duration (in seconds) Helm will wait to establish a connection to tiller (default 300)
--tiller-namespace string namespace of Tiller (default "kube-system") --tiller-namespace string namespace of Tiller (default "kube-system")
``` ```
### SEE ALSO ### SEE ALSO
* [helm plugin](helm_plugin.md) - add, list, or remove Helm plugins * [helm plugin](helm_plugin.md) - add, list, or remove Helm plugins
###### Auto generated by spf13/cobra on 25-Jan-2018 ###### Auto generated by spf13/cobra on 8-Mar-2018
...@@ -18,10 +18,11 @@ helm plugin update <plugin>... ...@@ -18,10 +18,11 @@ helm plugin update <plugin>...
--home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm") --home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm")
--host string address of Tiller. Overrides $HELM_HOST --host string address of Tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use --kube-context string name of the kubeconfig context to use
--tiller-connection-timeout int the duration (in seconds) Helm will wait to establish a connection to tiller (default 300)
--tiller-namespace string namespace of Tiller (default "kube-system") --tiller-namespace string namespace of Tiller (default "kube-system")
``` ```
### SEE ALSO ### SEE ALSO
* [helm plugin](helm_plugin.md) - add, list, or remove Helm plugins * [helm plugin](helm_plugin.md) - add, list, or remove Helm plugins
###### Auto generated by spf13/cobra on 25-Jan-2018 ###### Auto generated by spf13/cobra on 8-Mar-2018
...@@ -20,6 +20,7 @@ Example usage: ...@@ -20,6 +20,7 @@ Example usage:
--home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm") --home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm")
--host string address of Tiller. Overrides $HELM_HOST --host string address of Tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use --kube-context string name of the kubeconfig context to use
--tiller-connection-timeout int the duration (in seconds) Helm will wait to establish a connection to tiller (default 300)
--tiller-namespace string namespace of Tiller (default "kube-system") --tiller-namespace string namespace of Tiller (default "kube-system")
``` ```
...@@ -31,4 +32,4 @@ Example usage: ...@@ -31,4 +32,4 @@ Example usage:
* [helm repo remove](helm_repo_remove.md) - remove a chart repository * [helm repo remove](helm_repo_remove.md) - remove a chart repository
* [helm repo update](helm_repo_update.md) - update information of available charts locally from chart repositories * [helm repo update](helm_repo_update.md) - update information of available charts locally from chart repositories
###### Auto generated by spf13/cobra on 25-Jan-2018 ###### Auto generated by spf13/cobra on 8-Mar-2018
...@@ -27,10 +27,11 @@ helm repo add [flags] [NAME] [URL] ...@@ -27,10 +27,11 @@ helm repo add [flags] [NAME] [URL]
--home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm") --home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm")
--host string address of Tiller. Overrides $HELM_HOST --host string address of Tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use --kube-context string name of the kubeconfig context to use
--tiller-connection-timeout int the duration (in seconds) Helm will wait to establish a connection to tiller (default 300)
--tiller-namespace string namespace of Tiller (default "kube-system") --tiller-namespace string namespace of Tiller (default "kube-system")
``` ```
### SEE ALSO ### SEE ALSO
* [helm repo](helm_repo.md) - add, list, remove, update, and index chart repositories * [helm repo](helm_repo.md) - add, list, remove, update, and index chart repositories
###### Auto generated by spf13/cobra on 25-Jan-2018 ###### Auto generated by spf13/cobra on 8-Mar-2018
...@@ -34,10 +34,11 @@ helm repo index [flags] [DIR] ...@@ -34,10 +34,11 @@ helm repo index [flags] [DIR]
--home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm") --home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm")
--host string address of Tiller. Overrides $HELM_HOST --host string address of Tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use --kube-context string name of the kubeconfig context to use
--tiller-connection-timeout int the duration (in seconds) Helm will wait to establish a connection to tiller (default 300)
--tiller-namespace string namespace of Tiller (default "kube-system") --tiller-namespace string namespace of Tiller (default "kube-system")
``` ```
### SEE ALSO ### SEE ALSO
* [helm repo](helm_repo.md) - add, list, remove, update, and index chart repositories * [helm repo](helm_repo.md) - add, list, remove, update, and index chart repositories
###### Auto generated by spf13/cobra on 25-Jan-2018 ###### Auto generated by spf13/cobra on 8-Mar-2018
...@@ -18,10 +18,11 @@ helm repo list [flags] ...@@ -18,10 +18,11 @@ helm repo list [flags]
--home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm") --home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm")
--host string address of Tiller. Overrides $HELM_HOST --host string address of Tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use --kube-context string name of the kubeconfig context to use
--tiller-connection-timeout int the duration (in seconds) Helm will wait to establish a connection to tiller (default 300)
--tiller-namespace string namespace of Tiller (default "kube-system") --tiller-namespace string namespace of Tiller (default "kube-system")
``` ```
### SEE ALSO ### SEE ALSO
* [helm repo](helm_repo.md) - add, list, remove, update, and index chart repositories * [helm repo](helm_repo.md) - add, list, remove, update, and index chart repositories
###### Auto generated by spf13/cobra on 25-Jan-2018 ###### Auto generated by spf13/cobra on 8-Mar-2018
...@@ -18,10 +18,11 @@ helm repo remove [flags] [NAME] ...@@ -18,10 +18,11 @@ helm repo remove [flags] [NAME]
--home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm") --home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm")
--host string address of Tiller. Overrides $HELM_HOST --host string address of Tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use --kube-context string name of the kubeconfig context to use
--tiller-connection-timeout int the duration (in seconds) Helm will wait to establish a connection to tiller (default 300)
--tiller-namespace string namespace of Tiller (default "kube-system") --tiller-namespace string namespace of Tiller (default "kube-system")
``` ```
### SEE ALSO ### SEE ALSO
* [helm repo](helm_repo.md) - add, list, remove, update, and index chart repositories * [helm repo](helm_repo.md) - add, list, remove, update, and index chart repositories
###### Auto generated by spf13/cobra on 25-Jan-2018 ###### Auto generated by spf13/cobra on 8-Mar-2018
...@@ -24,10 +24,11 @@ helm repo update ...@@ -24,10 +24,11 @@ helm repo update
--home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm") --home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm")
--host string address of Tiller. Overrides $HELM_HOST --host string address of Tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use --kube-context string name of the kubeconfig context to use
--tiller-connection-timeout int the duration (in seconds) Helm will wait to establish a connection to tiller (default 300)
--tiller-namespace string namespace of Tiller (default "kube-system") --tiller-namespace string namespace of Tiller (default "kube-system")
``` ```
### SEE ALSO ### SEE ALSO
* [helm repo](helm_repo.md) - add, list, remove, update, and index chart repositories * [helm repo](helm_repo.md) - add, list, remove, update, and index chart repositories
###### Auto generated by spf13/cobra on 25-Jan-2018 ###### Auto generated by spf13/cobra on 8-Mar-2018
...@@ -34,10 +34,11 @@ helm reset ...@@ -34,10 +34,11 @@ helm reset
--home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm") --home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm")
--host string address of Tiller. Overrides $HELM_HOST --host string address of Tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use --kube-context string name of the kubeconfig context to use
--tiller-connection-timeout int the duration (in seconds) Helm will wait to establish a connection to tiller (default 300)
--tiller-namespace string namespace of Tiller (default "kube-system") --tiller-namespace string namespace of Tiller (default "kube-system")
``` ```
### SEE ALSO ### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes. * [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 8-Feb-2018 ###### Auto generated by spf13/cobra on 8-Mar-2018
...@@ -40,10 +40,11 @@ helm rollback [flags] [RELEASE] [REVISION] ...@@ -40,10 +40,11 @@ helm rollback [flags] [RELEASE] [REVISION]
--home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm") --home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm")
--host string address of Tiller. Overrides $HELM_HOST --host string address of Tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use --kube-context string name of the kubeconfig context to use
--tiller-connection-timeout int the duration (in seconds) Helm will wait to establish a connection to tiller (default 300)
--tiller-namespace string namespace of Tiller (default "kube-system") --tiller-namespace string namespace of Tiller (default "kube-system")
``` ```
### SEE ALSO ### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes. * [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 25-Jan-2018 ###### Auto generated by spf13/cobra on 8-Mar-2018
...@@ -31,10 +31,11 @@ helm search [keyword] ...@@ -31,10 +31,11 @@ helm search [keyword]
--home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm") --home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm")
--host string address of Tiller. Overrides $HELM_HOST --host string address of Tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use --kube-context string name of the kubeconfig context to use
--tiller-connection-timeout int the duration (in seconds) Helm will wait to establish a connection to tiller (default 300)
--tiller-namespace string namespace of Tiller (default "kube-system") --tiller-namespace string namespace of Tiller (default "kube-system")
``` ```
### SEE ALSO ### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes. * [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 25-Jan-2018 ###### Auto generated by spf13/cobra on 8-Mar-2018
...@@ -39,10 +39,11 @@ helm serve ...@@ -39,10 +39,11 @@ helm serve
--home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm") --home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm")
--host string address of Tiller. Overrides $HELM_HOST --host string address of Tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use --kube-context string name of the kubeconfig context to use
--tiller-connection-timeout int the duration (in seconds) Helm will wait to establish a connection to tiller (default 300)
--tiller-namespace string namespace of Tiller (default "kube-system") --tiller-namespace string namespace of Tiller (default "kube-system")
``` ```
### SEE ALSO ### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes. * [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 25-Jan-2018 ###### Auto generated by spf13/cobra on 8-Mar-2018
...@@ -39,10 +39,11 @@ helm status [flags] RELEASE_NAME ...@@ -39,10 +39,11 @@ helm status [flags] RELEASE_NAME
--home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm") --home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm")
--host string address of Tiller. Overrides $HELM_HOST --host string address of Tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use --kube-context string name of the kubeconfig context to use
--tiller-connection-timeout int the duration (in seconds) Helm will wait to establish a connection to tiller (default 300)
--tiller-namespace string namespace of Tiller (default "kube-system") --tiller-namespace string namespace of Tiller (default "kube-system")
``` ```
### SEE ALSO ### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes. * [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 25-Jan-2018 ###### Auto generated by spf13/cobra on 8-Mar-2018
...@@ -43,10 +43,11 @@ helm template [flags] CHART ...@@ -43,10 +43,11 @@ helm template [flags] CHART
--home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm") --home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm")
--host string address of Tiller. Overrides $HELM_HOST --host string address of Tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use --kube-context string name of the kubeconfig context to use
--tiller-connection-timeout int the duration (in seconds) Helm will wait to establish a connection to tiller (default 300)
--tiller-namespace string namespace of Tiller (default "kube-system") --tiller-namespace string namespace of Tiller (default "kube-system")
``` ```
### SEE ALSO ### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes. * [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 25-Jan-2018 ###### Auto generated by spf13/cobra on 8-Mar-2018
...@@ -35,10 +35,11 @@ helm test [RELEASE] ...@@ -35,10 +35,11 @@ helm test [RELEASE]
--home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm") --home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm")
--host string address of Tiller. Overrides $HELM_HOST --host string address of Tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use --kube-context string name of the kubeconfig context to use
--tiller-connection-timeout int the duration (in seconds) Helm will wait to establish a connection to tiller (default 300)
--tiller-namespace string namespace of Tiller (default "kube-system") --tiller-namespace string namespace of Tiller (default "kube-system")
``` ```
### SEE ALSO ### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes. * [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 25-Jan-2018 ###### Auto generated by spf13/cobra on 8-Mar-2018
...@@ -70,10 +70,11 @@ helm upgrade [RELEASE] [CHART] ...@@ -70,10 +70,11 @@ helm upgrade [RELEASE] [CHART]
--home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm") --home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm")
--host string address of Tiller. Overrides $HELM_HOST --host string address of Tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use --kube-context string name of the kubeconfig context to use
--tiller-connection-timeout int the duration (in seconds) Helm will wait to establish a connection to tiller (default 300)
--tiller-namespace string namespace of Tiller (default "kube-system") --tiller-namespace string namespace of Tiller (default "kube-system")
``` ```
### SEE ALSO ### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes. * [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 25-Jan-2018 ###### Auto generated by spf13/cobra on 8-Mar-2018
...@@ -33,10 +33,11 @@ helm verify [flags] PATH ...@@ -33,10 +33,11 @@ helm verify [flags] PATH
--home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm") --home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm")
--host string address of Tiller. Overrides $HELM_HOST --host string address of Tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use --kube-context string name of the kubeconfig context to use
--tiller-connection-timeout int the duration (in seconds) Helm will wait to establish a connection to tiller (default 300)
--tiller-namespace string namespace of Tiller (default "kube-system") --tiller-namespace string namespace of Tiller (default "kube-system")
``` ```
### SEE ALSO ### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes. * [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 25-Jan-2018 ###### Auto generated by spf13/cobra on 8-Mar-2018
...@@ -48,10 +48,11 @@ helm version ...@@ -48,10 +48,11 @@ helm version
--home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm") --home string location of your Helm config. Overrides $HELM_HOME (default "~/.helm")
--host string address of Tiller. Overrides $HELM_HOST --host string address of Tiller. Overrides $HELM_HOST
--kube-context string name of the kubeconfig context to use --kube-context string name of the kubeconfig context to use
--tiller-connection-timeout int the duration (in seconds) Helm will wait to establish a connection to tiller (default 300)
--tiller-namespace string namespace of Tiller (default "kube-system") --tiller-namespace string namespace of Tiller (default "kube-system")
``` ```
### SEE ALSO ### SEE ALSO
* [helm](helm.md) - The Helm package manager for Kubernetes. * [helm](helm.md) - The Helm package manager for Kubernetes.
###### Auto generated by spf13/cobra on 11-Feb-2018 ###### Auto generated by spf13/cobra on 8-Mar-2018
...@@ -17,6 +17,7 @@ limitations under the License. ...@@ -17,6 +17,7 @@ limitations under the License.
package helm // import "k8s.io/helm/pkg/helm" package helm // import "k8s.io/helm/pkg/helm"
import ( import (
"fmt"
"io" "io"
"time" "time"
...@@ -25,6 +26,7 @@ import ( ...@@ -25,6 +26,7 @@ import (
"google.golang.org/grpc/credentials" "google.golang.org/grpc/credentials"
"google.golang.org/grpc/keepalive" "google.golang.org/grpc/keepalive"
healthpb "google.golang.org/grpc/health/grpc_health_v1"
"k8s.io/helm/pkg/chartutil" "k8s.io/helm/pkg/chartutil"
"k8s.io/helm/pkg/proto/hapi/chart" "k8s.io/helm/pkg/proto/hapi/chart"
rls "k8s.io/helm/pkg/proto/hapi/services" rls "k8s.io/helm/pkg/proto/hapi/services"
...@@ -321,7 +323,7 @@ func (h *Client) connect(ctx context.Context) (conn *grpc.ClientConn, err error) ...@@ -321,7 +323,7 @@ func (h *Client) connect(ctx context.Context) (conn *grpc.ClientConn, err error)
default: default:
opts = append(opts, grpc.WithInsecure()) opts = append(opts, grpc.WithInsecure())
} }
ctx, cancel := context.WithTimeout(ctx, 5*time.Second) ctx, cancel := context.WithTimeout(ctx, h.opts.connectTimeout)
defer cancel() defer cancel()
if conn, err = grpc.DialContext(ctx, h.opts.host, opts...); err != nil { if conn, err = grpc.DialContext(ctx, h.opts.host, opts...); err != nil {
return nil, err return nil, err
...@@ -488,6 +490,17 @@ func (h *Client) ping(ctx context.Context) error { ...@@ -488,6 +490,17 @@ func (h *Client) ping(ctx context.Context) error {
} }
defer c.Close() defer c.Close()
rlc := rls.NewReleaseServiceClient(c) healthClient := healthpb.NewHealthClient(c)
return rlc.PingTiller(ctx) resp, err := healthClient.Check(ctx, &healthpb.HealthCheckRequest{Service: "Tiller"})
if err != nil {
return err
}
switch resp.GetStatus() {
case healthpb.HealthCheckResponse_SERVING:
return nil
case healthpb.HealthCheckResponse_NOT_SERVING:
return fmt.Errorf("tiller is not serving requests at this time, Please try again later")
default:
return fmt.Errorf("tiller healthcheck returned an unknown status")
}
} }
...@@ -39,6 +39,8 @@ var DefaultHelmHome = filepath.Join(homedir.HomeDir(), ".helm") ...@@ -39,6 +39,8 @@ var DefaultHelmHome = filepath.Join(homedir.HomeDir(), ".helm")
type EnvSettings struct { type EnvSettings struct {
// TillerHost is the host and port of Tiller. // TillerHost is the host and port of Tiller.
TillerHost string TillerHost string
// TillerConnectionTimeout is the duration (in seconds) helm will wait to establish a connection to tiller.
TillerConnectionTimeout int64
// TillerNamespace is the namespace in which Tiller runs. // TillerNamespace is the namespace in which Tiller runs.
TillerNamespace string TillerNamespace string
// Home is the local path to the Helm home directory. // Home is the local path to the Helm home directory.
...@@ -56,6 +58,7 @@ func (s *EnvSettings) AddFlags(fs *pflag.FlagSet) { ...@@ -56,6 +58,7 @@ func (s *EnvSettings) AddFlags(fs *pflag.FlagSet) {
fs.StringVar(&s.KubeContext, "kube-context", "", "name of the kubeconfig context to use") fs.StringVar(&s.KubeContext, "kube-context", "", "name of the kubeconfig context to use")
fs.BoolVar(&s.Debug, "debug", false, "enable verbose output") fs.BoolVar(&s.Debug, "debug", false, "enable verbose output")
fs.StringVar(&s.TillerNamespace, "tiller-namespace", "kube-system", "namespace of Tiller") fs.StringVar(&s.TillerNamespace, "tiller-namespace", "kube-system", "namespace of Tiller")
fs.Int64Var(&s.TillerConnectionTimeout, "tiller-connection-timeout", int64(300), "the duration (in seconds) Helm will wait to establish a connection to tiller")
} }
// Init sets values from the environment. // Init sets values from the environment.
......
...@@ -18,6 +18,7 @@ package helm ...@@ -18,6 +18,7 @@ package helm
import ( import (
"crypto/tls" "crypto/tls"
"time"
"github.com/golang/protobuf/proto" "github.com/golang/protobuf/proto"
"golang.org/x/net/context" "golang.org/x/net/context"
...@@ -78,6 +79,8 @@ type options struct { ...@@ -78,6 +79,8 @@ type options struct {
reuseValues bool reuseValues bool
// release test options are applied directly to the test release history request // release test options are applied directly to the test release history request
testReq rls.TestReleaseRequest testReq rls.TestReleaseRequest
// connectTimeout specifies the time duration Helm will wait to establish a connection to tiller
connectTimeout time.Duration
} }
// Host specifies the host address of the Tiller release server, (default = ":44134"). // Host specifies the host address of the Tiller release server, (default = ":44134").
...@@ -180,6 +183,13 @@ func ReleaseName(name string) InstallOption { ...@@ -180,6 +183,13 @@ func ReleaseName(name string) InstallOption {
} }
} }
// ConnectTimeout specifies the duration (in seconds) Helm will wait to establish a connection to tiller
func ConnectTimeout(timeout int64) Option {
return func(opts *options) {
opts.connectTimeout = time.Duration(timeout) * time.Second
}
}
// InstallTimeout specifies the number of seconds before kubernetes calls timeout // InstallTimeout specifies the number of seconds before kubernetes calls timeout
func InstallTimeout(timeout int64) InstallOption { func InstallTimeout(timeout int64) InstallOption {
return func(opts *options) { return func(opts *options) {
......
...@@ -30,12 +30,12 @@ import ( ...@@ -30,12 +30,12 @@ import (
) )
var ( var (
tillerPodLabels labels.Set = labels.Set{"app": "helm", "name": "tiller"} tillerPodLabels = labels.Set{"app": "helm", "name": "tiller"}
) )
// New creates a new and initialized tunnel. // New creates a new and initialized tunnel.
func New(namespace string, client kubernetes.Interface, config *rest.Config) (*kube.Tunnel, error) { func New(namespace string, client kubernetes.Interface, config *rest.Config) (*kube.Tunnel, error) {
podName, err := getTillerPodName(client.CoreV1(), namespace) podName, err := GetTillerPodName(client.CoreV1(), namespace)
if err != nil { if err != nil {
return nil, err return nil, err
} }
...@@ -44,7 +44,8 @@ func New(namespace string, client kubernetes.Interface, config *rest.Config) (*k ...@@ -44,7 +44,8 @@ func New(namespace string, client kubernetes.Interface, config *rest.Config) (*k
return t, t.ForwardPort() return t, t.ForwardPort()
} }
func getTillerPodName(client corev1.PodsGetter, namespace string) (string, error) { // GetTillerPodName fetches the name of tiller pod running in the given namespace.
func GetTillerPodName(client corev1.PodsGetter, namespace string) (string, error) {
selector := tillerPodLabels.AsSelector() selector := tillerPodLabels.AsSelector()
pod, err := getFirstRunningPod(client, namespace, selector) pod, err := getFirstRunningPod(client, namespace, selector)
if err != nil { if err != nil {
......
...@@ -76,7 +76,7 @@ func TestGetFirstPod(t *testing.T) { ...@@ -76,7 +76,7 @@ func TestGetFirstPod(t *testing.T) {
for _, tt := range tests { for _, tt := range tests {
client := fake.NewSimpleClientset(&v1.PodList{Items: tt.pods}) client := fake.NewSimpleClientset(&v1.PodList{Items: tt.pods})
name, err := getTillerPodName(client.Core(), v1.NamespaceDefault) name, err := GetTillerPodName(client.Core(), v1.NamespaceDefault)
if (err != nil) != tt.err { if (err != nil) != tt.err {
t.Errorf("%q. expected error: %v, got %v", tt.name, tt.err, err) t.Errorf("%q. expected error: %v, got %v", tt.name, tt.err, err)
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment