123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359 |
- /*
- 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 informer-gen. DO NOT EDIT.
- package informers
- import (
- reflect "reflect"
- sync "sync"
- time "time"
- v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
- runtime "k8s.io/apimachinery/pkg/runtime"
- schema "k8s.io/apimachinery/pkg/runtime/schema"
- admissionregistration "k8s.io/client-go/informers/admissionregistration"
- apiserverinternal "k8s.io/client-go/informers/apiserverinternal"
- apps "k8s.io/client-go/informers/apps"
- autoscaling "k8s.io/client-go/informers/autoscaling"
- batch "k8s.io/client-go/informers/batch"
- certificates "k8s.io/client-go/informers/certificates"
- coordination "k8s.io/client-go/informers/coordination"
- core "k8s.io/client-go/informers/core"
- discovery "k8s.io/client-go/informers/discovery"
- events "k8s.io/client-go/informers/events"
- extensions "k8s.io/client-go/informers/extensions"
- flowcontrol "k8s.io/client-go/informers/flowcontrol"
- internalinterfaces "k8s.io/client-go/informers/internalinterfaces"
- networking "k8s.io/client-go/informers/networking"
- node "k8s.io/client-go/informers/node"
- policy "k8s.io/client-go/informers/policy"
- rbac "k8s.io/client-go/informers/rbac"
- resource "k8s.io/client-go/informers/resource"
- scheduling "k8s.io/client-go/informers/scheduling"
- storage "k8s.io/client-go/informers/storage"
- kubernetes "k8s.io/client-go/kubernetes"
- cache "k8s.io/client-go/tools/cache"
- )
- // SharedInformerOption defines the functional option type for SharedInformerFactory.
- type SharedInformerOption func(*sharedInformerFactory) *sharedInformerFactory
- type sharedInformerFactory struct {
- client kubernetes.Interface
- namespace string
- tweakListOptions internalinterfaces.TweakListOptionsFunc
- lock sync.Mutex
- defaultResync time.Duration
- customResync map[reflect.Type]time.Duration
- informers map[reflect.Type]cache.SharedIndexInformer
- // startedInformers is used for tracking which informers have been started.
- // This allows Start() to be called multiple times safely.
- startedInformers map[reflect.Type]bool
- // wg tracks how many goroutines were started.
- wg sync.WaitGroup
- // shuttingDown is true when Shutdown has been called. It may still be running
- // because it needs to wait for goroutines.
- shuttingDown bool
- }
- // WithCustomResyncConfig sets a custom resync period for the specified informer types.
- func WithCustomResyncConfig(resyncConfig map[v1.Object]time.Duration) SharedInformerOption {
- return func(factory *sharedInformerFactory) *sharedInformerFactory {
- for k, v := range resyncConfig {
- factory.customResync[reflect.TypeOf(k)] = v
- }
- return factory
- }
- }
- // WithTweakListOptions sets a custom filter on all listers of the configured SharedInformerFactory.
- func WithTweakListOptions(tweakListOptions internalinterfaces.TweakListOptionsFunc) SharedInformerOption {
- return func(factory *sharedInformerFactory) *sharedInformerFactory {
- factory.tweakListOptions = tweakListOptions
- return factory
- }
- }
- // WithNamespace limits the SharedInformerFactory to the specified namespace.
- func WithNamespace(namespace string) SharedInformerOption {
- return func(factory *sharedInformerFactory) *sharedInformerFactory {
- factory.namespace = namespace
- return factory
- }
- }
- // NewSharedInformerFactory constructs a new instance of sharedInformerFactory for all namespaces.
- func NewSharedInformerFactory(client kubernetes.Interface, defaultResync time.Duration) SharedInformerFactory {
- return NewSharedInformerFactoryWithOptions(client, defaultResync)
- }
- // NewFilteredSharedInformerFactory constructs a new instance of sharedInformerFactory.
- // Listers obtained via this SharedInformerFactory will be subject to the same filters
- // as specified here.
- // Deprecated: Please use NewSharedInformerFactoryWithOptions instead
- func NewFilteredSharedInformerFactory(client kubernetes.Interface, defaultResync time.Duration, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) SharedInformerFactory {
- return NewSharedInformerFactoryWithOptions(client, defaultResync, WithNamespace(namespace), WithTweakListOptions(tweakListOptions))
- }
- // NewSharedInformerFactoryWithOptions constructs a new instance of a SharedInformerFactory with additional options.
- func NewSharedInformerFactoryWithOptions(client kubernetes.Interface, defaultResync time.Duration, options ...SharedInformerOption) SharedInformerFactory {
- factory := &sharedInformerFactory{
- client: client,
- namespace: v1.NamespaceAll,
- defaultResync: defaultResync,
- informers: make(map[reflect.Type]cache.SharedIndexInformer),
- startedInformers: make(map[reflect.Type]bool),
- customResync: make(map[reflect.Type]time.Duration),
- }
- // Apply all options
- for _, opt := range options {
- factory = opt(factory)
- }
- return factory
- }
- func (f *sharedInformerFactory) Start(stopCh <-chan struct{}) {
- f.lock.Lock()
- defer f.lock.Unlock()
- if f.shuttingDown {
- return
- }
- for informerType, informer := range f.informers {
- if !f.startedInformers[informerType] {
- f.wg.Add(1)
- // We need a new variable in each loop iteration,
- // otherwise the goroutine would use the loop variable
- // and that keeps changing.
- informer := informer
- go func() {
- defer f.wg.Done()
- informer.Run(stopCh)
- }()
- f.startedInformers[informerType] = true
- }
- }
- }
- func (f *sharedInformerFactory) Shutdown() {
- f.lock.Lock()
- f.shuttingDown = true
- f.lock.Unlock()
- // Will return immediately if there is nothing to wait for.
- f.wg.Wait()
- }
- func (f *sharedInformerFactory) WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool {
- informers := func() map[reflect.Type]cache.SharedIndexInformer {
- f.lock.Lock()
- defer f.lock.Unlock()
- informers := map[reflect.Type]cache.SharedIndexInformer{}
- for informerType, informer := range f.informers {
- if f.startedInformers[informerType] {
- informers[informerType] = informer
- }
- }
- return informers
- }()
- res := map[reflect.Type]bool{}
- for informType, informer := range informers {
- res[informType] = cache.WaitForCacheSync(stopCh, informer.HasSynced)
- }
- return res
- }
- // InformerFor returns the SharedIndexInformer for obj using an internal
- // client.
- func (f *sharedInformerFactory) InformerFor(obj runtime.Object, newFunc internalinterfaces.NewInformerFunc) cache.SharedIndexInformer {
- f.lock.Lock()
- defer f.lock.Unlock()
- informerType := reflect.TypeOf(obj)
- informer, exists := f.informers[informerType]
- if exists {
- return informer
- }
- resyncPeriod, exists := f.customResync[informerType]
- if !exists {
- resyncPeriod = f.defaultResync
- }
- informer = newFunc(f.client, resyncPeriod)
- f.informers[informerType] = informer
- return informer
- }
- // SharedInformerFactory provides shared informers for resources in all known
- // API group versions.
- //
- // It is typically used like this:
- //
- // ctx, cancel := context.Background()
- // defer cancel()
- // factory := NewSharedInformerFactory(client, resyncPeriod)
- // defer factory.WaitForStop() // Returns immediately if nothing was started.
- // genericInformer := factory.ForResource(resource)
- // typedInformer := factory.SomeAPIGroup().V1().SomeType()
- // factory.Start(ctx.Done()) // Start processing these informers.
- // synced := factory.WaitForCacheSync(ctx.Done())
- // for v, ok := range synced {
- // if !ok {
- // fmt.Fprintf(os.Stderr, "caches failed to sync: %v", v)
- // return
- // }
- // }
- //
- // // Creating informers can also be created after Start, but then
- // // Start must be called again:
- // anotherGenericInformer := factory.ForResource(resource)
- // factory.Start(ctx.Done())
- type SharedInformerFactory interface {
- internalinterfaces.SharedInformerFactory
- // Start initializes all requested informers. They are handled in goroutines
- // which run until the stop channel gets closed.
- Start(stopCh <-chan struct{})
- // Shutdown marks a factory as shutting down. At that point no new
- // informers can be started anymore and Start will return without
- // doing anything.
- //
- // In addition, Shutdown blocks until all goroutines have terminated. For that
- // to happen, the close channel(s) that they were started with must be closed,
- // either before Shutdown gets called or while it is waiting.
- //
- // Shutdown may be called multiple times, even concurrently. All such calls will
- // block until all goroutines have terminated.
- Shutdown()
- // WaitForCacheSync blocks until all started informers' caches were synced
- // or the stop channel gets closed.
- WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool
- // ForResource gives generic access to a shared informer of the matching type.
- ForResource(resource schema.GroupVersionResource) (GenericInformer, error)
- // InformerFor returns the SharedIndexInformer for obj using an internal
- // client.
- InformerFor(obj runtime.Object, newFunc internalinterfaces.NewInformerFunc) cache.SharedIndexInformer
- Admissionregistration() admissionregistration.Interface
- Internal() apiserverinternal.Interface
- Apps() apps.Interface
- Autoscaling() autoscaling.Interface
- Batch() batch.Interface
- Certificates() certificates.Interface
- Coordination() coordination.Interface
- Core() core.Interface
- Discovery() discovery.Interface
- Events() events.Interface
- Extensions() extensions.Interface
- Flowcontrol() flowcontrol.Interface
- Networking() networking.Interface
- Node() node.Interface
- Policy() policy.Interface
- Rbac() rbac.Interface
- Resource() resource.Interface
- Scheduling() scheduling.Interface
- Storage() storage.Interface
- }
- func (f *sharedInformerFactory) Admissionregistration() admissionregistration.Interface {
- return admissionregistration.New(f, f.namespace, f.tweakListOptions)
- }
- func (f *sharedInformerFactory) Internal() apiserverinternal.Interface {
- return apiserverinternal.New(f, f.namespace, f.tweakListOptions)
- }
- func (f *sharedInformerFactory) Apps() apps.Interface {
- return apps.New(f, f.namespace, f.tweakListOptions)
- }
- func (f *sharedInformerFactory) Autoscaling() autoscaling.Interface {
- return autoscaling.New(f, f.namespace, f.tweakListOptions)
- }
- func (f *sharedInformerFactory) Batch() batch.Interface {
- return batch.New(f, f.namespace, f.tweakListOptions)
- }
- func (f *sharedInformerFactory) Certificates() certificates.Interface {
- return certificates.New(f, f.namespace, f.tweakListOptions)
- }
- func (f *sharedInformerFactory) Coordination() coordination.Interface {
- return coordination.New(f, f.namespace, f.tweakListOptions)
- }
- func (f *sharedInformerFactory) Core() core.Interface {
- return core.New(f, f.namespace, f.tweakListOptions)
- }
- func (f *sharedInformerFactory) Discovery() discovery.Interface {
- return discovery.New(f, f.namespace, f.tweakListOptions)
- }
- func (f *sharedInformerFactory) Events() events.Interface {
- return events.New(f, f.namespace, f.tweakListOptions)
- }
- func (f *sharedInformerFactory) Extensions() extensions.Interface {
- return extensions.New(f, f.namespace, f.tweakListOptions)
- }
- func (f *sharedInformerFactory) Flowcontrol() flowcontrol.Interface {
- return flowcontrol.New(f, f.namespace, f.tweakListOptions)
- }
- func (f *sharedInformerFactory) Networking() networking.Interface {
- return networking.New(f, f.namespace, f.tweakListOptions)
- }
- func (f *sharedInformerFactory) Node() node.Interface {
- return node.New(f, f.namespace, f.tweakListOptions)
- }
- func (f *sharedInformerFactory) Policy() policy.Interface {
- return policy.New(f, f.namespace, f.tweakListOptions)
- }
- func (f *sharedInformerFactory) Rbac() rbac.Interface {
- return rbac.New(f, f.namespace, f.tweakListOptions)
- }
- func (f *sharedInformerFactory) Resource() resource.Interface {
- return resource.New(f, f.namespace, f.tweakListOptions)
- }
- func (f *sharedInformerFactory) Scheduling() scheduling.Interface {
- return scheduling.New(f, f.namespace, f.tweakListOptions)
- }
- func (f *sharedInformerFactory) Storage() storage.Interface {
- return storage.New(f, f.namespace, f.tweakListOptions)
- }
|