From e3c0e38f1b33a895ec5716ed9c2960f00a0301c3 Mon Sep 17 00:00:00 2001 From: Daniel Smith Date: Fri, 29 May 2015 14:31:00 -0700 Subject: [PATCH] Move cluster client creation to client.NewInCluster() Built & pushed nettest:1.4. --- contrib/for-tests/network-tester/webserver.go | 16 ++-------- pkg/client/helper.go | 29 +++++++++++++++++++ 2 files changed, 32 insertions(+), 13 deletions(-) diff --git a/contrib/for-tests/network-tester/webserver.go b/contrib/for-tests/network-tester/webserver.go index 937abc8b633..a7d8d1af84c 100644 --- a/contrib/for-tests/network-tester/webserver.go +++ b/contrib/for-tests/network-tester/webserver.go @@ -37,7 +37,6 @@ import ( "io/ioutil" "log" "math/rand" - "net" "net/http" "os" "sync" @@ -202,20 +201,11 @@ func main() { // Find all sibling pods in the service and post to their /write handler. func contactOthers(state *State) { defer state.doneContactingPeers() - token, err := ioutil.ReadFile("/var/run/secrets/kubernetes.io/serviceaccount/token") + client, err := client.NewInCluster() if err != nil { - log.Fatalf("Unable to read service account token: %v", err) - } - cc := client.Config{ - Host: "https://" + net.JoinHostPort(os.Getenv("KUBERNETES_SERVICE_HOST"), os.Getenv("KUBERNETES_SERVICE_PORT")), - Version: "v1beta3", - BearerToken: string(token), - Insecure: true, // TOOD: package certs along with the token - } - client, err := client.New(&cc) - if err != nil { - log.Fatalf("Unable to create client:\nconfig: %#v\nerror: %v\n", err) + log.Fatalf("Unable to create client; error: %v\n", err) } + // Double check that that worked by getting the server version. if v, err := client.ServerVersion(); err != nil { log.Fatalf("Unable to get server version: %v\n", err) } else { diff --git a/pkg/client/helper.go b/pkg/client/helper.go index 36c24123286..8f58ab722a4 100644 --- a/pkg/client/helper.go +++ b/pkg/client/helper.go @@ -18,6 +18,7 @@ package client import ( "fmt" + "io/ioutil" "net" "net/http" "net/url" @@ -166,6 +167,34 @@ func NewOrDie(c *Config) *Client { return client } +// InClusterConfig returns a config object which uses the service account +// kubernetes gives to pods. It's intended for clients that expect to be +// running inside a pod running on kuberenetes. It will return an error if +// called from a process not running in a kubernetes environment. +func InClusterConfig() (*Config, error) { + token, err := ioutil.ReadFile("/var/run/secrets/kubernetes.io/serviceaccount/token") + if err != nil { + return nil, err + } + return &Config{ + // TODO: switch to using cluster DNS. + Host: "https://" + net.JoinHostPort(os.Getenv("KUBERNETES_SERVICE_HOST"), os.Getenv("KUBERNETES_SERVICE_PORT")), + Version: "v1beta3", + BearerToken: string(token), + // TODO: package certs along with the token + Insecure: true, + }, nil +} + +// NewInCluster is a shortcut for calling InClusterConfig() and then New(). +func NewInCluster() (*Client, error) { + cc, err := InClusterConfig() + if err != nil { + return nil, err + } + return New(cc) +} + // SetKubernetesDefaults sets default values on the provided client config for accessing the // Kubernetes API or returns an error if any of the defaults are impossible or invalid. func SetKubernetesDefaults(config *Config) error {