Compare commits

..

14 Commits

Author SHA1 Message Date
Kubernetes Publisher
ee6c071a42 Merge pull request #81546 from cblecker/1.13/go-1.11.13
Update golang/x/net dependency on release-1.13

Kubernetes-commit: 37d169313237cb4ceb2cc4bef300f2ae3053c1a2
2019-08-17 22:22:06 +00:00
Christoph Blecker
2d48f18fea Update golang.org/x/net to b1cc14a
Kubernetes-commit: e795732a4c0f077bf9d0bd8fbf41992e390bbed5
2019-08-17 00:04:10 -07:00
Kubernetes Publisher
bcbe227473 sync: update godeps 2019-07-04 09:57:23 +00:00
Kubernetes Publisher
5633e3a616 Merge pull request #79501 from nikhita/remove-bitbucket-01
[1.13] Replace bitbucket with github to fix godep error

Kubernetes-commit: bd6da4fe2b07f7681802f28de264ee7eda5cef5d
2019-06-29 00:41:23 +00:00
Nikhita Raghunath
2705570f5e Replace bitbucket with github
This commit has the following changes:

- Replace `bitbucket.org/ww/goautoneg` with `github.com/munnerz/goautoneg`.
- Replace `bitbucket.org/bertimus9/systemstat` with `github.com/nikhita/systemstat`.
- Bump kube-openapi to remove so that it's dependency on `bitbucket.org/ww/goautoneg`
moves to `github.com/munnerz/goautoneg`.
- Generate `swagger.json` generated from the above change.
- Update `BUILD` files.

Bitbucket is replaced with GitHub because:

Atlassian finally pulled the plug on their 1.0 api and forces everyone
to use 2.0 now: https://developer.atlassian.com/cloud/bitbucket/deprecation-notice-v1-apis/

This leads to an error like:

```
godep: error downloading dep (bitbucket.org/ww/goautoneg): https://api.bitbucket.org/1.0/repositories/ww/goautoneg: 410 Gone
```

This was fixed in upstream go in golang/tools@13ba8ad.

To fix this in k/k:

1) We'll need to either bump our vendored version
https://github.com/kubernetes/kubernetes/blob/release-1.13/vendor/golang.org/x/tools/go/vcs/vcs.go#L676.
However, this bump brings in _lots_ of changes.

2) We can entirely remove our dependency on bitbucket.

The second point is better because:

1) godep itself vendors in an older version: https://github.com/tools/godep/blob/master/vendor/golang.org/x/tools/go/vcs/vcs.go#L667.
This means that anyone who installs godep directly, without forking it,
will not be able to use it with Kubernetes if we stick to bitbucket.

2) Bumping `golang/x/tools` requires running `godep restore`, which doesn't
work because that uses the 1.0 api...leading to a catch-22 like situation.

Kubernetes-commit: 409df0aa2e5a555454909eab3c4f492461c21f3b
2019-06-28 15:43:19 +05:30
Kubernetes Publisher
1777665291 Merge pull request #78028 from yuchengwu/automated-cherry-pick-of-#77874-github-release-1.13
Automated cherry pick of #77874: fix CVE-2019-11244: `kubectl --http-cache=<world-accessible

Kubernetes-commit: 211b1ada57ae0b85dd08c4c353c90305fa1f14c9
2019-05-21 19:07:02 +00:00
Kubernetes Publisher
1b0f6441b0 Merge pull request #77899 from mikedanese/automated-cherry-pick-of-#77613-upstream-release-1.13
Automated cherry pick of #77613 upstream release 1.13

Kubernetes-commit: bb630af86712366105b76959acca5bd71798bfb1
2019-05-21 10:20:25 -07:00
Jordan Liggitt
f2f74ab51a honor overridden tokenfile, add InClusterConfig override tests
Kubernetes-commit: d31e2f5f11440cdf1ada47f6ba99b01a410fb7c6
2019-05-15 08:15:02 -04:00
Mike Danese
f0d5882143 BoundServiceAccountTokenVolume: fix InClusterConfig
Kubernetes-commit: c748ddf904ad2878e43c5c564ef7d4650c43cb48
2019-05-14 09:29:16 -07:00
Yucheng Wu
7c7fe05819 fix CVE-2019-11244: kubectl --http-cache=<world-accessible dir> creates world-writeable cached schema files
Kubernetes-commit: 8bebb336d0dfa07c70f92ca81fd88986d2a3192b
2019-05-14 14:49:38 +08:00
Kubernetes Publisher
65905f29c1 Merge pull request #76200 from mvladev/automated-cherry-pick-of-#75072-upstream-release-1.13
Automated cherry pick of #75072: Check for required name parameter in dynamic client

