| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259 |
- // Copyright 2026 the Kilo 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"
- versioned "github.com/squat/kilo/pkg/k8s/clientset/versioned"
- internalinterfaces "github.com/squat/kilo/pkg/k8s/informers/internalinterfaces"
- kilo "github.com/squat/kilo/pkg/k8s/informers/kilo"
- v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
- runtime "k8s.io/apimachinery/pkg/runtime"
- schema "k8s.io/apimachinery/pkg/runtime/schema"
- cache "k8s.io/client-go/tools/cache"
- )
- // SharedInformerOption defines the functional option type for SharedInformerFactory.
- type SharedInformerOption func(*sharedInformerFactory) *sharedInformerFactory
- type sharedInformerFactory struct {
- client versioned.Interface
- namespace string
- tweakListOptions internalinterfaces.TweakListOptionsFunc
- lock sync.Mutex
- defaultResync time.Duration
- customResync map[reflect.Type]time.Duration
- transform cache.TransformFunc
- 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
- }
- }
- // WithTransform sets a transform on all informers.
- func WithTransform(transform cache.TransformFunc) SharedInformerOption {
- return func(factory *sharedInformerFactory) *sharedInformerFactory {
- factory.transform = transform
- return factory
- }
- }
- // NewSharedInformerFactory constructs a new instance of sharedInformerFactory for all namespaces.
- func NewSharedInformerFactory(client versioned.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 versioned.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 versioned.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)
- informer.SetTransform(f.transform)
- 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
- Kilo() kilo.Interface
- }
- func (f *sharedInformerFactory) Kilo() kilo.Interface {
- return kilo.New(f, f.namespace, f.tweakListOptions)
- }
|