diff --git a/cmd/helm/helm.go b/cmd/helm/helm.go index ece993dc3..42e084e90 100644 --- a/cmd/helm/helm.go +++ b/cmd/helm/helm.go @@ -70,10 +70,15 @@ func main() { app.Flags = []cli.Flag{ cli.StringFlag{ Name: "host,u", - Usage: "The URL of the DM server.", + Usage: "The URL of the DM server", EnvVar: "HELM_HOST", Value: "https://localhost:8000/", }, + cli.StringFlag{ + Name: "kubectl", + Usage: "The path to the kubectl binary", + EnvVar: "KUBECTL", + }, cli.IntFlag{ Name: "timeout", Usage: "Time in seconds to wait for response", diff --git a/cmd/helm/server.go b/cmd/helm/server.go index f33649c71..ffd0f876e 100644 --- a/cmd/helm/server.go +++ b/cmd/helm/server.go @@ -123,11 +123,13 @@ func dmCmd() cli.Command { } func installServer(c *cli.Context) error { - dryRun := c.Bool("dry-run") resImg := c.String("resourcifier-image") ebImg := c.String("expandybird-image") manImg := c.String("manager-image") - runner := getKubectlRunner(dryRun) + + dryRun := c.Bool("dry-run") + kubectlPath := c.GlobalString("kubectl") + runner := buildKubectlRunner(kubectlPath, dryRun) i := client.NewInstaller() i.Manager["Image"] = manImg @@ -144,7 +146,8 @@ func installServer(c *cli.Context) error { func uninstallServer(c *cli.Context) error { dryRun := c.Bool("dry-run") - runner := getKubectlRunner(dryRun) + kubectlPath := c.GlobalString("kubectl") + runner := buildKubectlRunner(kubectlPath, dryRun) out, err := client.Uninstall(runner) if err != nil { @@ -156,12 +159,10 @@ func uninstallServer(c *cli.Context) error { func statusServer(c *cli.Context) error { dryRun := c.Bool("dry-run") - client := kubectl.Client - if dryRun { - client = kubectl.PrintRunner{} - } + kubectlPath := c.GlobalString("kubectl") + runner := buildKubectlRunner(kubectlPath, dryRun) - out, err := client.GetByKind("pods", "", "dm") + out, err := runner.GetByKind("pods", "", "dm") if err != nil { return err } @@ -169,23 +170,26 @@ func statusServer(c *cli.Context) error { return nil } -func getKubectlRunner(dryRun bool) kubectl.Runner { - if dryRun { - return &kubectl.PrintRunner{} - } - return &kubectl.RealRunner{} -} - func targetServer(c *cli.Context) error { dryRun := c.Bool("dry-run") - client := kubectl.Client - if dryRun { - client = kubectl.PrintRunner{} - } - out, err := client.ClusterInfo() + kubectlPath := c.GlobalString("kubectl") + runner := buildKubectlRunner(kubectlPath, dryRun) + + out, err := runner.ClusterInfo() if err != nil { return fmt.Errorf("%s (%s)", out, err) } format.Msg(string(out)) return nil } + +func buildKubectlRunner(kubectlPath string, dryRun bool) kubectl.Runner { + if dryRun { + return &kubectl.PrintRunner{} + } + // TODO: Refactor out kubectl.Path global + if kubectlPath != "" { + kubectl.Path = kubectlPath + } + return &kubectl.RealRunner{} +}