From 4e7a3b1805eb6fab4a4bda2f1d94895bd2d61374 Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Mon, 17 Oct 2016 13:38:56 +0100 Subject: [PATCH] Add kube-peers program --- .gitignore | 1 + .gitmodules | 3 +++ Makefile | 6 +++-- prog/kube-peers/main.go | 55 +++++++++++++++++++++++++++++++++++++++++ vendor/k8s.io/client-go | 1 + 5 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 prog/kube-peers/main.go create mode 160000 vendor/k8s.io/client-go diff --git a/.gitignore b/.gitignore index ea82d605..59433345 100644 --- a/.gitignore +++ b/.gitignore @@ -44,6 +44,7 @@ prog/weavewait/weavewait_noop prog/weavewait/weavewait_nomcast prog/weaveutil/weaveutil prog/*/Dockerfile.weaveworks +prog/kube-peers/kube-peers prog/plugin/plugin testing/cover/cover testing/runner/runner diff --git a/.gitmodules b/.gitmodules index 7ed8985c..75655c9f 100644 --- a/.gitmodules +++ b/.gitmodules @@ -103,3 +103,6 @@ [submodule "vendor/github.com/matttproud/golang_protobuf_extensions"] path = vendor/github.com/matttproud/golang_protobuf_extensions url = https://github.com/matttproud/golang_protobuf_extensions +[submodule "vendor/k8s.io/client-go"] + path = vendor/k8s.io/client-go + url = https://github.com/kubernetes/client-go diff --git a/Makefile b/Makefile index ba9f6461..d9b48e2c 100644 --- a/Makefile +++ b/Makefile @@ -16,6 +16,7 @@ WEAVE_VERSION=git-$(shell git rev-parse --short=12 HEAD) WEAVER_EXE=prog/weaver/weaver WEAVEPROXY_EXE=prog/weaveproxy/weaveproxy SIGPROXY_EXE=prog/sigproxy/sigproxy +KUBEPEERS_EXE=prog/kube-peers/kube-peers WEAVEWAIT_EXE=prog/weavewait/weavewait WEAVEWAIT_NOOP_EXE=prog/weavewait/weavewait_noop WEAVEWAIT_NOMCAST_EXE=prog/weavewait/weavewait_nomcast @@ -24,7 +25,7 @@ PLUGIN_EXE=prog/plugin/plugin RUNNER_EXE=tools/runner/runner TEST_TLS_EXE=test/tls/tls -EXES=$(WEAVER_EXE) $(SIGPROXY_EXE) $(WEAVEPROXY_EXE) $(WEAVEWAIT_EXE) $(WEAVEWAIT_NOOP_EXE) $(WEAVEWAIT_NOMCAST_EXE) $(WEAVEUTIL_EXE) $(PLUGIN_EXE) $(TEST_TLS_EXE) +EXES=$(WEAVER_EXE) $(SIGPROXY_EXE) $(KUBEPEERS_EXE) $(WEAVEPROXY_EXE) $(WEAVEWAIT_EXE) $(WEAVEWAIT_NOOP_EXE) $(WEAVEWAIT_NOMCAST_EXE) $(WEAVEUTIL_EXE) $(PLUGIN_EXE) $(TEST_TLS_EXE) BUILD_UPTODATE=.build.uptodate WEAVER_UPTODATE=.weaver.uptodate @@ -67,6 +68,7 @@ $(WEAVER_EXE): router/*.go ipam/*.go ipam/*/*.go db/*.go nameserver/*.go prog/we $(WEAVEPROXY_EXE): proxy/*.go prog/weaveproxy/*.go $(WEAVEUTIL_EXE): prog/weaveutil/*.go net/*.go $(SIGPROXY_EXE): prog/sigproxy/*.go +$(KUBEPEERS_EXE): prog/kube-peers/*.go $(PLUGIN_EXE): prog/plugin/*.go plugin/*/*.go api/*.go common/*.go common/docker/*.go net/*.go $(TEST_TLS_EXE): test/tls/*.go $(WEAVEWAIT_NOOP_EXE): prog/weavewait/*.go @@ -99,7 +101,7 @@ else endif $(NETGO_CHECK) -$(WEAVEUTIL_EXE): +$(WEAVEUTIL_EXE) $(KUBEPEERS_EXE): go build $(BUILD_FLAGS) -o $@ ./$(@D) $(NETGO_CHECK) diff --git a/prog/kube-peers/main.go b/prog/kube-peers/main.go new file mode 100644 index 00000000..8759300a --- /dev/null +++ b/prog/kube-peers/main.go @@ -0,0 +1,55 @@ +package main + +import ( + "fmt" + "log" + + "k8s.io/client-go/1.4/kubernetes" + "k8s.io/client-go/1.4/pkg/api" + "k8s.io/client-go/1.4/rest" +) + +func getKubePeers() ([]string, error) { + config, err := rest.InClusterConfig() + if err != nil { + return nil, err + } + c, err := kubernetes.NewForConfig(config) + if err != nil { + return nil, err + } + nodeList, err := c.Nodes().List(api.ListOptions{}) + if err != nil { + // Fallback for cases (e.g. from kube-up.sh) where kube-proxy is not running on master + config.Host = "http://localhost:8080" + log.Print("error contacting APIServer: ", err, "; trying with fallback: ", config.Host) + c, err = kubernetes.NewForConfig(config) + if err != nil { + return nil, err + } + nodeList, err = c.Nodes().List(api.ListOptions{}) + } + + if err != nil { + return nil, err + } + addresses := make([]string, 0, len(nodeList.Items)) + for _, peer := range nodeList.Items { + for _, addr := range peer.Status.Addresses { + if addr.Type == "InternalIP" { + addresses = append(addresses, addr.Address) + } + } + } + return addresses, nil +} + +func main() { + peers, err := getKubePeers() + if err != nil { + log.Fatalf("Could not get peers: %v", err) + } + for _, addr := range peers { + fmt.Println(addr) + } +} diff --git a/vendor/k8s.io/client-go b/vendor/k8s.io/client-go new file mode 160000 index 00000000..d72c0e16 --- /dev/null +++ b/vendor/k8s.io/client-go @@ -0,0 +1 @@ +Subproject commit d72c0e162789e1bbb33c33cfa26858a1375efe01