Merge pull request #68552 from the-redback/automated-cherry-pick-of-#66078-upstream-release-1.11

Automated cherry pick of #66078: fix dynamic client listing bug

Kubernetes-commit: 9b517e008b9604951f68c859b1d26d5e1a896597
This commit is contained in:
Kubernetes Publisher
2018-10-04 00:35:10 -07:00
3 changed files with 155 additions and 84 deletions

160
Godeps/Godeps.json generated
View File

@@ -268,323 +268,323 @@
},
{
"ImportPath": "k8s.io/api/admissionregistration/v1alpha1",
"Rev": "2d6f90ab1293a1fb871cf149423ebb72aa7423aa"
"Rev": "4e7be11eab3ffcfc1876898b8272df53785a9504"
},
{
"ImportPath": "k8s.io/api/admissionregistration/v1beta1",
"Rev": "2d6f90ab1293a1fb871cf149423ebb72aa7423aa"
"Rev": "4e7be11eab3ffcfc1876898b8272df53785a9504"
},
{
"ImportPath": "k8s.io/api/apps/v1",
"Rev": "2d6f90ab1293a1fb871cf149423ebb72aa7423aa"
"Rev": "4e7be11eab3ffcfc1876898b8272df53785a9504"
},
{
"ImportPath": "k8s.io/api/apps/v1beta1",
"Rev": "2d6f90ab1293a1fb871cf149423ebb72aa7423aa"
"Rev": "4e7be11eab3ffcfc1876898b8272df53785a9504"
},
{
"ImportPath": "k8s.io/api/apps/v1beta2",
"Rev": "2d6f90ab1293a1fb871cf149423ebb72aa7423aa"
"Rev": "4e7be11eab3ffcfc1876898b8272df53785a9504"
},
{
"ImportPath": "k8s.io/api/authentication/v1",
"Rev": "2d6f90ab1293a1fb871cf149423ebb72aa7423aa"
"Rev": "4e7be11eab3ffcfc1876898b8272df53785a9504"
},
{
"ImportPath": "k8s.io/api/authentication/v1beta1",
"Rev": "2d6f90ab1293a1fb871cf149423ebb72aa7423aa"
"Rev": "4e7be11eab3ffcfc1876898b8272df53785a9504"
},
{
"ImportPath": "k8s.io/api/authorization/v1",
"Rev": "2d6f90ab1293a1fb871cf149423ebb72aa7423aa"
"Rev": "4e7be11eab3ffcfc1876898b8272df53785a9504"
},
{
"ImportPath": "k8s.io/api/authorization/v1beta1",
"Rev": "2d6f90ab1293a1fb871cf149423ebb72aa7423aa"
"Rev": "4e7be11eab3ffcfc1876898b8272df53785a9504"
},
{
"ImportPath": "k8s.io/api/autoscaling/v1",
"Rev": "2d6f90ab1293a1fb871cf149423ebb72aa7423aa"
"Rev": "4e7be11eab3ffcfc1876898b8272df53785a9504"
},
{
"ImportPath": "k8s.io/api/autoscaling/v2beta1",
"Rev": "2d6f90ab1293a1fb871cf149423ebb72aa7423aa"
"Rev": "4e7be11eab3ffcfc1876898b8272df53785a9504"
},
{
"ImportPath": "k8s.io/api/batch/v1",
"Rev": "2d6f90ab1293a1fb871cf149423ebb72aa7423aa"
"Rev": "4e7be11eab3ffcfc1876898b8272df53785a9504"
},
{
"ImportPath": "k8s.io/api/batch/v1beta1",
"Rev": "2d6f90ab1293a1fb871cf149423ebb72aa7423aa"
"Rev": "4e7be11eab3ffcfc1876898b8272df53785a9504"
},
{
"ImportPath": "k8s.io/api/batch/v2alpha1",
"Rev": "2d6f90ab1293a1fb871cf149423ebb72aa7423aa"
"Rev": "4e7be11eab3ffcfc1876898b8272df53785a9504"
},
{
"ImportPath": "k8s.io/api/certificates/v1beta1",
"Rev": "2d6f90ab1293a1fb871cf149423ebb72aa7423aa"
"Rev": "4e7be11eab3ffcfc1876898b8272df53785a9504"
},
{
"ImportPath": "k8s.io/api/core/v1",
"Rev": "2d6f90ab1293a1fb871cf149423ebb72aa7423aa"
"Rev": "4e7be11eab3ffcfc1876898b8272df53785a9504"
},
{
"ImportPath": "k8s.io/api/events/v1beta1",
"Rev": "2d6f90ab1293a1fb871cf149423ebb72aa7423aa"
"Rev": "4e7be11eab3ffcfc1876898b8272df53785a9504"
},
{
"ImportPath": "k8s.io/api/extensions/v1beta1",
"Rev": "2d6f90ab1293a1fb871cf149423ebb72aa7423aa"
"Rev": "4e7be11eab3ffcfc1876898b8272df53785a9504"
},
{
"ImportPath": "k8s.io/api/imagepolicy/v1alpha1",
"Rev": "2d6f90ab1293a1fb871cf149423ebb72aa7423aa"
"Rev": "4e7be11eab3ffcfc1876898b8272df53785a9504"
},
{
"ImportPath": "k8s.io/api/networking/v1",
"Rev": "2d6f90ab1293a1fb871cf149423ebb72aa7423aa"
"Rev": "4e7be11eab3ffcfc1876898b8272df53785a9504"
},
{
"ImportPath": "k8s.io/api/policy/v1beta1",
"Rev": "2d6f90ab1293a1fb871cf149423ebb72aa7423aa"
"Rev": "4e7be11eab3ffcfc1876898b8272df53785a9504"
},
{
"ImportPath": "k8s.io/api/rbac/v1",
"Rev": "2d6f90ab1293a1fb871cf149423ebb72aa7423aa"
"Rev": "4e7be11eab3ffcfc1876898b8272df53785a9504"
},
{
"ImportPath": "k8s.io/api/rbac/v1alpha1",
"Rev": "2d6f90ab1293a1fb871cf149423ebb72aa7423aa"
"Rev": "4e7be11eab3ffcfc1876898b8272df53785a9504"
},
{
"ImportPath": "k8s.io/api/rbac/v1beta1",
"Rev": "2d6f90ab1293a1fb871cf149423ebb72aa7423aa"
"Rev": "4e7be11eab3ffcfc1876898b8272df53785a9504"
},
{
"ImportPath": "k8s.io/api/scheduling/v1alpha1",
"Rev": "2d6f90ab1293a1fb871cf149423ebb72aa7423aa"
"Rev": "4e7be11eab3ffcfc1876898b8272df53785a9504"
},
{
"ImportPath": "k8s.io/api/scheduling/v1beta1",
"Rev": "2d6f90ab1293a1fb871cf149423ebb72aa7423aa"
"Rev": "4e7be11eab3ffcfc1876898b8272df53785a9504"
},
{
"ImportPath": "k8s.io/api/settings/v1alpha1",
"Rev": "2d6f90ab1293a1fb871cf149423ebb72aa7423aa"
"Rev": "4e7be11eab3ffcfc1876898b8272df53785a9504"
},
{
"ImportPath": "k8s.io/api/storage/v1",
"Rev": "2d6f90ab1293a1fb871cf149423ebb72aa7423aa"
"Rev": "4e7be11eab3ffcfc1876898b8272df53785a9504"
},
{
"ImportPath": "k8s.io/api/storage/v1alpha1",
"Rev": "2d6f90ab1293a1fb871cf149423ebb72aa7423aa"
"Rev": "4e7be11eab3ffcfc1876898b8272df53785a9504"
},
{
"ImportPath": "k8s.io/api/storage/v1beta1",
"Rev": "2d6f90ab1293a1fb871cf149423ebb72aa7423aa"
"Rev": "4e7be11eab3ffcfc1876898b8272df53785a9504"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/api/equality",
"Rev": "488889b0007f63ffee90b66a34a2deca9ec58774"
"Rev": "def12e63c512da17043b4f0293f52d1006603d9f"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/api/errors",
"Rev": "488889b0007f63ffee90b66a34a2deca9ec58774"
"Rev": "def12e63c512da17043b4f0293f52d1006603d9f"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/api/meta",
"Rev": "488889b0007f63ffee90b66a34a2deca9ec58774"
"Rev": "def12e63c512da17043b4f0293f52d1006603d9f"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/api/resource",
"Rev": "488889b0007f63ffee90b66a34a2deca9ec58774"
"Rev": "def12e63c512da17043b4f0293f52d1006603d9f"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/api/testing",
"Rev": "488889b0007f63ffee90b66a34a2deca9ec58774"
"Rev": "def12e63c512da17043b4f0293f52d1006603d9f"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/api/testing/fuzzer",
"Rev": "488889b0007f63ffee90b66a34a2deca9ec58774"
"Rev": "def12e63c512da17043b4f0293f52d1006603d9f"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/api/testing/roundtrip",
"Rev": "488889b0007f63ffee90b66a34a2deca9ec58774"
"Rev": "def12e63c512da17043b4f0293f52d1006603d9f"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/apis/meta/fuzzer",
"Rev": "488889b0007f63ffee90b66a34a2deca9ec58774"
"Rev": "def12e63c512da17043b4f0293f52d1006603d9f"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/apis/meta/internalversion",
"Rev": "488889b0007f63ffee90b66a34a2deca9ec58774"
"Rev": "def12e63c512da17043b4f0293f52d1006603d9f"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1",
"Rev": "488889b0007f63ffee90b66a34a2deca9ec58774"
"Rev": "def12e63c512da17043b4f0293f52d1006603d9f"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured",
"Rev": "488889b0007f63ffee90b66a34a2deca9ec58774"
"Rev": "def12e63c512da17043b4f0293f52d1006603d9f"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1beta1",
"Rev": "488889b0007f63ffee90b66a34a2deca9ec58774"
"Rev": "def12e63c512da17043b4f0293f52d1006603d9f"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/conversion",
"Rev": "488889b0007f63ffee90b66a34a2deca9ec58774"
"Rev": "def12e63c512da17043b4f0293f52d1006603d9f"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/conversion/queryparams",
"Rev": "488889b0007f63ffee90b66a34a2deca9ec58774"
"Rev": "def12e63c512da17043b4f0293f52d1006603d9f"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/fields",
"Rev": "488889b0007f63ffee90b66a34a2deca9ec58774"
"Rev": "def12e63c512da17043b4f0293f52d1006603d9f"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/labels",
"Rev": "488889b0007f63ffee90b66a34a2deca9ec58774"
"Rev": "def12e63c512da17043b4f0293f52d1006603d9f"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime",
"Rev": "488889b0007f63ffee90b66a34a2deca9ec58774"
"Rev": "def12e63c512da17043b4f0293f52d1006603d9f"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/schema",
"Rev": "488889b0007f63ffee90b66a34a2deca9ec58774"
"Rev": "def12e63c512da17043b4f0293f52d1006603d9f"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer",
"Rev": "488889b0007f63ffee90b66a34a2deca9ec58774"
"Rev": "def12e63c512da17043b4f0293f52d1006603d9f"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/json",
"Rev": "488889b0007f63ffee90b66a34a2deca9ec58774"
"Rev": "def12e63c512da17043b4f0293f52d1006603d9f"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/protobuf",
"Rev": "488889b0007f63ffee90b66a34a2deca9ec58774"
"Rev": "def12e63c512da17043b4f0293f52d1006603d9f"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/recognizer",
"Rev": "488889b0007f63ffee90b66a34a2deca9ec58774"
"Rev": "def12e63c512da17043b4f0293f52d1006603d9f"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/streaming",
"Rev": "488889b0007f63ffee90b66a34a2deca9ec58774"
"Rev": "def12e63c512da17043b4f0293f52d1006603d9f"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/versioning",
"Rev": "488889b0007f63ffee90b66a34a2deca9ec58774"
"Rev": "def12e63c512da17043b4f0293f52d1006603d9f"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/selection",
"Rev": "488889b0007f63ffee90b66a34a2deca9ec58774"
"Rev": "def12e63c512da17043b4f0293f52d1006603d9f"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/types",
"Rev": "488889b0007f63ffee90b66a34a2deca9ec58774"
"Rev": "def12e63c512da17043b4f0293f52d1006603d9f"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/cache",
"Rev": "488889b0007f63ffee90b66a34a2deca9ec58774"
"Rev": "def12e63c512da17043b4f0293f52d1006603d9f"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/clock",
"Rev": "488889b0007f63ffee90b66a34a2deca9ec58774"
"Rev": "def12e63c512da17043b4f0293f52d1006603d9f"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/diff",
"Rev": "488889b0007f63ffee90b66a34a2deca9ec58774"
"Rev": "def12e63c512da17043b4f0293f52d1006603d9f"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/errors",
"Rev": "488889b0007f63ffee90b66a34a2deca9ec58774"
"Rev": "def12e63c512da17043b4f0293f52d1006603d9f"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/framer",
"Rev": "488889b0007f63ffee90b66a34a2deca9ec58774"
"Rev": "def12e63c512da17043b4f0293f52d1006603d9f"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/httpstream",
"Rev": "488889b0007f63ffee90b66a34a2deca9ec58774"
"Rev": "def12e63c512da17043b4f0293f52d1006603d9f"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/httpstream/spdy",
"Rev": "488889b0007f63ffee90b66a34a2deca9ec58774"
"Rev": "def12e63c512da17043b4f0293f52d1006603d9f"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/intstr",
"Rev": "488889b0007f63ffee90b66a34a2deca9ec58774"
"Rev": "def12e63c512da17043b4f0293f52d1006603d9f"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/json",
"Rev": "488889b0007f63ffee90b66a34a2deca9ec58774"
"Rev": "def12e63c512da17043b4f0293f52d1006603d9f"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/mergepatch",
"Rev": "488889b0007f63ffee90b66a34a2deca9ec58774"
"Rev": "def12e63c512da17043b4f0293f52d1006603d9f"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/net",
"Rev": "488889b0007f63ffee90b66a34a2deca9ec58774"
"Rev": "def12e63c512da17043b4f0293f52d1006603d9f"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/remotecommand",
"Rev": "488889b0007f63ffee90b66a34a2deca9ec58774"
"Rev": "def12e63c512da17043b4f0293f52d1006603d9f"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/runtime",
"Rev": "488889b0007f63ffee90b66a34a2deca9ec58774"
"Rev": "def12e63c512da17043b4f0293f52d1006603d9f"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/sets",
"Rev": "488889b0007f63ffee90b66a34a2deca9ec58774"
"Rev": "def12e63c512da17043b4f0293f52d1006603d9f"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/strategicpatch",
"Rev": "488889b0007f63ffee90b66a34a2deca9ec58774"
"Rev": "def12e63c512da17043b4f0293f52d1006603d9f"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/validation",
"Rev": "488889b0007f63ffee90b66a34a2deca9ec58774"
"Rev": "def12e63c512da17043b4f0293f52d1006603d9f"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/validation/field",
"Rev": "488889b0007f63ffee90b66a34a2deca9ec58774"
"Rev": "def12e63c512da17043b4f0293f52d1006603d9f"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/wait",
"Rev": "488889b0007f63ffee90b66a34a2deca9ec58774"
"Rev": "def12e63c512da17043b4f0293f52d1006603d9f"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/yaml",
"Rev": "488889b0007f63ffee90b66a34a2deca9ec58774"
"Rev": "def12e63c512da17043b4f0293f52d1006603d9f"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/version",
"Rev": "488889b0007f63ffee90b66a34a2deca9ec58774"
"Rev": "def12e63c512da17043b4f0293f52d1006603d9f"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/watch",
"Rev": "488889b0007f63ffee90b66a34a2deca9ec58774"
"Rev": "def12e63c512da17043b4f0293f52d1006603d9f"
},
{
"ImportPath": "k8s.io/apimachinery/third_party/forked/golang/json",
"Rev": "488889b0007f63ffee90b66a34a2deca9ec58774"
"Rev": "def12e63c512da17043b4f0293f52d1006603d9f"
},
{
"ImportPath": "k8s.io/apimachinery/third_party/forked/golang/netutil",
"Rev": "488889b0007f63ffee90b66a34a2deca9ec58774"
"Rev": "def12e63c512da17043b4f0293f52d1006603d9f"
},
{
"ImportPath": "k8s.io/apimachinery/third_party/forked/golang/reflect",
"Rev": "488889b0007f63ffee90b66a34a2deca9ec58774"
"Rev": "def12e63c512da17043b4f0293f52d1006603d9f"
},
{
"ImportPath": "k8s.io/kube-openapi/pkg/util/proto",

View File

@@ -33,6 +33,10 @@ import (
)
func NewSimpleDynamicClient(scheme *runtime.Scheme, objects ...runtime.Object) *FakeDynamicClient {
// In order to use List with this client, you have to have the v1.List registered in your scheme. Neat thing though
// it does NOT have to be the *same* list
scheme.AddKnownTypeWithName(schema.GroupVersionKind{Group: "fake-dynamic-client-group", Version: "v1", Kind: "List"}, &unstructured.UnstructuredList{})
codecs := serializer.NewCodecFactory(scheme)
o := testing.NewObjectTracker(scheme, codecs.UniversalDecoder())
for _, obj := range objects {
@@ -272,11 +276,11 @@ func (c *dynamicResourceClient) List(opts metav1.ListOptions) (*unstructured.Uns
switch {
case len(c.namespace) == 0:
obj, err = c.client.Fake.
Invokes(testing.NewRootListAction(c.resource, schema.GroupVersionKind{Version: "v1", Kind: "List"}, opts), &metav1.Status{Status: "dynamic list fail"})
Invokes(testing.NewRootListAction(c.resource, schema.GroupVersionKind{Group: "fake-dynamic-client-group", Version: "v1", Kind: "" /*List is appended by the tracker automatically*/}, opts), &metav1.Status{Status: "dynamic list fail"})
case len(c.namespace) > 0:
obj, err = c.client.Fake.
Invokes(testing.NewListAction(c.resource, schema.GroupVersionKind{Version: "v1", Kind: "List"}, c.namespace, opts), &metav1.Status{Status: "dynamic list fail"})
Invokes(testing.NewListAction(c.resource, schema.GroupVersionKind{Group: "fake-dynamic-client-group", Version: "v1", Kind: "" /*List is appended by the tracker automatically*/}, c.namespace, opts), &metav1.Status{Status: "dynamic list fail"})
}
@@ -299,13 +303,14 @@ func (c *dynamicResourceClient) List(opts metav1.ListOptions) (*unstructured.Uns
}
list := &unstructured.UnstructuredList{}
for _, item := range entireList.Items {
for i := range entireList.Items {
item := &entireList.Items[i]
metadata, err := meta.Accessor(item)
if err != nil {
return nil, err
}
if label.Matches(labels.Set(metadata.GetLabels())) {
list.Items = append(list.Items, item)
list.Items = append(list.Items, *item)
}
}
return list, nil

View File

@@ -0,0 +1,66 @@
/*
Copyright 2018 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package fake
import (
"testing"
"k8s.io/apimachinery/pkg/api/equality"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/util/diff"
)
func newUnstructured(apiVersion, kind, namespace, name string) *unstructured.Unstructured {
return &unstructured.Unstructured{
Object: map[string]interface{}{
"apiVersion": apiVersion,
"kind": kind,
"metadata": map[string]interface{}{
"namespace": namespace,
"name": name,
},
},
}
}
func TestList(t *testing.T) {
scheme := runtime.NewScheme()
client := NewSimpleDynamicClient(scheme,
newUnstructured("group/version", "TheKind", "ns-foo", "name-foo"),
newUnstructured("group2/version", "TheKind", "ns-foo", "name2-foo"),
newUnstructured("group/version", "TheKind", "ns-foo", "name-bar"),
newUnstructured("group/version", "TheKind", "ns-foo", "name-baz"),
newUnstructured("group2/version", "TheKind", "ns-foo", "name2-baz"),
)
listFirst, err := client.Resource(schema.GroupVersionResource{Group: "group", Version: "version", Resource: "thekinds"}).List(metav1.ListOptions{})
if err != nil {
t.Fatal(err)
}
expected := []unstructured.Unstructured{
*newUnstructured("group/version", "TheKind", "ns-foo", "name-foo"),
*newUnstructured("group/version", "TheKind", "ns-foo", "name-bar"),
*newUnstructured("group/version", "TheKind", "ns-foo", "name-baz"),
}
if !equality.Semantic.DeepEqual(listFirst.Items, expected) {
t.Fatal(diff.ObjectGoPrintDiff(expected, listFirst.Items))
}
}