Compare commits

..

13 Commits

Author SHA1 Message Date
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
Kubernetes Publisher
7621a5ebb8 Merge pull request #74672 from logicalhan/automated-cherry-pick-of-#74636-upstream-release-1.13
Automated cherry pick of #74636: Remove reflector metrics as they currently cause a memory

Kubernetes-commit: b5f55a8fc542efd87871b02991e3d930692c64a2
2019-03-07 16:13:46 +00:00
Han Kang
adcd4a6e94 Remove reflector metrics as they currently cause a memory leak
Kubernetes-commit: 48cfdd8c5b14643d93042b9eeb38772386cc86e8
2019-02-26 16:22:24 -08:00
Kubernetes Publisher
f8e521c159 Merge pull request #74102 from caesarxuchao/automated-cherry-pick-of-#73443-#73713-#73805-#74000-upstream-release-1.13
Automated cherry pick of #73443: update json-patch to pick up bug fixes

Kubernetes-commit: de4225fa13bfb50581f80e6af63b326a3c1028b1
2019-02-21 21:43:11 +00:00
Chao Xu
99c0ce7cfe Importing latest json-patch.
Kubernetes-commit: f80a5504d88b9029a4323a7c6bd31e034badc315
2019-02-04 09:47:54 -08:00
Chao Xu
21a91e3c21 update json-patch to pick up bug fixes
Kubernetes-commit: f0a495cff09087e38f39ac2dd4864b38e14da7be
2019-01-28 17:42:01 -08:00
Kubernetes Publisher
86dbf26d38 Merge pull request #72837 from liggitt/automated-cherry-pick-of-#72825-upstream-release-1.13
Automated cherry pick of #72825: Find current resourceVersion for waiting for

Kubernetes-commit: f5d6de398b219e9c85081582f42e0755587ef9fa
2019-01-15 09:52:54 -08:00
Jordan Liggitt
2c40298487 Find current resourceVersion for waiting for deletion/conditions
Kubernetes-commit: a0fa584f3edda46b9ccf9916051ca0b9d8d1fe0a
2019-01-11 10:38:18 -05:00
Kubernetes Publisher
73dad31f02 Merge pull request #72672 from liggitt/automated-cherry-pick-of-#72437-upstream-release-1.13
Automated cherry pick of #72437: Shorten re-read period for token files to work with

Kubernetes-commit: abc71e373ff5a5a701c5e48e2cd07b28f18b3b48
2019-01-10 19:35:54 +00:00
Jordan Liggitt
db82653708 Shorten re-read period for token files to work with ProjectedTokenVolumeSource
Kubernetes-commit: cf878b9332c8875ed0fcb8ce07cccd99547ce099
2018-12-29 22:18:28 -05:00
7 changed files with 140 additions and 120 deletions

170
Godeps/Godeps.json generated
View File

