From 0892273a33e6dd514d51e1a648d86e4f8ee7cfa2 Mon Sep 17 00:00:00 2001 From: Ihar Hrachyshka Date: Wed, 14 Nov 2018 15:22:48 -0800 Subject: [PATCH] Expose object tracker for fake clientsets Not every object kind can be registered via tracker .Add() called as part of SimpleClientset initialization. This is because .Add() relies on UnsafeGuessKindToResource to convert object kinds into resource type names, which is broken for some resources. An example of an affected kind is NetworkAttachmentDefinitions CRD that uses network-attachment-definitions as its resource type name. When UnsafeGuessKindToResource is called for this kind, it returns networkattachmentdefinitions (without dashes). As per the comment inside .Add, kinds affected by UnsafeGuessKindToResource deficiencies should instead register objects using tracker .Create() method. Problem is, current SimpleClientset struct definition doesn't expose the object tracker in any way, which makes it impossible to properly register these kinds at all. To address the issue, this change modifies the definition of SimpleClientset struct to expose the object tracker used via Tracker() method. Kubernetes-commit: d68cd8a0c7e6137ca4219078a3d651ecff03c21f --- kubernetes/fake/clientset_generated.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/kubernetes/fake/clientset_generated.go b/kubernetes/fake/clientset_generated.go index f4ac2b8b..0c73d00a 100644 --- a/kubernetes/fake/clientset_generated.go +++ b/kubernetes/fake/clientset_generated.go @@ -111,7 +111,7 @@ func NewSimpleClientset(objects ...runtime.Object) *Clientset { } } - cs := &Clientset{} + cs := &Clientset{tracker: o} cs.discovery = &fakediscovery.FakeDiscovery{Fake: &cs.Fake} cs.AddReactor("*", "*", testing.ObjectReaction(o)) cs.AddWatchReactor("*", func(action testing.Action) (handled bool, ret watch.Interface, err error) { @@ -133,12 +133,17 @@ func NewSimpleClientset(objects ...runtime.Object) *Clientset { type Clientset struct { testing.Fake discovery *fakediscovery.FakeDiscovery + tracker testing.ObjectTracker } func (c *Clientset) Discovery() discovery.DiscoveryInterface { return c.discovery } +func (c *Clientset) Tracker() testing.ObjectTracker { + return c.tracker +} + var _ clientset.Interface = &Clientset{} // AdmissionregistrationV1beta1 retrieves the AdmissionregistrationV1beta1Client