Kubernetes-commit: 405aa2e8b674b86f55c298d750e67bea1fdfa4bb
2019-05-06 18:47:56 -07:00
Levi Blackstone
52d188ef6c Check for required name parameter in dynamic client
The Create, Delete, Get, Patch, Update and UpdateStatus
methods in the dynamic client all expect the name
parameter to be non-empty, but did not validate this
requirement, which could lead to a panic. Add explicit
checks to these methods.

Kubernetes-commit: 55cdbb43c001baa578523413201b35976e561ea6
2019-03-06 16:21:33 -07:00
Kubernetes Publisher
b9d8bc3e50 Merge pull request #75532 from andyzhangx/automated-cherry-pick-of-#72143-upstream-release-1.13
Automated cherry pick of #72143: Fix aad support in kubectl for sovereign cloud

Kubernetes-commit: 73d746b3f37cde4d0919700c1fb4d9f926fb01d9
2019-04-03 20:44:49 -07:00
Dong Liu
cba5305359 Fix aad support in kubectl for sovereign cloud
Kubernetes-commit: d951fc7970cd417bd855f2946702bfb6e5efc998
2018-12-18 13:50:56 +08:00
11 changed files with 268 additions and 109 deletions

190
Godeps/Godeps.json generated
View File

@@ -1,7 +1,7 @@
{
"ImportPath": "k8s.io/client-go",
"GoVersion": "go1.11",
"GodepVersion": "v80",
"GodepVersion": "v80-k8s-r1",
"Packages": [
"./..."
],
@@ -192,27 +192,27 @@
},
{
"ImportPath": "golang.org/x/net/context",
"Rev": "0ed95abb35c445290478a5348a7b38bb154135fd"
"Rev": "b1cc14aba47abf96f96818003fa4caad3a4b4e86"
},
{
"ImportPath": "golang.org/x/net/context/ctxhttp",
"Rev": "0ed95abb35c445290478a5348a7b38bb154135fd"
"Rev": "b1cc14aba47abf96f96818003fa4caad3a4b4e86"
},
{
"ImportPath": "golang.org/x/net/http/httpguts",
"Rev": "b1cc14aba47abf96f96818003fa4caad3a4b4e86"
},
{
"ImportPath": "golang.org/x/net/http2",
"Rev": "0ed95abb35c445290478a5348a7b38bb154135fd"
"Rev": "b1cc14aba47abf96f96818003fa4caad3a4b4e86"
},
{
"ImportPath": "golang.org/x/net/http2/hpack",
"Rev": "0ed95abb35c445290478a5348a7b38bb154135fd"
"Rev": "b1cc14aba47abf96f96818003fa4caad3a4b4e86"
},
{
"ImportPath": "golang.org/x/net/idna",
"Rev": "0ed95abb35c445290478a5348a7b38bb154135fd"
},
{
"ImportPath": "golang.org/x/net/lex/httplex",
"Rev": "0ed95abb35c445290478a5348a7b38bb154135fd"
"Rev": "b1cc14aba47abf96f96818003fa4caad3a4b4e86"
},
{
"ImportPath": "golang.org/x/oauth2",
@@ -272,339 +272,339 @@
},
{
"ImportPath": "k8s.io/api/admissionregistration/v1alpha1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "ebce17126a01f5fe02364d88c899816bcc2a8165"
},
{
"ImportPath": "k8s.io/api/admissionregistration/v1beta1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "ebce17126a01f5fe02364d88c899816bcc2a8165"
},
{
"ImportPath": "k8s.io/api/apps/v1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "ebce17126a01f5fe02364d88c899816bcc2a8165"
},
{
"ImportPath": "k8s.io/api/apps/v1beta1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "ebce17126a01f5fe02364d88c899816bcc2a8165"
},
{
"ImportPath": "k8s.io/api/apps/v1beta2",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "ebce17126a01f5fe02364d88c899816bcc2a8165"
},
{
"ImportPath": "k8s.io/api/auditregistration/v1alpha1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "ebce17126a01f5fe02364d88c899816bcc2a8165"
},
{
"ImportPath": "k8s.io/api/authentication/v1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "ebce17126a01f5fe02364d88c899816bcc2a8165"
},
{
"ImportPath": "k8s.io/api/authentication/v1beta1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "ebce17126a01f5fe02364d88c899816bcc2a8165"
},
{
"ImportPath": "k8s.io/api/authorization/v1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "ebce17126a01f5fe02364d88c899816bcc2a8165"
},
{
"ImportPath": "k8s.io/api/authorization/v1beta1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "ebce17126a01f5fe02364d88c899816bcc2a8165"
},
{
"ImportPath": "k8s.io/api/autoscaling/v1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "ebce17126a01f5fe02364d88c899816bcc2a8165"
},
{
"ImportPath": "k8s.io/api/autoscaling/v2beta1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "ebce17126a01f5fe02364d88c899816bcc2a8165"
},
{
"ImportPath": "k8s.io/api/autoscaling/v2beta2",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "ebce17126a01f5fe02364d88c899816bcc2a8165"
},
{
"ImportPath": "k8s.io/api/batch/v1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "ebce17126a01f5fe02364d88c899816bcc2a8165"
},
{
"ImportPath": "k8s.io/api/batch/v1beta1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "ebce17126a01f5fe02364d88c899816bcc2a8165"
},
{
"ImportPath": "k8s.io/api/batch/v2alpha1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "ebce17126a01f5fe02364d88c899816bcc2a8165"
},
{
"ImportPath": "k8s.io/api/certificates/v1beta1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "ebce17126a01f5fe02364d88c899816bcc2a8165"
},
{
"ImportPath": "k8s.io/api/coordination/v1beta1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "ebce17126a01f5fe02364d88c899816bcc2a8165"
},
{
"ImportPath": "k8s.io/api/core/v1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "ebce17126a01f5fe02364d88c899816bcc2a8165"
},
{
"ImportPath": "k8s.io/api/events/v1beta1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "ebce17126a01f5fe02364d88c899816bcc2a8165"
},
{
"ImportPath": "k8s.io/api/extensions/v1beta1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "ebce17126a01f5fe02364d88c899816bcc2a8165"
},
{
"ImportPath": "k8s.io/api/imagepolicy/v1alpha1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "ebce17126a01f5fe02364d88c899816bcc2a8165"
},
{
"ImportPath": "k8s.io/api/networking/v1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "ebce17126a01f5fe02364d88c899816bcc2a8165"
},
{
"ImportPath": "k8s.io/api/policy/v1beta1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "ebce17126a01f5fe02364d88c899816bcc2a8165"
},
{
"ImportPath": "k8s.io/api/rbac/v1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "ebce17126a01f5fe02364d88c899816bcc2a8165"
},
{
"ImportPath": "k8s.io/api/rbac/v1alpha1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "ebce17126a01f5fe02364d88c899816bcc2a8165"
},
{
"ImportPath": "k8s.io/api/rbac/v1beta1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "ebce17126a01f5fe02364d88c899816bcc2a8165"
},
{
"ImportPath": "k8s.io/api/scheduling/v1alpha1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "ebce17126a01f5fe02364d88c899816bcc2a8165"
},
{
"ImportPath": "k8s.io/api/scheduling/v1beta1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "ebce17126a01f5fe02364d88c899816bcc2a8165"
},
{
"ImportPath": "k8s.io/api/settings/v1alpha1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "ebce17126a01f5fe02364d88c899816bcc2a8165"
},
{
"ImportPath": "k8s.io/api/storage/v1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "ebce17126a01f5fe02364d88c899816bcc2a8165"
},
{
"ImportPath": "k8s.io/api/storage/v1alpha1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "ebce17126a01f5fe02364d88c899816bcc2a8165"
},
{
"ImportPath": "k8s.io/api/storage/v1beta1",
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
"Rev": "ebce17126a01f5fe02364d88c899816bcc2a8165"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/api/apitesting",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "bf4de9df677cd119930fa83483bad158956cdfcf"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/api/apitesting/fuzzer",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "bf4de9df677cd119930fa83483bad158956cdfcf"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/api/apitesting/roundtrip",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "bf4de9df677cd119930fa83483bad158956cdfcf"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/api/equality",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "bf4de9df677cd119930fa83483bad158956cdfcf"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/api/errors",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "bf4de9df677cd119930fa83483bad158956cdfcf"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/api/meta",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "bf4de9df677cd119930fa83483bad158956cdfcf"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/api/resource",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "bf4de9df677cd119930fa83483bad158956cdfcf"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/apis/meta/fuzzer",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "bf4de9df677cd119930fa83483bad158956cdfcf"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/apis/meta/internalversion",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "bf4de9df677cd119930fa83483bad158956cdfcf"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "bf4de9df677cd119930fa83483bad158956cdfcf"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "bf4de9df677cd119930fa83483bad158956cdfcf"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1beta1",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "bf4de9df677cd119930fa83483bad158956cdfcf"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/conversion",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "bf4de9df677cd119930fa83483bad158956cdfcf"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/conversion/queryparams",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "bf4de9df677cd119930fa83483bad158956cdfcf"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/fields",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "bf4de9df677cd119930fa83483bad158956cdfcf"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/labels",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "bf4de9df677cd119930fa83483bad158956cdfcf"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "bf4de9df677cd119930fa83483bad158956cdfcf"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/schema",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "bf4de9df677cd119930fa83483bad158956cdfcf"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "bf4de9df677cd119930fa83483bad158956cdfcf"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/json",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "bf4de9df677cd119930fa83483bad158956cdfcf"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/protobuf",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "bf4de9df677cd119930fa83483bad158956cdfcf"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/recognizer",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "bf4de9df677cd119930fa83483bad158956cdfcf"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/streaming",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "bf4de9df677cd119930fa83483bad158956cdfcf"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/versioning",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "bf4de9df677cd119930fa83483bad158956cdfcf"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/selection",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "bf4de9df677cd119930fa83483bad158956cdfcf"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/types",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "bf4de9df677cd119930fa83483bad158956cdfcf"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/cache",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "bf4de9df677cd119930fa83483bad158956cdfcf"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/clock",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "bf4de9df677cd119930fa83483bad158956cdfcf"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/diff",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "bf4de9df677cd119930fa83483bad158956cdfcf"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/errors",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "bf4de9df677cd119930fa83483bad158956cdfcf"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/framer",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "bf4de9df677cd119930fa83483bad158956cdfcf"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/httpstream",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "bf4de9df677cd119930fa83483bad158956cdfcf"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/httpstream/spdy",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "bf4de9df677cd119930fa83483bad158956cdfcf"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/intstr",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "bf4de9df677cd119930fa83483bad158956cdfcf"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/json",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "bf4de9df677cd119930fa83483bad158956cdfcf"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/mergepatch",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "bf4de9df677cd119930fa83483bad158956cdfcf"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/naming",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "bf4de9df677cd119930fa83483bad158956cdfcf"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/net",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "bf4de9df677cd119930fa83483bad158956cdfcf"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/remotecommand",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "bf4de9df677cd119930fa83483bad158956cdfcf"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/runtime",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "bf4de9df677cd119930fa83483bad158956cdfcf"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/sets",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "bf4de9df677cd119930fa83483bad158956cdfcf"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/strategicpatch",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "bf4de9df677cd119930fa83483bad158956cdfcf"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/validation",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "bf4de9df677cd119930fa83483bad158956cdfcf"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/validation/field",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "bf4de9df677cd119930fa83483bad158956cdfcf"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/wait",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "bf4de9df677cd119930fa83483bad158956cdfcf"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/yaml",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "bf4de9df677cd119930fa83483bad158956cdfcf"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/version",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "bf4de9df677cd119930fa83483bad158956cdfcf"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/watch",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "bf4de9df677cd119930fa83483bad158956cdfcf"
},
{
"ImportPath": "k8s.io/apimachinery/third_party/forked/golang/json",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "bf4de9df677cd119930fa83483bad158956cdfcf"
},
{
"ImportPath": "k8s.io/apimachinery/third_party/forked/golang/netutil",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "bf4de9df677cd119930fa83483bad158956cdfcf"
},
{
"ImportPath": "k8s.io/apimachinery/third_party/forked/golang/reflect",
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
"Rev": "bf4de9df677cd119930fa83483bad158956cdfcf"
},
{
"ImportPath": "k8s.io/klog",
@@ -612,7 +612,7 @@
},
{
"ImportPath": "k8s.io/kube-openapi/pkg/util/proto",
"Rev": "c59034cc13d587f5ef4e85ca0ade0c1866ae8e1d"
"Rev": "fd52d7a69c206aae478f9aff43cb10eaf25e5c2a"
},
{
"ImportPath": "sigs.k8s.io/yaml",

View File

@@ -164,7 +164,7 @@ func (d *CachedDiscoveryClient) getCachedFile(filename string) ([]byte, error) {
}
func (d *CachedDiscoveryClient) writeCachedFile(filename string, obj runtime.Object) error {
if err := os.MkdirAll(filepath.Dir(filename), 0755); err != nil {
if err := os.MkdirAll(filepath.Dir(filename), 0750); err != nil {
return err
}
@@ -183,7 +183,7 @@ func (d *CachedDiscoveryClient) writeCachedFile(filename string, obj runtime.Obj
return err
}
err = os.Chmod(f.Name(), 0755)
err = os.Chmod(f.Name(), 0660)
if err != nil {
return err
}

View File

@@ -19,6 +19,7 @@ package discovery
import (
"io/ioutil"
"os"
"path/filepath"
"testing"
"time"
@@ -95,6 +96,32 @@ func TestNewCachedDiscoveryClient_TTL(t *testing.T) {
assert.Equal(c.groupCalls, 2)
}
func TestNewCachedDiscoveryClient_PathPerm(t *testing.T) {
assert := assert.New(t)
d, err := ioutil.TempDir("", "")
assert.NoError(err)
os.RemoveAll(d)
defer os.RemoveAll(d)
c := fakeDiscoveryClient{}
cdc := newCachedDiscoveryClient(&c, d, 1*time.Nanosecond)
cdc.ServerGroups()
err = filepath.Walk(d, func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
if info.IsDir() {
assert.Equal(os.FileMode(0750), info.Mode().Perm())
} else {
assert.Equal(os.FileMode(0660), info.Mode().Perm())
}
return nil
})
assert.NoError(err)
}
type fakeDiscoveryClient struct {
groupCalls int
resourceCalls int

View File

@@ -18,6 +18,7 @@ package discovery
import (
"net/http"
"os"
"path/filepath"
"github.com/gregjones/httpcache"
@@ -35,6 +36,8 @@ type cacheRoundTripper struct {
// corresponding requests.
func newCacheRoundTripper(cacheDir string, rt http.RoundTripper) http.RoundTripper {
d := diskv.New(diskv.Options{
PathPerm: os.FileMode(0750),
FilePerm: os.FileMode(0660),
BasePath: cacheDir,
TempDir: filepath.Join(cacheDir, ".diskv-temp"),
})

View File

@@ -22,7 +22,10 @@ import (
"net/http"
"net/url"
"os"
"path/filepath"
"testing"
"github.com/stretchr/testify/assert"
)
// copied from k8s.io/client-go/transport/round_trippers_test.go
@@ -93,3 +96,52 @@ func TestCacheRoundTripper(t *testing.T) {
t.Errorf("Invalid content read from cache %q", string(content))
}
}
func TestCacheRoundTripperPathPerm(t *testing.T) {
assert := assert.New(t)
rt := &testRoundTripper{}
cacheDir, err := ioutil.TempDir("", "cache-rt")
os.RemoveAll(cacheDir)
defer os.RemoveAll(cacheDir)
if err != nil {
t.Fatal(err)
}
cache := newCacheRoundTripper(cacheDir, rt)
// First call, caches the response
req := &http.Request{
Method: http.MethodGet,
URL: &url.URL{Host: "localhost"},
}
rt.Response = &http.Response{
Header: http.Header{"ETag": []string{`"123456"`}},
Body: ioutil.NopCloser(bytes.NewReader([]byte("Content"))),
StatusCode: http.StatusOK,
}
resp, err := cache.RoundTrip(req)
if err != nil {
t.Fatal(err)
}
content, err := ioutil.ReadAll(resp.Body)
if err != nil {
t.Fatal(err)
}
if string(content) != "Content" {
t.Errorf(`Expected Body to be "Content", got %q`, string(content))
}
err = filepath.Walk(cacheDir, func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
if info.IsDir() {
assert.Equal(os.FileMode(0750), info.Mode().Perm())
} else {
assert.Equal(os.FileMode(0660), info.Mode().Perm())
}
return nil
})
assert.NoError(err)
}

View File

@@ -17,6 +17,7 @@ limitations under the License.
package dynamic
import (
"fmt"
"io"
"k8s.io/apimachinery/pkg/api/meta"
@@ -94,6 +95,9 @@ func (c *dynamicResourceClient) Create(obj *unstructured.Unstructured, opts meta
return nil, err
}
name = accessor.GetName()
if len(name) == 0 {
return nil, fmt.Errorf("name is required")
}
}
result := c.client.client.
@@ -122,6 +126,10 @@ func (c *dynamicResourceClient) Update(obj *unstructured.Unstructured, opts meta
if err != nil {
return nil, err
}
name := accessor.GetName()
if len(name) == 0 {
return nil, fmt.Errorf("name is required")
}
outBytes, err := runtime.Encode(unstructured.UnstructuredJSONScheme, obj)
if err != nil {
return nil, err
@@ -129,7 +137,7 @@ func (c *dynamicResourceClient) Update(obj *unstructured.Unstructured, opts meta
result := c.client.client.
Put().
AbsPath(append(c.makeURLSegments(accessor.GetName()), subresources...)...).
AbsPath(append(c.makeURLSegments(name), subresources...)...).
Body(outBytes).
SpecificallyVersionedParams(&opts, dynamicParameterCodec, versionV1).
Do()
@@ -153,6 +161,10 @@ func (c *dynamicResourceClient) UpdateStatus(obj *unstructured.Unstructured, opt
if err != nil {
return nil, err
}
name := accessor.GetName()
if len(name) == 0 {
return nil, fmt.Errorf("name is required")
}
outBytes, err := runtime.Encode(unstructured.UnstructuredJSONScheme, obj)
if err != nil {
@@ -161,7 +173,7 @@ func (c *dynamicResourceClient) UpdateStatus(obj *unstructured.Unstructured, opt
result := c.client.client.
Put().
AbsPath(append(c.makeURLSegments(accessor.GetName()), "status")...).
AbsPath(append(c.makeURLSegments(name), "status")...).
Body(outBytes).
SpecificallyVersionedParams(&opts, dynamicParameterCodec, versionV1).
Do()
@@ -181,6 +193,9 @@ func (c *dynamicResourceClient) UpdateStatus(obj *unstructured.Unstructured, opt
}
func (c *dynamicResourceClient) Delete(name string, opts *metav1.DeleteOptions, subresources ...string) error {
if len(name) == 0 {
return fmt.Errorf("name is required")
}
if opts == nil {
opts = &metav1.DeleteOptions{}
}
@@ -216,6 +231,9 @@ func (c *dynamicResourceClient) DeleteCollection(opts *metav1.DeleteOptions, lis
}
func (c *dynamicResourceClient) Get(name string, opts metav1.GetOptions, subresources ...string) (*unstructured.Unstructured, error) {
if len(name) == 0 {
return nil, fmt.Errorf("name is required")
}
result := c.client.client.Get().AbsPath(append(c.makeURLSegments(name), subresources...)...).SpecificallyVersionedParams(&opts, dynamicParameterCodec, versionV1).Do()
if err := result.Error(); err != nil {
return nil, err
@@ -284,6 +302,9 @@ func (c *dynamicResourceClient) Watch(opts metav1.ListOptions) (watch.Interface,
}
func (c *dynamicResourceClient) Patch(name string, pt types.PatchType, data []byte, opts metav1.UpdateOptions, subresources ...string) (*unstructured.Unstructured, error) {
if len(name) == 0 {
return nil, fmt.Errorf("name is required")
}
result := c.client.client.
Patch(pt).
AbsPath(append(c.makeURLSegments(name), subresources...)...).

View File

@@ -145,6 +145,7 @@ func (r *azureRoundTripper) WrappedRoundTripper() http.RoundTripper { return r.r
type azureToken struct {
token adal.Token
environment string
clientID string
tenantID string
apiserverID string
@@ -219,6 +220,10 @@ func (ts *azureTokenSource) retrieveTokenFromCfg() (*azureToken, error) {
if refreshToken == "" {
return nil, fmt.Errorf("no refresh token in cfg: %s", cfgRefreshToken)
}
environment := ts.cfg[cfgEnvironment]
if environment == "" {
return nil, fmt.Errorf("no environment in cfg: %s", cfgEnvironment)
}
clientID := ts.cfg[cfgClientID]
if clientID == "" {
return nil, fmt.Errorf("no client ID in cfg: %s", cfgClientID)
@@ -250,6 +255,7 @@ func (ts *azureTokenSource) retrieveTokenFromCfg() (*azureToken, error) {
Resource: fmt.Sprintf("spn:%s", apiserverID),
Type: tokenType,
},
environment: environment,
clientID: clientID,
tenantID: tenantID,
apiserverID: apiserverID,
@@ -260,6 +266,7 @@ func (ts *azureTokenSource) storeTokenInCfg(token *azureToken) error {
newCfg := make(map[string]string)
newCfg[cfgAccessToken] = token.token.AccessToken
newCfg[cfgRefreshToken] = token.token.RefreshToken
newCfg[cfgEnvironment] = token.environment
newCfg[cfgClientID] = token.clientID
newCfg[cfgTenantID] = token.tenantID
newCfg[cfgApiserverID] = token.apiserverID
@@ -275,7 +282,12 @@ func (ts *azureTokenSource) storeTokenInCfg(token *azureToken) error {
}
func (ts *azureTokenSource) refreshToken(token *azureToken) (*azureToken, error) {
oauthConfig, err := adal.NewOAuthConfig(azure.PublicCloud.ActiveDirectoryEndpoint, token.tenantID)
env, err := azure.EnvironmentFromName(token.environment)
if err != nil {
return nil, err
}
oauthConfig, err := adal.NewOAuthConfig(env.ActiveDirectoryEndpoint, token.tenantID)
if err != nil {
return nil, fmt.Errorf("building the OAuth configuration for token refresh: %v", err)
}
@@ -299,6 +311,7 @@ func (ts *azureTokenSource) refreshToken(token *azureToken) (*azureToken, error)
return &azureToken{
token: spt.Token(),
environment: token.environment,
clientID: token.clientID,
tenantID: token.tenantID,
apiserverID: token.apiserverID,
@@ -353,6 +366,7 @@ func (ts *azureTokenSourceDeviceCode) Token() (*azureToken, error) {
return &azureToken{
token: *token,
environment: ts.environment.Name,
clientID: ts.clientID,
tenantID: ts.tenantID,
apiserverID: ts.apiserverID,

View File

@@ -53,6 +53,13 @@ func TestAzureTokenSource(t *testing.T) {
wantCfg := token2Cfg(token)
persistedCfg := persiter.Cache()
wantCfgLen := len(wantCfg)
persistedCfgLen := len(persistedCfg)
if wantCfgLen != persistedCfgLen {
t.Errorf("wantCfgLen and persistedCfgLen do not match, wantCfgLen=%v, persistedCfgLen=%v", wantCfgLen, persistedCfgLen)
}
for k, v := range persistedCfg {
if strings.Compare(v, wantCfg[k]) != 0 {
t.Errorf("Token() persisted cfg %s: got %v, want %v", k, v, wantCfg[k])
@@ -103,6 +110,7 @@ type fakeTokenSource struct {
func (ts *fakeTokenSource) Token() (*azureToken, error) {
return &azureToken{
token: newFackeAzureToken(ts.accessToken, ts.expiresOn),
environment: "testenv",
clientID: "fake",
tenantID: "fake",
apiserverID: "fake",
@@ -113,6 +121,7 @@ func token2Cfg(token *azureToken) map[string]string {
cfg := make(map[string]string)
cfg[cfgAccessToken] = token.token.AccessToken
cfg[cfgRefreshToken] = token.token.RefreshToken
cfg[cfgEnvironment] = token.environment
cfg[cfgClientID] = token.clientID
cfg[cfgTenantID] = token.tenantID
cfg[cfgApiserverID] = token.apiserverID

View File

@@ -74,9 +74,10 @@ func (c *Config) TransportConfig() (*transport.Config, error) {
KeyFile: c.KeyFile,
KeyData: c.KeyData,
},
Username: c.Username,
Password: c.Password,
BearerToken: c.BearerToken,
Username: c.Username,
Password: c.Password,
BearerToken: c.BearerToken,
BearerTokenFile: c.BearerTokenFile,
Impersonate: transport.ImpersonationConfig{
UserName: c.Impersonate.UserName,
Groups: c.Impersonate.Groups,

View File

@@ -228,6 +228,7 @@ func (config *DirectClientConfig) getUserIdentificationPartialConfig(configAuthI
// blindly overwrite existing values based on precedence
if len(configAuthInfo.Token) > 0 {
mergedConfig.BearerToken = configAuthInfo.Token
mergedConfig.BearerTokenFile = configAuthInfo.TokenFile
} else if len(configAuthInfo.TokenFile) > 0 {
tokenBytes, err := ioutil.ReadFile(configAuthInfo.TokenFile)
if err != nil {
@@ -499,8 +500,9 @@ func (config *inClusterClientConfig) ClientConfig() (*restclient.Config, error)
if server := config.overrides.ClusterInfo.Server; len(server) > 0 {
icc.Host = server
}
if token := config.overrides.AuthInfo.Token; len(token) > 0 {
icc.BearerToken = token
if len(config.overrides.AuthInfo.Token) > 0 || len(config.overrides.AuthInfo.TokenFile) > 0 {
icc.BearerToken = config.overrides.AuthInfo.Token
icc.BearerTokenFile = config.overrides.AuthInfo.TokenFile
}
if certificateAuthorityFile := config.overrides.ClusterInfo.CertificateAuthority; len(certificateAuthorityFile) > 0 {
icc.TLSClientConfig.CAFile = certificateAuthorityFile

View File

@@ -548,6 +548,30 @@ func TestInClusterClientConfigPrecedence(t *testing.T) {
},
},
},
{
overrides: &ConfigOverrides{
ClusterInfo: clientcmdapi.Cluster{
Server: "https://host-from-overrides.com",
CertificateAuthority: "/path/to/ca-from-overrides.crt",
},
AuthInfo: clientcmdapi.AuthInfo{
Token: "token-from-override",
TokenFile: "tokenfile-from-override",
},
},
},
{
overrides: &ConfigOverrides{
ClusterInfo: clientcmdapi.Cluster{
Server: "https://host-from-overrides.com",
CertificateAuthority: "/path/to/ca-from-overrides.crt",
},
AuthInfo: clientcmdapi.AuthInfo{
Token: "",
TokenFile: "tokenfile-from-override",
},
},
},
{
overrides: &ConfigOverrides{},
},
@@ -556,13 +580,15 @@ func TestInClusterClientConfigPrecedence(t *testing.T) {
for _, tc := range tt {
expectedServer := "https://host-from-cluster.com"
expectedToken := "token-from-cluster"
expectedTokenFile := "tokenfile-from-cluster"
expectedCAFile := "/path/to/ca-from-cluster.crt"
icc := &inClusterClientConfig{
inClusterConfigProvider: func() (*restclient.Config, error) {
return &restclient.Config{
Host: expectedServer,
BearerToken: expectedToken,
Host: expectedServer,
BearerToken: expectedToken,
BearerTokenFile: expectedTokenFile,
TLSClientConfig: restclient.TLSClientConfig{
CAFile: expectedCAFile,
},
@@ -579,8 +605,9 @@ func TestInClusterClientConfigPrecedence(t *testing.T) {
if overridenServer := tc.overrides.ClusterInfo.Server; len(overridenServer) > 0 {
expectedServer = overridenServer
}
if overridenToken := tc.overrides.AuthInfo.Token; len(overridenToken) > 0 {
expectedToken = overridenToken
if len(tc.overrides.AuthInfo.Token) > 0 || len(tc.overrides.AuthInfo.TokenFile) > 0 {
expectedToken = tc.overrides.AuthInfo.Token
expectedTokenFile = tc.overrides.AuthInfo.TokenFile
}
if overridenCAFile := tc.overrides.ClusterInfo.CertificateAuthority; len(overridenCAFile) > 0 {
expectedCAFile = overridenCAFile
@@ -592,6 +619,9 @@ func TestInClusterClientConfigPrecedence(t *testing.T) {
if clientConfig.BearerToken != expectedToken {
t.Errorf("Expected token %v, got %v", expectedToken, clientConfig.BearerToken)
}
if clientConfig.BearerTokenFile != expectedTokenFile {
t.Errorf("Expected tokenfile %v, got %v", expectedTokenFile, clientConfig.BearerTokenFile)
}
if clientConfig.TLSClientConfig.CAFile != expectedCAFile {
t.Errorf("Expected Certificate Authority %v, got %v", expectedCAFile, clientConfig.TLSClientConfig.CAFile)
}