Skip to content
Snippets Groups Projects
Unverified Commit 07a6ae05 authored by Angus Lees's avatar Angus Lees
Browse files

Update to client-go v3.0.0

parent 9bc8602e
No related branches found
No related tags found
No related merge requests found
Showing with 173 additions and 215 deletions
......@@ -246,6 +246,7 @@ func IsServiceIPRequested(service *Service) bool {
var standardFinalizers = sets.NewString(
string(FinalizerKubernetes),
metav1.FinalizerOrphanDependents,
metav1.FinalizerDeleteDependents,
)
// HasAnnotation returns a bool if passed in annotation exists
......
......@@ -276,10 +276,10 @@ const (
AffinityAnnotationKey string = "scheduler.alpha.kubernetes.io/affinity"
)
// Tries to add a toleration to annotations list. Returns true if something was updated
// false otherwise.
func AddOrUpdateTolerationInPod(pod *Pod, toleration *Toleration) (bool, error) {
podTolerations := pod.Spec.Tolerations
// AddOrUpdateTolerationInPodSpec tries to add a toleration to the toleration list in PodSpec.
// Returns true if something was updated, false otherwise.
func AddOrUpdateTolerationInPodSpec(spec *PodSpec, toleration *Toleration) (bool, error) {
podTolerations := spec.Tolerations
var newTolerations []Toleration
updated := false
......@@ -300,10 +300,16 @@ func AddOrUpdateTolerationInPod(pod *Pod, toleration *Toleration) (bool, error)
newTolerations = append(newTolerations, *toleration)
}
pod.Spec.Tolerations = newTolerations
spec.Tolerations = newTolerations
return true, nil
}
// AddOrUpdateTolerationInPod tries to add a toleration to the pod's toleration list.
// Returns true if something was updated, false otherwise.
func AddOrUpdateTolerationInPod(pod *Pod, toleration *Toleration) (bool, error) {
return AddOrUpdateTolerationInPodSpec(&pod.Spec, toleration)
}
// MatchToleration checks if the toleration matches tolerationToMatch. Tolerations are unique by <key,effect,operator,value>,
// if the two tolerations have same <key,effect,operator,value> combination, regard as they match.
// TODO: uniqueness check for tolerations in api validations.
......
......@@ -51,7 +51,7 @@ var (
// semantic version is a git hash, but the version itself is no
// longer the direct output of "git describe", but a slight
// translation to be semver compliant.
gitVersion string = "v1.6.1-beta.0+$Format:%h$"
gitVersion string = "v1.6.8-beta.0+$Format:%h$"
gitCommit string = "$Format:%H$" // sha1 from git, output of $(git rev-parse HEAD)
gitTreeState string = "not a git tree" // state of git tree, either "clean" or "dirty"
......
package(default_visibility = ["//visibility:public"])
licenses(["notice"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
"go_test",
)
go_test(
name = "go_default_test",
srcs = ["gcp_test.go"],
library = ":go_default_library",
tags = ["automanaged"],
deps = ["//vendor/golang.org/x/oauth2:go_default_library"],
)
go_library(
name = "go_default_library",
srcs = ["gcp.go"],
tags = ["automanaged"],
deps = [
"//vendor/github.com/golang/glog:go_default_library",
"//vendor/golang.org/x/net/context:go_default_library",
"//vendor/golang.org/x/oauth2:go_default_library",
"//vendor/golang.org/x/oauth2/google:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/util/yaml:go_default_library",
"//vendor/k8s.io/client-go/rest:go_default_library",
"//vendor/k8s.io/client-go/util/jsonpath:go_default_library",
],
)
......@@ -124,7 +124,10 @@ func newGCPAuthProvider(_ string, gcpConfig map[string]string, persister restcli
}
func (g *gcpAuthProvider) WrapTransport(rt http.RoundTripper) http.RoundTripper {
return &conditionalTransport{&oauth2.Transport{Source: g.tokenSource, Base: rt}, g.persister}
return &oauth2.Transport{
Source: g.tokenSource,
Base: rt,
}
}
func (g *gcpAuthProvider) Login() error { return nil }
......@@ -281,28 +284,3 @@ func parseJSONPath(input interface{}, name, template string) (string, error) {
}
return buf.String(), nil
}
type conditionalTransport struct {
oauthTransport *oauth2.Transport
persister restclient.AuthProviderConfigPersister
}
func (t *conditionalTransport) RoundTrip(req *http.Request) (*http.Response, error) {
if len(req.Header.Get("Authorization")) != 0 {
return t.oauthTransport.Base.RoundTrip(req)
}
res, err := t.oauthTransport.RoundTrip(req)
if err != nil {
return nil, err
}
if res.StatusCode == 401 {
glog.V(4).Infof("The credentials that were supplied are invalid for the target cluster")
emptyCache := make(map[string]string)
t.persister.Persist(emptyCache)
}
return res, nil
}
......@@ -22,7 +22,7 @@ import (
"net"
"net/http"
"os"
"path"
"path/filepath"
gruntime "runtime"
"strings"
"time"
......@@ -255,19 +255,51 @@ func SetKubernetesDefaults(config *Config) error {
return nil
}
// DefaultKubernetesUserAgent returns the default user agent that clients can use.
func DefaultKubernetesUserAgent() string {
commit := version.Get().GitCommit
if len(commit) > 7 {
commit = commit[:7]
// adjustCommit returns sufficient significant figures of the commit's git hash.
func adjustCommit(c string) string {
if len(c) == 0 {
return "unknown"
}
if len(c) > 7 {
return c[:7]
}
return c
}
// adjustVersion strips "alpha", "beta", etc. from version in form
// major.minor.patch-[alpha|beta|etc].
func adjustVersion(v string) string {
if len(v) == 0 {
return "unknown"
}
if len(commit) == 0 {
commit = "unknown"
seg := strings.SplitN(v, "-", 2)
return seg[0]
}
// adjustCommand returns the last component of the
// OS-specific command path for use in User-Agent.
func adjustCommand(p string) string {
// Unlikely, but better than returning "".
if len(p) == 0 {
return "unknown"
}
version := version.Get().GitVersion
seg := strings.SplitN(version, "-", 2)
version = seg[0]
return fmt.Sprintf("%s/%s (%s/%s) kubernetes/%s", path.Base(os.Args[0]), version, gruntime.GOOS, gruntime.GOARCH, commit)
return filepath.Base(p)
}
// buildUserAgent builds a User-Agent string from given args.
func buildUserAgent(command, version, os, arch, commit string) string {
return fmt.Sprintf(
"%s/%s (%s/%s) kubernetes/%s", command, version, os, arch, commit)
}
// DefaultKubernetesUserAgent returns a User-Agent string built from static global vars.
func DefaultKubernetesUserAgent() string {
return buildUserAgent(
adjustCommand(os.Args[0]),
adjustVersion(version.Get().GitVersion),
gruntime.GOOS,
gruntime.GOARCH,
adjustCommit(version.Get().GitCommit))
}
// InClusterConfig returns a config object which uses the service account
......
package(default_visibility = ["//visibility:public"])
licenses(["notice"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = [
"exec.go",
"funcs.go",
],
tags = ["automanaged"],
)
......@@ -482,13 +482,13 @@ func (config *inClusterClientConfig) Namespace() (string, bool, error) {
// This way assumes you've set the POD_NAMESPACE environment variable using the downward API.
// This check has to be done first for backwards compatibility with the way InClusterConfig was originally set up
if ns := os.Getenv("POD_NAMESPACE"); ns != "" {
return ns, true, nil
return ns, false, nil
}
// Fall back to the namespace associated with the service account token, if available
if data, err := ioutil.ReadFile("/var/run/secrets/kubernetes.io/serviceaccount/namespace"); err == nil {
if ns := strings.TrimSpace(string(data)); len(ns) > 0 {
return ns, true, nil
return ns, false, nil
}
}
......
......@@ -22,6 +22,7 @@ import (
"github.com/golang/glog"
"k8s.io/client-go/pkg/api"
restclient "k8s.io/client-go/rest"
clientcmdapi "k8s.io/client-go/tools/clientcmd/api"
)
......@@ -134,12 +135,26 @@ func (config *DeferredLoadingClientConfig) Namespace() (string, bool, error) {
return "", false, err
}
ns, ok, err := mergedKubeConfig.Namespace()
ns, overridden, err := mergedKubeConfig.Namespace()
// if we get an error and it is not empty config, or if the merged config defined an explicit namespace, or
// if in-cluster config is not possible, return immediately
if (err != nil && !IsEmptyConfig(err)) || ok || !config.icc.Possible() {
if (err != nil && !IsEmptyConfig(err)) || overridden || !config.icc.Possible() {
// return on any error except empty config
return ns, ok, err
return ns, overridden, err
}
if len(ns) > 0 {
// if we got a non-default namespace from the kubeconfig, use it
if ns != api.NamespaceDefault {
return ns, false, nil
}
// if we got a default namespace, determine whether it was explicit or implicit
if raw, err := mergedKubeConfig.RawConfig(); err == nil {
if context := raw.Contexts[raw.CurrentContext]; context != nil && len(context.Namespace) > 0 {
return ns, false, nil
}
}
}
glog.V(4).Infof("Using in-cluster namespace")
......
package(default_visibility = ["//visibility:public"])
licenses(["notice"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
"go_test",
)
go_test(
name = "go_default_test",
srcs = [
"jsonpath_test.go",
"parser_test.go",
],
library = ":go_default_library",
tags = ["automanaged"],
)
go_library(
name = "go_default_library",
srcs = [
"doc.go",
"jsonpath.go",
"node.go",
"parser.go",
],
tags = ["automanaged"],
deps = ["//vendor/k8s.io/client-go/third_party/forked/golang/template:go_default_library"],
)
......@@ -727,212 +727,218 @@
{
"checksumSHA1": "aZfBu8yGnljbJHjiz20WLiSMsfI=",
"path": "k8s.io/client-go/discovery",
"revision": "3627aeb7d4f6ade38f995d2c923e459146493c7e",
"revisionTime": "2017-03-31T20:34:26Z",
"revision": "21300e3e11c918b8e6a70fb7293b310683d6c046",
"revisionTime": "2017-07-05T23:56:09Z",
"version": "v3.0",
"versionExact": "v3.0.0-beta.0"
"versionExact": "v3.0.0"
},
{
"checksumSHA1": "wU1p+AMuZM77hzqX9kWGmL8itfI=",
"path": "k8s.io/client-go/dynamic",
"revision": "3627aeb7d4f6ade38f995d2c923e459146493c7e",
"revisionTime": "2017-03-31T20:34:26Z",
"revision": "21300e3e11c918b8e6a70fb7293b310683d6c046",
"revisionTime": "2017-07-05T23:56:09Z",
"version": "v3.0",
"versionExact": "v3.0.0-beta.0"
"versionExact": "v3.0.0"
},
{
"checksumSHA1": "NnHqF5QII9GH4l2bBCO4WAI9tPw=",
"checksumSHA1": "wITYzQZexnlz8rkFV03IMotjNOA=",
"path": "k8s.io/client-go/pkg/api",
"revision": "3627aeb7d4f6ade38f995d2c923e459146493c7e",
"revisionTime": "2017-03-31T20:34:26Z",
"revision": "21300e3e11c918b8e6a70fb7293b310683d6c046",
"revisionTime": "2017-07-05T23:56:09Z",
"version": "v3.0",
"versionExact": "v3.0.0-beta.0"
"versionExact": "v3.0.0"
},
{
"checksumSHA1": "xR+RJV1Y0ApIxJc5HJ9ROPJzAUE=",
"checksumSHA1": "xxjFbTIPF/jHdQ+a/PXbS9m6nrs=",
"path": "k8s.io/client-go/pkg/api/v1",
"revision": "3627aeb7d4f6ade38f995d2c923e459146493c7e",
"revisionTime": "2017-03-31T20:34:26Z",
"revision": "21300e3e11c918b8e6a70fb7293b310683d6c046",
"revisionTime": "2017-07-05T23:56:09Z",
"version": "v3.0",
"versionExact": "v3.0.0-beta.0"
"versionExact": "v3.0.0"
},
{
"checksumSHA1": "V5SktS1jIYIRcC/WZMuO8XXB0lg=",
"path": "k8s.io/client-go/pkg/apis/extensions",
"revision": "3627aeb7d4f6ade38f995d2c923e459146493c7e",
"revisionTime": "2017-03-31T20:34:26Z",
"revision": "21300e3e11c918b8e6a70fb7293b310683d6c046",
"revisionTime": "2017-07-05T23:56:09Z",
"version": "v3.0",
"versionExact": "v3.0.0-beta.0"
"versionExact": "v3.0.0"
},
{
"checksumSHA1": "/wssE6/+5UY8QrrbYnpkieVwp8Y=",
"path": "k8s.io/client-go/pkg/util",
"revision": "3627aeb7d4f6ade38f995d2c923e459146493c7e",
"revisionTime": "2017-03-31T20:34:26Z",
"revision": "21300e3e11c918b8e6a70fb7293b310683d6c046",
"revisionTime": "2017-07-05T23:56:09Z",
"version": "v3.0",
"versionExact": "v3.0.0-beta.0"
"versionExact": "v3.0.0"
},
{
"checksumSHA1": "U4YjTHHqEs+YZFYdiV1exJyuwDM=",
"path": "k8s.io/client-go/pkg/util/parsers",
"revision": "3627aeb7d4f6ade38f995d2c923e459146493c7e",
"revisionTime": "2017-03-31T20:34:26Z",
"revision": "21300e3e11c918b8e6a70fb7293b310683d6c046",
"revisionTime": "2017-07-05T23:56:09Z",
"version": "v3.0",
"versionExact": "v3.0.0-beta.0"
"versionExact": "v3.0.0"
},
{
"checksumSHA1": "ApqZCY/0FjkcTCymLF/hn1557rc=",
"checksumSHA1": "S9N4ZlOKYbxxTraIoLk+Vl5aTHk=",
"path": "k8s.io/client-go/pkg/version",
"revision": "3627aeb7d4f6ade38f995d2c923e459146493c7e",
"revisionTime": "2017-03-31T20:34:26Z",
"revision": "21300e3e11c918b8e6a70fb7293b310683d6c046",
"revisionTime": "2017-07-05T23:56:09Z",
"version": "v3.0",
"versionExact": "v3.0.0-beta.0"
"versionExact": "v3.0.0"
},
{
"checksumSHA1": "drjIIoy0trL0gWi/jxi7Nj/Xi/c=",
"path": "k8s.io/client-go/plugin/pkg/client/auth",
"revision": "3627aeb7d4f6ade38f995d2c923e459146493c7e",
"revisionTime": "2017-03-31T20:34:26Z",
"revision": "21300e3e11c918b8e6a70fb7293b310683d6c046",
"revisionTime": "2017-07-05T23:56:09Z",
"version": "v3.0",
"versionExact": "v3.0.0-beta.0"
"versionExact": "v3.0.0"
},
{
"checksumSHA1": "2BDblVF8oc5+YR6c625SC0JnnUo=",
"checksumSHA1": "7196s+oMOOyzgMIcyV9M5Aglq3I=",
"path": "k8s.io/client-go/plugin/pkg/client/auth/gcp",
"revision": "6daa6a29b8b866679a5be039ad0c8149de1cd60a",
"revisionTime": "2017-07-05T23:52:01Z"
"revision": "21300e3e11c918b8e6a70fb7293b310683d6c046",
"revisionTime": "2017-07-05T23:56:09Z",
"version": "v3.0",
"versionExact": "v3.0.0"
},
{
"checksumSHA1": "V2STSOlLArfXkmK9sD9xHHa7lFs=",
"path": "k8s.io/client-go/plugin/pkg/client/auth/oidc",
"revision": "3627aeb7d4f6ade38f995d2c923e459146493c7e",
"revisionTime": "2017-03-31T20:34:26Z",
"revision": "21300e3e11c918b8e6a70fb7293b310683d6c046",
"revisionTime": "2017-07-05T23:56:09Z",
"version": "v3.0",
"versionExact": "v3.0.0-beta.0"
"versionExact": "v3.0.0"
},
{
"checksumSHA1": "WKKCrNPVWbJYm1im1DA9145z6xI=",
"checksumSHA1": "tEfuWbhH4rn6Jz0VW49K8JorX5c=",
"path": "k8s.io/client-go/rest",
"revision": "3627aeb7d4f6ade38f995d2c923e459146493c7e",
"revisionTime": "2017-03-31T20:34:26Z",
"revision": "21300e3e11c918b8e6a70fb7293b310683d6c046",
"revisionTime": "2017-07-05T23:56:09Z",
"version": "v3.0",
"versionExact": "v3.0.0-beta.0"
"versionExact": "v3.0.0"
},
{
"checksumSHA1": "+wYCwQaVc1GvMWwOWc3wXd2GT5s=",
"path": "k8s.io/client-go/rest/watch",
"revision": "3627aeb7d4f6ade38f995d2c923e459146493c7e",
"revisionTime": "2017-03-31T20:34:26Z",
"revision": "21300e3e11c918b8e6a70fb7293b310683d6c046",
"revisionTime": "2017-07-05T23:56:09Z",
"version": "v3.0",
"versionExact": "v3.0.0-beta.0"
"versionExact": "v3.0.0"
},
{
"checksumSHA1": "PmCh3R76TMf8+0P5Jek4fsBO2hA=",
"checksumSHA1": "j3Th2B1Hpv6UFLMEmA0ZdbO4kGU=",
"path": "k8s.io/client-go/third_party/forked/golang/template",
"revision": "6daa6a29b8b866679a5be039ad0c8149de1cd60a",
"revisionTime": "2017-07-05T23:52:01Z"
"revision": "21300e3e11c918b8e6a70fb7293b310683d6c046",
"revisionTime": "2017-07-05T23:56:09Z",
"version": "v3.0",
"versionExact": "v3.0.0"
},
{
"checksumSHA1": "BjbzPnaU9672noMuSuqr0JIg344=",
"path": "k8s.io/client-go/tools/auth",
"revision": "3627aeb7d4f6ade38f995d2c923e459146493c7e",
"revisionTime": "2017-03-31T20:34:26Z",
"revision": "21300e3e11c918b8e6a70fb7293b310683d6c046",
"revisionTime": "2017-07-05T23:56:09Z",
"version": "v3.0",
"versionExact": "v3.0.0-beta.0"
"versionExact": "v3.0.0"
},
{
"checksumSHA1": "y8RjCuBi8XrHvvVsguI7E97Fh6M=",
"checksumSHA1": "X9gWN2Vjxjs3I8fQ1z6vD6fYKIk=",
"path": "k8s.io/client-go/tools/clientcmd",
"revision": "3627aeb7d4f6ade38f995d2c923e459146493c7e",
"revisionTime": "2017-03-31T20:34:26Z",
"revision": "21300e3e11c918b8e6a70fb7293b310683d6c046",
"revisionTime": "2017-07-05T23:56:09Z",
"version": "v3.0",
"versionExact": "v3.0.0-beta.0"
"versionExact": "v3.0.0"
},
{
"checksumSHA1": "1jUQmUDroNs5XYhsQna4kNTzMik=",
"path": "k8s.io/client-go/tools/clientcmd/api",
"revision": "3627aeb7d4f6ade38f995d2c923e459146493c7e",
"revisionTime": "2017-03-31T20:34:26Z",
"revision": "21300e3e11c918b8e6a70fb7293b310683d6c046",
"revisionTime": "2017-07-05T23:56:09Z",
"version": "v3.0",
"versionExact": "v3.0.0-beta.0"
"versionExact": "v3.0.0"
},
{
"checksumSHA1": "6cVFBhDYvRiAwBf0QYbmUoLi5lQ=",
"path": "k8s.io/client-go/tools/clientcmd/api/latest",
"revision": "3627aeb7d4f6ade38f995d2c923e459146493c7e",
"revisionTime": "2017-03-31T20:34:26Z",
"revision": "21300e3e11c918b8e6a70fb7293b310683d6c046",
"revisionTime": "2017-07-05T23:56:09Z",
"version": "v3.0",
"versionExact": "v3.0.0-beta.0"
"versionExact": "v3.0.0"
},
{
"checksumSHA1": "DG6X6yy03Om6CFqIZm08+geRGkI=",
"path": "k8s.io/client-go/tools/clientcmd/api/v1",
"revision": "3627aeb7d4f6ade38f995d2c923e459146493c7e",
"revisionTime": "2017-03-31T20:34:26Z",
"revision": "21300e3e11c918b8e6a70fb7293b310683d6c046",
"revisionTime": "2017-07-05T23:56:09Z",
"version": "v3.0",
"versionExact": "v3.0.0-beta.0"
"versionExact": "v3.0.0"
},
{
"checksumSHA1": "rRC9GCWXfyIXKHBCeKpw7exVybE=",
"path": "k8s.io/client-go/tools/metrics",
"revision": "3627aeb7d4f6ade38f995d2c923e459146493c7e",
"revisionTime": "2017-03-31T20:34:26Z",
"revision": "21300e3e11c918b8e6a70fb7293b310683d6c046",
"revisionTime": "2017-07-05T23:56:09Z",
"version": "v3.0",
"versionExact": "v3.0.0-beta.0"
"versionExact": "v3.0.0"
},
{
"checksumSHA1": "X7AC6lZGlUJdhKLplcncvP7e8Jc=",
"path": "k8s.io/client-go/transport",
"revision": "3627aeb7d4f6ade38f995d2c923e459146493c7e",
"revisionTime": "2017-03-31T20:34:26Z",
"revision": "21300e3e11c918b8e6a70fb7293b310683d6c046",
"revisionTime": "2017-07-05T23:56:09Z",
"version": "v3.0",
"versionExact": "v3.0.0-beta.0"
"versionExact": "v3.0.0"
},
{
"checksumSHA1": "y6BpqJVXsBeykiGljn95RvGONCg=",
"path": "k8s.io/client-go/util/cert",
"revision": "3627aeb7d4f6ade38f995d2c923e459146493c7e",
"revisionTime": "2017-03-31T20:34:26Z",
"revision": "21300e3e11c918b8e6a70fb7293b310683d6c046",
"revisionTime": "2017-07-05T23:56:09Z",
"version": "v3.0",
"versionExact": "v3.0.0-beta.0"
"versionExact": "v3.0.0"
},
{
"checksumSHA1": "kyu4NFcUmCTsUMpsPeyFrigorCE=",
"path": "k8s.io/client-go/util/clock",
"revision": "3627aeb7d4f6ade38f995d2c923e459146493c7e",
"revisionTime": "2017-03-31T20:34:26Z",
"revision": "21300e3e11c918b8e6a70fb7293b310683d6c046",
"revisionTime": "2017-07-05T23:56:09Z",
"version": "v3.0",
"versionExact": "v3.0.0-beta.0"
"versionExact": "v3.0.0"
},
{
"checksumSHA1": "pCmdxpwnhYqoDSls5ehHtQFglm4=",
"path": "k8s.io/client-go/util/flowcontrol",
"revision": "3627aeb7d4f6ade38f995d2c923e459146493c7e",
"revisionTime": "2017-03-31T20:34:26Z",
"revision": "21300e3e11c918b8e6a70fb7293b310683d6c046",
"revisionTime": "2017-07-05T23:56:09Z",
"version": "v3.0",
"versionExact": "v3.0.0-beta.0"
"versionExact": "v3.0.0"
},
{
"checksumSHA1": "WRb0rXGx56fwcCisVW7GoI6gO/A=",
"path": "k8s.io/client-go/util/homedir",
"revision": "3627aeb7d4f6ade38f995d2c923e459146493c7e",
"revisionTime": "2017-03-31T20:34:26Z",
"revision": "21300e3e11c918b8e6a70fb7293b310683d6c046",
"revisionTime": "2017-07-05T23:56:09Z",
"version": "v3.0",
"versionExact": "v3.0.0-beta.0"
"versionExact": "v3.0.0"
},
{
"checksumSHA1": "W6bJiNAwgNwNJC+y+TPtacgUGlY=",
"path": "k8s.io/client-go/util/integer",
"revision": "3627aeb7d4f6ade38f995d2c923e459146493c7e",
"revisionTime": "2017-03-31T20:34:26Z",
"revision": "21300e3e11c918b8e6a70fb7293b310683d6c046",
"revisionTime": "2017-07-05T23:56:09Z",
"version": "v3.0",
"versionExact": "v3.0.0-beta.0"
"versionExact": "v3.0.0"
},
{
"checksumSHA1": "GsIX2f2J67NXq1HBiSEQh0SuTB4=",
"checksumSHA1": "xkQLKFsFx+jXOqOAWVAZeMiDLH4=",
"path": "k8s.io/client-go/util/jsonpath",
"revision": "6daa6a29b8b866679a5be039ad0c8149de1cd60a",
"revisionTime": "2017-07-05T23:52:01Z"
"revision": "21300e3e11c918b8e6a70fb7293b310683d6c046",
"revisionTime": "2017-07-05T23:56:09Z",
"version": "v3.0",
"versionExact": "v3.0.0"
}
],
"rootPath": "github.com/ksonnet/kubecfg"
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment