From 4df22392fcc24d1aa45db2936bab24b47f805ebf Mon Sep 17 00:00:00 2001 From: Adam Reese Date: Tue, 24 May 2016 12:33:30 -0700 Subject: [PATCH] feat(tunnel): add logic for detecting tiller pod --- cmd/helm/tunnel.go | 36 ++++++++++++++++++++++++++++++++++++ pkg/kube/tunnel.go | 4 +++- 2 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 cmd/helm/tunnel.go diff --git a/cmd/helm/tunnel.go b/cmd/helm/tunnel.go new file mode 100644 index 000000000..34e696e51 --- /dev/null +++ b/cmd/helm/tunnel.go @@ -0,0 +1,36 @@ +package main + +import ( + "fmt" + + "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/labels" + + "github.com/kubernetes/helm/pkg/kube" +) + +func newTillerPortForwarder() (*kube.Tunnel, error) { + podName, err := getTillerPodName("helm") + if err != nil { + return nil, err + } + return kube.New(nil).ForwardPort("helm", podName, 44134) +} + +func getTillerPodName(namespace string) (string, error) { + client, err := kube.New(nil).Client() + if err != nil { + return "", err + } + + selector := labels.Set{"app": "helm", "name": "tiller"}.AsSelector() + options := api.ListOptions{LabelSelector: selector} + pods, err := client.Pods(namespace).List(options) + if err != nil { + return "", err + } + if len(pods.Items) < 1 { + return "", fmt.Errorf("I could not find tiller") + } + return pods.Items[0].ObjectMeta.GetName(), nil +} diff --git a/pkg/kube/tunnel.go b/pkg/kube/tunnel.go index 9b8e143d1..747a7efcd 100644 --- a/pkg/kube/tunnel.go +++ b/pkg/kube/tunnel.go @@ -10,6 +10,7 @@ import ( "k8s.io/kubernetes/pkg/client/unversioned/remotecommand" ) +// Tunnel describes a ssh-like tunnel to a kubernetes pod type Tunnel struct { Local int Remote int @@ -33,7 +34,8 @@ func (c *Client) ForwardPort(namespace, podName string, remote int) (*Tunnel, er return nil, err } - // http://192.168.64.94:8080/api/v1/namespaces/helm/pods/tiller-rc-9itlq/portforward + // Build a url to the portforward endpoing + // example: http://localhost:8080/api/v1/namespaces/helm/pods/tiller-rc-9itlq/portforward u := client.RESTClient.Post(). Resource("pods"). Namespace(namespace).