From 131bc18178800821df4064af366f7e40053032e4 Mon Sep 17 00:00:00 2001 From: Matthew Fisher Date: Wed, 19 Apr 2017 15:11:47 -0700 Subject: [PATCH] ref(glide): use client-go --- .travis.yml | 7 +- aboutme/aboutme.go | 34 +++-- aboutme/aboutme_test.go | 4 +- etcd/members.go | 17 ++- glide.lock | 323 ++++++++++++++++++++++------------------ glide.yaml | 3 +- k8s/client.go | 40 ----- k8s/client_test.go | 35 ----- 8 files changed, 209 insertions(+), 254 deletions(-) delete mode 100644 k8s/client.go delete mode 100644 k8s/client_test.go diff --git a/.travis.yml b/.travis.yml index 1d445b8..622bba2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,12 +1,9 @@ language: go sudo: required go: - - 1.5 - - 1.6 -env: - - GO15VENDOREXPERIMENT=1 + - 1.8 install: - - wget https://github.com/Masterminds/glide/releases/download/0.8.3/glide-0.8.3-linux-amd64.tar.gz -O - | tar -xz + - wget https://github.com/Masterminds/glide/releases/download/v0.12.3/glide-v0.12.3-linux-amd64.tar.gz -O - | tar -xz - sudo mv linux-amd64/glide /usr/local/bin/ && rm -rf linux-amd64 - glide up script: diff --git a/aboutme/aboutme.go b/aboutme/aboutme.go index 8d1af79..85c842e 100644 --- a/aboutme/aboutme.go +++ b/aboutme/aboutme.go @@ -17,11 +17,11 @@ import ( "os" "strings" - "github.com/deis/pkg/k8s" - - "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/client/unversioned" - "k8s.io/kubernetes/pkg/labels" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/kubernetes" + "k8s.io/client-go/rest" + v1 "k8s.io/client-go/pkg/api/v1" ) // DefaultNamespace is the Kubernetes default namespace. @@ -44,7 +44,7 @@ type Me struct { Labels map[string]string Annotations map[string]string - c *unversioned.Client + c *kubernetes.Clientset } // FromEnv uses the environment to create a new Me. @@ -69,11 +69,15 @@ func FromEnv() (*Me, error) { Namespace: NamespaceFromEnv(), } - client, err := k8s.PodClient() + config, err := rest.InClusterConfig() + if err != nil { + return me, err + } + clientset, err := kubernetes.NewForConfig(config) if err != nil { return me, err } - me.c = client + me.c = clientset if err := me.init(); err != nil { return me, err @@ -83,7 +87,7 @@ func FromEnv() (*Me, error) { } // Client returns an initialized Kubernetes API client. -func (me *Me) Client() *unversioned.Client { +func (me *Me) Client() *kubernetes.Clientset { return me.c } @@ -168,9 +172,9 @@ func (me *Me) init() error { } // loadPod loads a pod using the downward API. -func (me *Me) loadPod() (*api.Pod, string, error) { +func (me *Me) loadPod() (*v1.Pod, string, error) { ns := NamespaceFromEnv() - p, err := me.c.Pods(ns).Get(me.Name) + p, err := me.c.CoreV1().Pods(ns).Get(me.Name, metav1.GetOptions{}) return p, ns, err } @@ -180,16 +184,16 @@ func (me *Me) loadPod() (*api.Pod, string, error) { // string, and an error if something goes wrong. // // The selector must be a label selector. -func (me *Me) findPodInNamespaces(selector string) (*api.Pod, string, error) { +func (me *Me) findPodInNamespaces(selector string) (*v1.Pod, string, error) { // Get the deis namespace. If it does not exist, get the default namespce. s, err := labels.Parse(selector) if err == nil { - ns, err := me.c.Namespaces().List(api.ListOptions{LabelSelector: s}) + ns, err := me.c.CoreV1().Namespaces().List(metav1.ListOptions{LabelSelector: s.String()}) if err != nil { return nil, "default", err } for _, n := range ns.Items { - p, err := me.c.Pods(n.Name).Get(me.Name) + p, err := me.c.CoreV1().Pods(n.Name).Get(me.Name, metav1.GetOptions{}) // If there is no error, we got a matching pod. if err == nil { @@ -199,7 +203,7 @@ func (me *Me) findPodInNamespaces(selector string) (*api.Pod, string, error) { } // If we get here, it's really the last ditch. - p, err := me.c.Pods("default").Get(me.Name) + p, err := me.c.CoreV1().Pods("default").Get(me.Name, metav1.GetOptions{}) return p, "default", err } diff --git a/aboutme/aboutme_test.go b/aboutme/aboutme_test.go index 70011a0..648d776 100644 --- a/aboutme/aboutme_test.go +++ b/aboutme/aboutme_test.go @@ -6,11 +6,11 @@ import ( "strings" "testing" - "k8s.io/kubernetes/pkg/client/restclient" + "k8s.io/client-go/rest" ) func TestFromEnv(t *testing.T) { - if _, err := restclient.InClusterConfig(); err != nil { + if _, err := rest.InClusterConfig(); err != nil { t.Skip("This can only be run inside Kubernetes. Skipping.") } diff --git a/etcd/members.go b/etcd/members.go index 2e4cb6a..3ad4a0a 100644 --- a/etcd/members.go +++ b/etcd/members.go @@ -7,10 +7,10 @@ import ( "github.com/Masterminds/cookoo" "github.com/Masterminds/cookoo/log" "github.com/coreos/etcd/client" - "github.com/deis/pkg/k8s" - "k8s.io/kubernetes/pkg/api" - - "k8s.io/kubernetes/pkg/labels" + "k8s.io/apimachinery/pkg/labels" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/client-go/kubernetes" + "k8s.io/client-go/rest" ) // AddMember Add a new member to the cluster. @@ -96,7 +96,12 @@ func RemoveStaleMembers(c cookoo.Context, p *cookoo.Params) (interface{}, cookoo ns := p.Get("namespace", "default").(string) // Should probably pass in the client from the context. - klient, err := k8s.PodClient() + config, err := rest.InClusterConfig() + if err != nil { + log.Errf(c, "Could not get Kubernetes in-cluster config: %s", err) + return nil, err + } + clientset, err := kubernetes.NewForConfig(config) if err != nil { log.Errf(c, "Could not create a Kubernetes client: %s", err) return nil, err @@ -124,7 +129,7 @@ func RemoveStaleMembers(c cookoo.Context, p *cookoo.Params) (interface{}, cookoo log.Errf(c, "Selector failed to parse: %s", err) return nil, err } - pods, err := klient.Pods(ns).List(api.ListOptions{LabelSelector: labelSelector}) + pods, err := clientset.CoreV1().Pods(ns).List(metav1.ListOptions{LabelSelector: labelSelector.String()}) if err != nil { return nil, err } diff --git a/glide.lock b/glide.lock index b286b75..97a11ec 100644 --- a/glide.lock +++ b/glide.lock @@ -1,216 +1,241 @@ -hash: aadb7fe69bb339cd27b9474eab01cdfe2295c089121928565d590774970412df -updated: 2016-06-01T14:59:00.713025401-06:00 +hash: b1c944c37448c63ef68c6ee92a1dfbe82688bf1a1f2de790ab51d4bd4d3c5e8b +updated: 2017-04-19T15:36:51.444426744-07:00 imports: -- name: bitbucket.org/ww/goautoneg - version: 75cd24fc2f2c - name: code.google.com/p/goprotobuf - version: 3b06fc7a4cad73efce5fe6217ab6c33e7231ab4a + version: 8d92cf5fc15a4382f8964b08e1f42a75c0591aa3 repo: https://github.com/golang/protobuf - name: github.com/arschles/assert - version: 5c22e2eba944d89ddd5c81b2c4175e64ee828503 -- name: github.com/beorn7/perks - version: b965b613227fddccbfffe13eae360ed3fa822f8d - subpackages: - - quantile -- name: github.com/blang/semver - version: 31b736133b98f26d5e078ec9eb591666edfd091f + version: bb58b908265b5931732079df03f2818bf2167ba0 - name: github.com/coreos/etcd version: e4561dd8cfb1163fb51afceca9c78aa89398e731 subpackages: - - client - Godeps/_workspace/src/github.com/ugorji/go/codec - Godeps/_workspace/src/golang.org/x/net/context + - client - pkg/pathutil - pkg/types -- name: github.com/davecgh/go-spew - version: 3e6e67c4dcea3ac2f25fd4731abc0e1deaf36216 +- name: github.com/docker/distribution + version: cd27f179f2c10c5d300e6d09025b538c475b0d51 subpackages: - - spew -- name: github.com/docker/docker - version: 0f5c9d301b9b1cca66b3ea0f9dec3b5317d3686d - subpackages: - - pkg/jsonmessage - - pkg/mount - - pkg/parsers - - pkg/symlink - - pkg/term - - pkg/timeutils - - pkg/units -- name: github.com/docker/go-units - version: 0bbddae09c5a5419a8c6dcdd7ff90da3d450393b + - digest + - reference - name: github.com/emicklei/go-restful - version: 777bb3f19bcafe2575ffb2a3e46af92509ae9594 + version: 09691a3b6378b740595c1002f40c34dd5f218a22 subpackages: - - swagger - log + - swagger - name: github.com/ghodss/yaml version: 73d445a93680fa1a78ae23a5839bad48f32ba1ee -- name: github.com/golang/glog - version: 44145f04b68cf362d9c4df2182967c2275eaefed -- name: github.com/golang/protobuf - version: b982704f8bb716bb608144408cff30e15fbde841 +- name: github.com/go-openapi/jsonpointer + version: 46af16f9f7b149af66e5d1bd010e3574dc06de98 +- name: github.com/go-openapi/jsonreference + version: 13c6e3589ad90f49bd3e3bbe2c2cb3d7a4142272 +- name: github.com/go-openapi/spec + version: 6aced65f8501fe1217321abf0749d354824ba2ff +- name: github.com/go-openapi/swag + version: 1d0bd113de87027671077d3c71eb3ac5d7dbba72 +- name: github.com/gogo/protobuf + version: c0656edd0d9eab7c66d1eb0c568f9039345796f7 subpackages: - proto -- name: github.com/google/cadvisor - version: 546a3771589bdb356777c646c6eca24914fdd48b - subpackages: - - api - - cache/memory - - collector - - container - - events - - fs - - healthz - - http - - info/v1 - - info/v2 - - manager - - metrics - - pages - - storage - - summary - - utils - - validate - - version + - sortkeys +- name: github.com/golang/glog + version: 44145f04b68cf362d9c4df2182967c2275eaefed - name: github.com/google/gofuzz - version: bbcb9da2d746f8bdbd6a936686a0a6067ada0ec5 + version: 44d81051d367757e1c7c6a5a86423ece9afcf63c +- name: github.com/howeyc/gopass + version: 3ca23474a7c7203e0a0a070fd33508f6efdb9b3d - name: github.com/imdario/mergo version: 6633656539c1639d9d78127b7d47c622b5d7b6dc - name: github.com/juju/ratelimit version: 77ed1c8a01217656d2080ad51981f6e99adaa177 +- name: github.com/mailru/easyjson + version: d5b7844b561a7bc640052f1b935f7b800330d7e0 + subpackages: + - buffer + - jlexer + - jwriter - name: github.com/Masterminds/cookoo version: 78aa11ce75e257c51be7ea945edb84cf19c4a6de subpackages: + - io - log - safely - - io -- name: github.com/matttproud/golang_protobuf_extensions - version: fc2b8d3a73c4867e51861bbdd5ae3c1f0869dd6a - subpackages: - - pbutil -- name: github.com/opencontainers/runc - version: 7ca2aa4873aea7cb4265b1726acb24b90d8726c6 - subpackages: - - libcontainer - - libcontainer/cgroups/fs - - libcontainer/configs - - libcontainer/cgroups - - libcontainer/system -- name: github.com/pborman/uuid - version: ca53cad383cad2479bbba7f7a1a05797ec1386e4 -- name: github.com/prometheus/client_golang - version: 3b78d7a77f51ccbc364d4bc170920153022cfd08 - subpackages: - - prometheus -- name: github.com/prometheus/client_model - version: fa8ad6fec33561be4280a8f0514318c79d7f6cb6 - subpackages: - - go -- name: github.com/prometheus/common - version: ef7a9a5fb138aa5d3a19988537606226869a0390 - subpackages: - - expfmt - - model -- name: github.com/prometheus/procfs - version: 490cc6eb5fa45bf8a8b7b73c8bc82a8160e8531d +- name: github.com/PuerkitoBio/purell + version: 8a290539e2e8629dbc4e6bad948158f790ec31f4 +- name: github.com/PuerkitoBio/urlesc + version: 5bd2802263f21d8788851d5305584c82a5c75d7e - name: github.com/spf13/pflag - version: 08b1a584251b5b62f458943640fc8ebd4d50aaa5 + version: 9ff6c6923cfffbcd502984b8e0c80539a94968b7 - name: github.com/steveeJ/gexpect - version: ca42424d18c76d0d51a4cccd830d11878e9e5c17 + version: a54f389437ea6064a210531b6cd6996aa0c851f5 repo: https://github.com/coreos/gexpect - name: github.com/ugorji/go - version: f4485b318aadd133842532f841dc205a8e339d74 + version: ded73eae5db7e7a0ef6f55aace87a2873c5d2b74 subpackages: - codec +- name: golang.org/x/crypto + version: d172538b2cfce0c13cee31e647d0367aa8cd2486 + subpackages: + - ssh/terminal - name: golang.org/x/net version: c2528b2dd8352441850638a8bb678c2ad056fd3e subpackages: - context + - http2 + - http2/hpack + - idna +- name: golang.org/x/sys + version: 8f0908ab3b2457e2e15403d3697c9ef5cb4b57a9 + subpackages: + - unix +- name: golang.org/x/text + version: 2910a502d2bf9e43193af9d68ca516529614eed3 + subpackages: + - cases + - internal/tag + - language + - runes + - secure/bidirule + - secure/precis + - transform + - unicode/bidi + - unicode/norm + - width +- name: gopkg.in/inf.v0 + version: 3887ee99ecf07df5b447e9b00d9c0b2adaa9f3e4 - name: gopkg.in/yaml.v2 - version: d466437aa4adc35830964cffc5b5f262c63ddcb4 -- name: k8s.io/kubernetes - version: 3eed1e3be6848b877ff80a93da3785d9034d0a4f + version: 53feefa2559fb8dfa8d81baad31be332c97d6c77 +- name: k8s.io/apimachinery + version: 9c89140a45325f83409e90359888133478207c7a subpackages: - - pkg/api - - pkg/client/unversioned - - pkg/labels - - pkg/client/unversioned/clientcmd + - pkg/api/errors - pkg/api/meta - pkg/api/resource - - pkg/api/unversioned - - pkg/auth/user + - pkg/apimachinery + - pkg/apimachinery/announced + - pkg/apimachinery/registered + - pkg/apis/meta/v1 + - pkg/apis/meta/v1/unstructured - pkg/conversion + - pkg/conversion/queryparams - pkg/fields + - pkg/labels + - pkg/openapi - pkg/runtime + - pkg/runtime/schema - pkg/runtime/serializer + - pkg/runtime/serializer/json + - pkg/runtime/serializer/protobuf + - pkg/runtime/serializer/recognizer + - pkg/runtime/serializer/streaming + - pkg/runtime/serializer/versioning + - pkg/selection - pkg/types - - pkg/util + - pkg/util/errors + - pkg/util/framer - pkg/util/intstr + - pkg/util/json + - pkg/util/net - pkg/util/rand + - pkg/util/runtime - pkg/util/sets - - pkg/api/errors - - pkg/api/install - - pkg/apimachinery/registered - - pkg/apis/authorization/install - - pkg/apis/autoscaling - - pkg/apis/autoscaling/install - - pkg/apis/batch - - pkg/apis/batch/install - - pkg/apis/componentconfig/install - - pkg/apis/extensions - - pkg/apis/extensions/install - - pkg/apis/metrics/install - - pkg/client/restclient - - pkg/client/typed/discovery - - pkg/util/net + - pkg/util/validation + - pkg/util/validation/field - pkg/util/wait + - pkg/util/yaml - pkg/version - pkg/watch - - pkg/util/validation - - pkg/client/unversioned/auth - - pkg/client/unversioned/clientcmd/api - - pkg/client/unversioned/clientcmd/api/latest - - pkg/util/errors - - third_party/forked/reflect - - pkg/conversion/queryparams - - pkg/runtime/serializer/json - - pkg/runtime/serializer/recognizer - - pkg/runtime/serializer/versioning - - pkg/util/integer - - pkg/util/validation/field + - third_party/forked/golang/reflect +- name: k8s.io/client-go + version: 69f0a81e21e046e59fb102cddff3e138d7a327f5 + subpackages: + - discovery + - kubernetes + - kubernetes/scheme + - kubernetes/typed/apps/v1beta1 + - kubernetes/typed/authentication/v1 + - kubernetes/typed/authentication/v1beta1 + - kubernetes/typed/authorization/v1 + - kubernetes/typed/authorization/v1beta1 + - kubernetes/typed/autoscaling/v1 + - kubernetes/typed/autoscaling/v2alpha1 + - kubernetes/typed/batch/v1 + - kubernetes/typed/batch/v2alpha1 + - kubernetes/typed/certificates/v1beta1 + - kubernetes/typed/core/v1 + - kubernetes/typed/extensions/v1beta1 + - kubernetes/typed/policy/v1beta1 + - kubernetes/typed/rbac/v1alpha1 + - kubernetes/typed/rbac/v1beta1 + - kubernetes/typed/settings/v1alpha1 + - kubernetes/typed/storage/v1 + - kubernetes/typed/storage/v1beta1 + - pkg/api + - pkg/api/install - pkg/api/v1 - - pkg/apimachinery + - pkg/api/v1/ref + - pkg/apis/apps + - pkg/apis/apps/install + - pkg/apis/apps/v1beta1 + - pkg/apis/authentication + - pkg/apis/authentication/install + - pkg/apis/authentication/v1 + - pkg/apis/authentication/v1beta1 - pkg/apis/authorization + - pkg/apis/authorization/install + - pkg/apis/authorization/v1 - pkg/apis/authorization/v1beta1 + - pkg/apis/autoscaling + - pkg/apis/autoscaling/install - pkg/apis/autoscaling/v1 + - pkg/apis/autoscaling/v2alpha1 + - pkg/apis/batch + - pkg/apis/batch/install - pkg/apis/batch/v1 - - pkg/apis/componentconfig - - pkg/apis/componentconfig/v1alpha1 + - pkg/apis/batch/v2alpha1 + - pkg/apis/certificates + - pkg/apis/certificates/install + - pkg/apis/certificates/v1beta1 + - pkg/apis/extensions + - pkg/apis/extensions/install - pkg/apis/extensions/v1beta1 - - pkg/apis/metrics - - pkg/apis/metrics/v1alpha1 - - pkg/api/validation - - pkg/client/metrics - - pkg/client/transport - - pkg/watch/json - - pkg/util/runtime - - pkg/client/unversioned/clientcmd/api/v1 - - pkg/util/yaml + - pkg/apis/policy + - pkg/apis/policy/install + - pkg/apis/policy/v1beta1 + - pkg/apis/rbac + - pkg/apis/rbac/install + - pkg/apis/rbac/v1alpha1 + - pkg/apis/rbac/v1beta1 + - pkg/apis/settings + - pkg/apis/settings/install + - pkg/apis/settings/v1alpha1 + - pkg/apis/storage + - pkg/apis/storage/install + - pkg/apis/storage/v1 + - pkg/apis/storage/v1beta1 + - pkg/util - pkg/util/parsers - - pkg/kubelet/qos - - pkg/master/ports - - pkg/api/endpoints - - pkg/api/pod - - pkg/api/service - - pkg/api/util - - pkg/capabilities - - pkg/util/hash - - pkg/util/net/sets + - pkg/version + - rest + - rest/watch + - tools/auth + - tools/clientcmd + - tools/clientcmd/api + - tools/clientcmd/api/latest + - tools/clientcmd/api/v1 + - tools/metrics + - transport + - util/cert + - util/clock + - util/flowcontrol + - util/homedir + - util/integer - name: launchpad.net/gocheck - version: 4f90aeace3a26ad7021961c297b22c42160c7b25 + version: 20d25e2804050c1cd24a7eea1e7a6447dd0e74ec repo: https://github.com/go-check/check - name: speter.net/go/exp/math/dec/inf version: 42ca6cd68aa922bc3f32f1e056e61b65945d9ad7 repo: https://github.com/belua/inf vcs: git -devImports: [] +testImports: [] diff --git a/glide.yaml b/glide.yaml index da2ce7b..2461efa 100644 --- a/glide.yaml +++ b/glide.yaml @@ -2,8 +2,7 @@ package: github.com/deis/pkg ignore: - appengine import: -- package: k8s.io/kubernetes - version: v1.2.4 +- package: k8s.io/client-go - package: github.com/Masterminds/cookoo version: '>=1.3.0' - package: github.com/coreos/etcd diff --git a/k8s/client.go b/k8s/client.go deleted file mode 100644 index 6612e48..0000000 --- a/k8s/client.go +++ /dev/null @@ -1,40 +0,0 @@ -// Package k8s provides Kubernetes client access. -package k8s - -import ( - "k8s.io/kubernetes/pkg/client/unversioned" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" -) - -// PodClient is a Kubernetes API client that lives inside of a Pod. Pods -// uniformly declare environment variables that we can use to establish a -// client connection. -// -// For a generic client that can read Kubectl configs, see LocalClient. -func PodClient() (*unversioned.Client, error) { - return unversioned.NewInCluster() -} - -// LocalClient gets a Kubernetes client from the local environment. -// -// It does a lot of configuration file loading. Use it for cases where you -// have a kubectl client configured. -// -// For cases where you know exactly where the configuration information is, -// you should use Client. -// -// If you are constructing an interactive client, you may also want to look -// at the Kubernetes interactive client configuration. -func LocalClient() (*unversioned.Client, error) { - // Please, if you find these poor Java developers help them find their - // way out of the deep dark forests of Go, and back to the happy - // halls of IntelliJ. - rules := clientcmd.NewDefaultClientConfigLoadingRules() - cfg := &clientcmd.ConfigOverrides{} - kcfg := clientcmd.NewNonInteractiveDeferredLoadingClientConfig(rules, cfg) - ccfg, err := kcfg.ClientConfig() - if err != nil { - return nil, err - } - return unversioned.New(ccfg) -} diff --git a/k8s/client_test.go b/k8s/client_test.go deleted file mode 100644 index 7a3d271..0000000 --- a/k8s/client_test.go +++ /dev/null @@ -1,35 +0,0 @@ -package k8s - -import ( - "testing" - - "k8s.io/kubernetes/pkg/client/restclient" -) - -func TestLocalClient(t *testing.T) { - c, err := LocalClient() - if err != nil { - t.Errorf("Failed to get a client: %s", err) - } - if c == nil { - t.Errorf("Could not get a kube client, and no reason was given.") - } -} - -func TestPodClient(t *testing.T) { - // A pod can't really be mocked efficiently without major filesystem - // manipulation. So we're testing fully only when this is running inside of - // a k8s pod. - if _, err := restclient.InClusterConfig(); err != nil { - t.Skip("This can only be run inside Kubernetes. Skipping.") - } - - c, err := PodClient() - if err != nil { - t.Errorf("Error constructing client: %s", err) - } - - if _, err := c.ServerVersion(); err != nil { - t.Errorf("Failed to connect to given server: %s", err) - } -}