mirror of
https://github.com/kubernetes/sample-controller.git
synced 2025-02-08 06:52:56 +08:00
![Ihar Hrachyshka](/assets/img/avatar_default.png)
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
83 lines
2.8 KiB
Go
83 lines
2.8 KiB
Go
/*
|
|
Copyright 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.
|
|
*/
|
|
|
|
// Code generated by client-gen. DO NOT EDIT.
|
|
|
|
package fake
|
|
|
|
import (
|
|
"k8s.io/apimachinery/pkg/runtime"
|
|
"k8s.io/apimachinery/pkg/watch"
|
|
"k8s.io/client-go/discovery"
|
|
fakediscovery "k8s.io/client-go/discovery/fake"
|
|
"k8s.io/client-go/testing"
|
|
clientset "k8s.io/sample-controller/pkg/generated/clientset/versioned"
|
|
samplecontrollerv1alpha1 "k8s.io/sample-controller/pkg/generated/clientset/versioned/typed/samplecontroller/v1alpha1"
|
|
fakesamplecontrollerv1alpha1 "k8s.io/sample-controller/pkg/generated/clientset/versioned/typed/samplecontroller/v1alpha1/fake"
|
|
)
|
|
|
|
// NewSimpleClientset returns a clientset that will respond with the provided objects.
|
|
// It's backed by a very simple object tracker that processes creates, updates and deletions as-is,
|
|
// without applying any validations and/or defaults. It shouldn't be considered a replacement
|
|
// for a real clientset and is mostly useful in simple unit tests.
|
|
func NewSimpleClientset(objects ...runtime.Object) *Clientset {
|
|
o := testing.NewObjectTracker(scheme, codecs.UniversalDecoder())
|
|
for _, obj := range objects {
|
|
if err := o.Add(obj); err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
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) {
|
|
gvr := action.GetResource()
|
|
ns := action.GetNamespace()
|
|
watch, err := o.Watch(gvr, ns)
|
|
if err != nil {
|
|
return false, nil, err
|
|
}
|
|
return true, watch, nil
|
|
})
|
|
|
|
return cs
|
|
}
|
|
|
|
// Clientset implements clientset.Interface. Meant to be embedded into a
|
|
// struct to get a default implementation. This makes faking out just the method
|
|
// you want to test easier.
|
|
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{}
|
|
|
|
// SamplecontrollerV1alpha1 retrieves the SamplecontrollerV1alpha1Client
|
|
func (c *Clientset) SamplecontrollerV1alpha1() samplecontrollerv1alpha1.SamplecontrollerV1alpha1Interface {
|
|
return &fakesamplecontrollerv1alpha1.FakeSamplecontrollerV1alpha1{Fake: &c.Fake}
|
|
}
|