@@ -56,7 +56,7 @@
},
{
"ImportPath": "github.com/evanphx/json-patch",
"Rev": "36442dbdb585210f8d5a1b45e67aa323c197d5c4"
"Rev": "5858425f75500d40c52783dce87d085a483ce135"
},
{
"ImportPath": "github.com/gogo/protobuf/proto",
@@ -272,339 +272,339 @@
},
{
"ImportPath": "k8s.io/api/admissionregistration/v1alpha1",
"Rev": "6da7bf9cc208e9bd28a2d24c4337a2f83bed9f37"
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
},
{
"ImportPath": "k8s.io/api/admissionregistration/v1beta1",
"Rev": "6da7bf9cc208e9bd28a2d24c4337a2f83bed9f37"
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
},
{
"ImportPath": "k8s.io/api/apps/v1",
"Rev": "6da7bf9cc208e9bd28a2d24c4337a2f83bed9f37"
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
},
{
"ImportPath": "k8s.io/api/apps/v1beta1",
"Rev": "6da7bf9cc208e9bd28a2d24c4337a2f83bed9f37"
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
},
{
"ImportPath": "k8s.io/api/apps/v1beta2",
"Rev": "6da7bf9cc208e9bd28a2d24c4337a2f83bed9f37"
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
},
{
"ImportPath": "k8s.io/api/auditregistration/v1alpha1",
"Rev": "6da7bf9cc208e9bd28a2d24c4337a2f83bed9f37"
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
},
{
"ImportPath": "k8s.io/api/authentication/v1",
"Rev": "6da7bf9cc208e9bd28a2d24c4337a2f83bed9f37"
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
},
{
"ImportPath": "k8s.io/api/authentication/v1beta1",
"Rev": "6da7bf9cc208e9bd28a2d24c4337a2f83bed9f37"
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
},
{
"ImportPath": "k8s.io/api/authorization/v1",
"Rev": "6da7bf9cc208e9bd28a2d24c4337a2f83bed9f37"
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
},
{
"ImportPath": "k8s.io/api/authorization/v1beta1",
"Rev": "6da7bf9cc208e9bd28a2d24c4337a2f83bed9f37"
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
},
{
"ImportPath": "k8s.io/api/autoscaling/v1",
"Rev": "6da7bf9cc208e9bd28a2d24c4337a2f83bed9f37"
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
},
{
"ImportPath": "k8s.io/api/autoscaling/v2beta1",
"Rev": "6da7bf9cc208e9bd28a2d24c4337a2f83bed9f37"
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
},
{
"ImportPath": "k8s.io/api/autoscaling/v2beta2",
"Rev": "6da7bf9cc208e9bd28a2d24c4337a2f83bed9f37"
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
},
{
"ImportPath": "k8s.io/api/batch/v1",
"Rev": "6da7bf9cc208e9bd28a2d24c4337a2f83bed9f37"
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
},
{
"ImportPath": "k8s.io/api/batch/v1beta1",
"Rev": "6da7bf9cc208e9bd28a2d24c4337a2f83bed9f37"
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
},
{
"ImportPath": "k8s.io/api/batch/v2alpha1",
"Rev": "6da7bf9cc208e9bd28a2d24c4337a2f83bed9f37"
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
},
{
"ImportPath": "k8s.io/api/certificates/v1beta1",
"Rev": "6da7bf9cc208e9bd28a2d24c4337a2f83bed9f37"
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
},
{
"ImportPath": "k8s.io/api/coordination/v1beta1",
"Rev": "6da7bf9cc208e9bd28a2d24c4337a2f83bed9f37"
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
},
{
"ImportPath": "k8s.io/api/core/v1",
"Rev": "6da7bf9cc208e9bd28a2d24c4337a2f83bed9f37"
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
},
{
"ImportPath": "k8s.io/api/events/v1beta1",
"Rev": "6da7bf9cc208e9bd28a2d24c4337a2f83bed9f37"
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
},
{
"ImportPath": "k8s.io/api/extensions/v1beta1",
"Rev": "6da7bf9cc208e9bd28a2d24c4337a2f83bed9f37"
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
},
{
"ImportPath": "k8s.io/api/imagepolicy/v1alpha1",
"Rev": "6da7bf9cc208e9bd28a2d24c4337a2f83bed9f37"
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
},
{
"ImportPath": "k8s.io/api/networking/v1",
"Rev": "6da7bf9cc208e9bd28a2d24c4337a2f83bed9f37"
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
},
{
"ImportPath": "k8s.io/api/policy/v1beta1",
"Rev": "6da7bf9cc208e9bd28a2d24c4337a2f83bed9f37"
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
},
{
"ImportPath": "k8s.io/api/rbac/v1",
"Rev": "6da7bf9cc208e9bd28a2d24c4337a2f83bed9f37"
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
},
{
"ImportPath": "k8s.io/api/rbac/v1alpha1",
"Rev": "6da7bf9cc208e9bd28a2d24c4337a2f83bed9f37"
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
},
{
"ImportPath": "k8s.io/api/rbac/v1beta1",
"Rev": "6da7bf9cc208e9bd28a2d24c4337a2f83bed9f37"
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
},
{
"ImportPath": "k8s.io/api/scheduling/v1alpha1",
"Rev": "6da7bf9cc208e9bd28a2d24c4337a2f83bed9f37"
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
},
{
"ImportPath": "k8s.io/api/scheduling/v1beta1",
"Rev": "6da7bf9cc208e9bd28a2d24c4337a2f83bed9f37"
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
},
{
"ImportPath": "k8s.io/api/settings/v1alpha1",
"Rev": "6da7bf9cc208e9bd28a2d24c4337a2f83bed9f37"
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
},
{
"ImportPath": "k8s.io/api/storage/v1",
"Rev": "6da7bf9cc208e9bd28a2d24c4337a2f83bed9f37"
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
},
{
"ImportPath": "k8s.io/api/storage/v1alpha1",
"Rev": "6da7bf9cc208e9bd28a2d24c4337a2f83bed9f37"
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
},
{
"ImportPath": "k8s.io/api/storage/v1beta1",
"Rev": "6da7bf9cc208e9bd28a2d24c4337a2f83bed9f37"
"Rev": "5cb15d34447165a97c76ed5a60e4e99c8a01ecfe"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/api/apitesting",
"Rev": "2b1284ed4c93a43499e781493253e2ac5959c4fd"
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/api/apitesting/fuzzer",
"Rev": "2b1284ed4c93a43499e781493253e2ac5959c4fd"
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/api/apitesting/roundtrip",
"Rev": "2b1284ed4c93a43499e781493253e2ac5959c4fd"
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/api/equality",
"Rev": "2b1284ed4c93a43499e781493253e2ac5959c4fd"
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/api/errors",
"Rev": "2b1284ed4c93a43499e781493253e2ac5959c4fd"
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/api/meta",
"Rev": "2b1284ed4c93a43499e781493253e2ac5959c4fd"
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/api/resource",
"Rev": "2b1284ed4c93a43499e781493253e2ac5959c4fd"
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/apis/meta/fuzzer",
"Rev": "2b1284ed4c93a43499e781493253e2ac5959c4fd"
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/apis/meta/internalversion",
"Rev": "2b1284ed4c93a43499e781493253e2ac5959c4fd"
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1",
"Rev": "2b1284ed4c93a43499e781493253e2ac5959c4fd"
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured",
"Rev": "2b1284ed4c93a43499e781493253e2ac5959c4fd"
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1beta1",
"Rev": "2b1284ed4c93a43499e781493253e2ac5959c4fd"
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/conversion",
"Rev": "2b1284ed4c93a43499e781493253e2ac5959c4fd"
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/conversion/queryparams",
"Rev": "2b1284ed4c93a43499e781493253e2ac5959c4fd"
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/fields",
"Rev": "2b1284ed4c93a43499e781493253e2ac5959c4fd"
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/labels",
"Rev": "2b1284ed4c93a43499e781493253e2ac5959c4fd"
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime",
"Rev": "2b1284ed4c93a43499e781493253e2ac5959c4fd"
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/schema",
"Rev": "2b1284ed4c93a43499e781493253e2ac5959c4fd"
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer",
"Rev": "2b1284ed4c93a43499e781493253e2ac5959c4fd"
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/json",
"Rev": "2b1284ed4c93a43499e781493253e2ac5959c4fd"
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/protobuf",
"Rev": "2b1284ed4c93a43499e781493253e2ac5959c4fd"
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/recognizer",
"Rev": "2b1284ed4c93a43499e781493253e2ac5959c4fd"
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/streaming",
"Rev": "2b1284ed4c93a43499e781493253e2ac5959c4fd"
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/versioning",
"Rev": "2b1284ed4c93a43499e781493253e2ac5959c4fd"
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/selection",
"Rev": "2b1284ed4c93a43499e781493253e2ac5959c4fd"
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/types",
"Rev": "2b1284ed4c93a43499e781493253e2ac5959c4fd"
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/cache",
"Rev": "2b1284ed4c93a43499e781493253e2ac5959c4fd"
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/clock",
"Rev": "2b1284ed4c93a43499e781493253e2ac5959c4fd"
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/diff",
"Rev": "2b1284ed4c93a43499e781493253e2ac5959c4fd"
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/errors",
"Rev": "2b1284ed4c93a43499e781493253e2ac5959c4fd"
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/framer",
"Rev": "2b1284ed4c93a43499e781493253e2ac5959c4fd"
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/httpstream",
"Rev": "2b1284ed4c93a43499e781493253e2ac5959c4fd"
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/httpstream/spdy",
"Rev": "2b1284ed4c93a43499e781493253e2ac5959c4fd"
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/intstr",
"Rev": "2b1284ed4c93a43499e781493253e2ac5959c4fd"
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/json",
"Rev": "2b1284ed4c93a43499e781493253e2ac5959c4fd"
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/mergepatch",
"Rev": "2b1284ed4c93a43499e781493253e2ac5959c4fd"
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/naming",
"Rev": "2b1284ed4c93a43499e781493253e2ac5959c4fd"
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/net",
"Rev": "2b1284ed4c93a43499e781493253e2ac5959c4fd"
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/remotecommand",
"Rev": "2b1284ed4c93a43499e781493253e2ac5959c4fd"
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/runtime",
"Rev": "2b1284ed4c93a43499e781493253e2ac5959c4fd"
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/sets",
"Rev": "2b1284ed4c93a43499e781493253e2ac5959c4fd"
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/strategicpatch",
"Rev": "2b1284ed4c93a43499e781493253e2ac5959c4fd"
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/validation",
"Rev": "2b1284ed4c93a43499e781493253e2ac5959c4fd"
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/validation/field",
"Rev": "2b1284ed4c93a43499e781493253e2ac5959c4fd"
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/wait",
"Rev": "2b1284ed4c93a43499e781493253e2ac5959c4fd"
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/yaml",
"Rev": "2b1284ed4c93a43499e781493253e2ac5959c4fd"
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/version",
"Rev": "2b1284ed4c93a43499e781493253e2ac5959c4fd"
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/watch",
"Rev": "2b1284ed4c93a43499e781493253e2ac5959c4fd"
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
},
{
"ImportPath": "k8s.io/apimachinery/third_party/forked/golang/json",
"Rev": "2b1284ed4c93a43499e781493253e2ac5959c4fd"
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
},
{
"ImportPath": "k8s.io/apimachinery/third_party/forked/golang/netutil",
"Rev": "2b1284ed4c93a43499e781493253e2ac5959c4fd"
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
},
{
"ImportPath": "k8s.io/apimachinery/third_party/forked/golang/reflect",
"Rev": "2b1284ed4c93a43499e781493253e2ac5959c4fd"
"Rev": "86fb29eff6288413d76bd8506874fddd9fccdff0"
},
{
"ImportPath": "k8s.io/klog",

View File

@@ -303,6 +303,7 @@ func (c *dynamicResourceClient) List(opts metav1.ListOptions) (*unstructured.Uns
}
list := &unstructured.UnstructuredList{}
list.SetResourceVersion(entireList.GetResourceVersion())
for i := range entireList.Items {
item := &entireList.Items[i]
metadata, err := meta.Accessor(item)

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

@@ -24,10 +24,8 @@ import (
"net"
"net/url"
"reflect"
"strconv"
"strings"
"sync"
"sync/atomic"
"syscall"
"time"
@@ -95,17 +93,10 @@ func NewReflector(lw ListerWatcher, expectedType interface{}, store Store, resyn
return NewNamedReflector(naming.GetNameFromCallsite(internalPackages...), lw, expectedType, store, resyncPeriod)
}
// reflectorDisambiguator is used to disambiguate started reflectors.
// initialized to an unstable value to ensure meaning isn't attributed to the suffix.
var reflectorDisambiguator = int64(time.Now().UnixNano() % 12345)
// NewNamedReflector same as NewReflector, but with a specified name for logging
func NewNamedReflector(name string, lw ListerWatcher, expectedType interface{}, store Store, resyncPeriod time.Duration) *Reflector {
reflectorSuffix := atomic.AddInt64(&reflectorDisambiguator, 1)
r := &Reflector{
name: name,
// we need this to be unique per process (some names are still the same) but obvious who it belongs to
metrics: newReflectorMetrics(makeValidPrometheusMetricLabel(fmt.Sprintf("reflector_"+name+"_%d", reflectorSuffix))),
name: name,
listerWatcher: lw,
store: store,
expectedType: reflect.TypeOf(expectedType),
@@ -173,13 +164,10 @@ func (r *Reflector) ListAndWatch(stopCh <-chan struct{}) error {
// to be served from cache and potentially be delayed relative to
// etcd contents. Reflector framework will catch up via Watch() eventually.
options := metav1.ListOptions{ResourceVersion: "0"}
r.metrics.numberOfLists.Inc()
start := r.clock.Now()
list, err := r.listerWatcher.List(options)
if err != nil {
return fmt.Errorf("%s: Failed to list %v: %v", r.name, r.expectedType, err)
}
r.metrics.listDuration.Observe(time.Since(start).Seconds())
listMetaInterface, err := meta.ListAccessor(list)
if err != nil {
return fmt.Errorf("%s: Unable to understand list result %#v: %v", r.name, list, err)
@@ -189,7 +177,6 @@ func (r *Reflector) ListAndWatch(stopCh <-chan struct{}) error {
if err != nil {
return fmt.Errorf("%s: Unable to understand list result %#v (%v)", r.name, list, err)
}
r.metrics.numberOfItemsInList.Observe(float64(len(items)))
if err := r.syncWith(items, resourceVersion); err != nil {
return fmt.Errorf("%s: Unable to sync list result: %v", r.name, err)
}
@@ -239,7 +226,6 @@ func (r *Reflector) ListAndWatch(stopCh <-chan struct{}) error {
TimeoutSeconds: &timeoutSeconds,
}
r.metrics.numberOfWatches.Inc()
w, err := r.listerWatcher.Watch(options)
if err != nil {
switch err {
@@ -291,11 +277,6 @@ func (r *Reflector) watchHandler(w watch.Interface, resourceVersion *string, err
// Stopping the watcher should be idempotent and if we return from this function there's no way
// we're coming back in with the same watch interface.
defer w.Stop()
// update metrics
defer func() {
r.metrics.numberOfItemsInWatch.Observe(float64(eventCount))
r.metrics.watchDuration.Observe(time.Since(start).Seconds())
}()
loop:
for {
@@ -351,7 +332,6 @@ loop:
watchDuration := r.clock.Now().Sub(start)
if watchDuration < 1*time.Second && eventCount == 0 {
r.metrics.numberOfShortWatches.Inc()
return fmt.Errorf("very short watch: %s: Unexpected watch close - watch lasted less than a second and no items received", r.name)
}
klog.V(4).Infof("%s: Watch close - %v total %v items received", r.name, r.expectedType, eventCount)
@@ -370,9 +350,4 @@ func (r *Reflector) setLastSyncResourceVersion(v string) {
r.lastSyncResourceVersionMutex.Lock()
defer r.lastSyncResourceVersionMutex.Unlock()
r.lastSyncResourceVersion = v
rv, err := strconv.Atoi(v)
if err == nil {
r.metrics.lastResourceVersion.Set(float64(rv))
}
}

View File

@@ -47,14 +47,14 @@ func TokenSourceWrapTransport(ts oauth2.TokenSource) func(http.RoundTripper) htt
func NewCachedFileTokenSource(path string) oauth2.TokenSource {
return &cachingTokenSource{
now: time.Now,
leeway: 1 * time.Minute,
leeway: 10 * time.Second,
base: &fileTokenSource{
path: path,
// This period was picked because it is half of the minimum validity
// duration for a token provisioned by they TokenRequest API. This is
// unsophisticated and should induce rotation at a frequency that should
// work with the token volume source.
period: 5 * time.Minute,
// This period was picked because it is half of the duration between when the kubelet
// refreshes a projected service account token and when the original token expires.
// Default token lifetime is 10 minutes, and the kubelet starts refreshing at 80% of lifetime.
// This should induce re-reading at a frequency that works with the token volume source.
period: time.Minute,
},
}
}