2016-06-30 08:50:41 +00:00
|
|
|
/*
|
|
|
|
Copyright 2016 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 informers
|
|
|
|
|
|
|
|
import (
|
|
|
|
"reflect"
|
2016-09-15 20:27:47 +00:00
|
|
|
"time"
|
2016-06-30 08:50:41 +00:00
|
|
|
|
|
|
|
"k8s.io/kubernetes/pkg/api"
|
|
|
|
"k8s.io/kubernetes/pkg/client/cache"
|
2016-09-15 20:27:47 +00:00
|
|
|
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
|
|
|
|
"k8s.io/kubernetes/pkg/runtime"
|
|
|
|
"k8s.io/kubernetes/pkg/watch"
|
2016-06-30 08:50:41 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
// PodInformer is type of SharedIndexInformer which watches and lists all pods.
|
|
|
|
// Interface provides constructor for informer and lister for pods
|
|
|
|
type PodInformer interface {
|
2016-09-14 18:35:38 +00:00
|
|
|
Informer() cache.SharedIndexInformer
|
2016-06-30 08:50:41 +00:00
|
|
|
Lister() *cache.StoreToPodLister
|
|
|
|
}
|
|
|
|
|
|
|
|
type podInformer struct {
|
|
|
|
*sharedInformerFactory
|
|
|
|
}
|
|
|
|
|
|
|
|
// Informer checks whether podInformer exists in sharedInformerFactory and if not, it creates new informer of type
|
|
|
|
// podInformer and connects it to sharedInformerFactory
|
2016-09-14 18:35:38 +00:00
|
|
|
func (f *podInformer) Informer() cache.SharedIndexInformer {
|
2016-06-30 08:50:41 +00:00
|
|
|
f.lock.Lock()
|
|
|
|
defer f.lock.Unlock()
|
|
|
|
|
2016-08-04 07:02:13 +00:00
|
|
|
informerType := reflect.TypeOf(&api.Pod{})
|
2016-06-30 08:50:41 +00:00
|
|
|
informer, exists := f.informers[informerType]
|
|
|
|
if exists {
|
|
|
|
return informer
|
|
|
|
}
|
2016-08-04 07:02:13 +00:00
|
|
|
informer = NewPodInformer(f.client, f.defaultResync)
|
2016-06-30 08:50:41 +00:00
|
|
|
f.informers[informerType] = informer
|
|
|
|
|
|
|
|
return informer
|
|
|
|
}
|
|
|
|
|
|
|
|
// Lister returns lister for podInformer
|
|
|
|
func (f *podInformer) Lister() *cache.StoreToPodLister {
|
|
|
|
informer := f.Informer()
|
|
|
|
return &cache.StoreToPodLister{Indexer: informer.GetIndexer()}
|
|
|
|
}
|
|
|
|
|
|
|
|
//*****************************************************************************
|
|
|
|
|
|
|
|
// NamespaceInformer is type of SharedIndexInformer which watches and lists all namespaces.
|
|
|
|
// Interface provides constructor for informer and lister for namsespaces
|
|
|
|
type NamespaceInformer interface {
|
2016-09-14 18:35:38 +00:00
|
|
|
Informer() cache.SharedIndexInformer
|
2016-06-30 08:50:41 +00:00
|
|
|
Lister() *cache.IndexerToNamespaceLister
|
|
|
|
}
|
|
|
|
|
|
|
|
type namespaceInformer struct {
|
|
|
|
*sharedInformerFactory
|
|
|
|
}
|
|
|
|
|
|
|
|
// Informer checks whether namespaceInformer exists in sharedInformerFactory and if not, it creates new informer of type
|
|
|
|
// namespaceInformer and connects it to sharedInformerFactory
|
2016-09-14 18:35:38 +00:00
|
|
|
func (f *namespaceInformer) Informer() cache.SharedIndexInformer {
|
2016-06-30 08:50:41 +00:00
|
|
|
f.lock.Lock()
|
|
|
|
defer f.lock.Unlock()
|
2016-08-04 07:02:13 +00:00
|
|
|
|
|
|
|
informerType := reflect.TypeOf(&api.Namespace{})
|
2016-06-30 08:50:41 +00:00
|
|
|
informer, exists := f.informers[informerType]
|
|
|
|
if exists {
|
|
|
|
return informer
|
|
|
|
}
|
2016-08-04 07:02:13 +00:00
|
|
|
informer = NewNamespaceInformer(f.client, f.defaultResync)
|
2016-06-30 08:50:41 +00:00
|
|
|
f.informers[informerType] = informer
|
|
|
|
|
|
|
|
return informer
|
|
|
|
}
|
|
|
|
|
|
|
|
// Lister returns lister for namespaceInformer
|
|
|
|
func (f *namespaceInformer) Lister() *cache.IndexerToNamespaceLister {
|
|
|
|
informer := f.Informer()
|
|
|
|
return &cache.IndexerToNamespaceLister{Indexer: informer.GetIndexer()}
|
|
|
|
}
|
|
|
|
|
|
|
|
//*****************************************************************************
|
|
|
|
|
|
|
|
// NodeInformer is type of SharedIndexInformer which watches and lists all nodes.
|
|
|
|
// Interface provides constructor for informer and lister for nodes
|
|
|
|
type NodeInformer interface {
|
2016-09-14 18:35:38 +00:00
|
|
|
Informer() cache.SharedIndexInformer
|
2016-06-30 08:50:41 +00:00
|
|
|
Lister() *cache.StoreToNodeLister
|
|
|
|
}
|
|
|
|
|
|
|
|
type nodeInformer struct {
|
|
|
|
*sharedInformerFactory
|
|
|
|
}
|
|
|
|
|
|
|
|
// Informer checks whether nodeInformer exists in sharedInformerFactory and if not, it creates new informer of type
|
|
|
|
// nodeInformer and connects it to sharedInformerFactory
|
2016-09-14 18:35:38 +00:00
|
|
|
func (f *nodeInformer) Informer() cache.SharedIndexInformer {
|
2016-06-30 08:50:41 +00:00
|
|
|
f.lock.Lock()
|
|
|
|
defer f.lock.Unlock()
|
|
|
|
|
2016-08-04 07:02:13 +00:00
|
|
|
informerType := reflect.TypeOf(&api.Node{})
|
2016-06-30 08:50:41 +00:00
|
|
|
informer, exists := f.informers[informerType]
|
|
|
|
if exists {
|
|
|
|
return informer
|
|
|
|
}
|
2016-08-04 07:02:13 +00:00
|
|
|
informer = NewNodeInformer(f.client, f.defaultResync)
|
2016-06-30 08:50:41 +00:00
|
|
|
f.informers[informerType] = informer
|
|
|
|
|
|
|
|
return informer
|
|
|
|
}
|
|
|
|
|
|
|
|
// Lister returns lister for nodeInformer
|
|
|
|
func (f *nodeInformer) Lister() *cache.StoreToNodeLister {
|
|
|
|
informer := f.Informer()
|
|
|
|
return &cache.StoreToNodeLister{Store: informer.GetStore()}
|
|
|
|
}
|
|
|
|
|
|
|
|
//*****************************************************************************
|
|
|
|
|
|
|
|
// PVCInformer is type of SharedIndexInformer which watches and lists all persistent volume claims.
|
|
|
|
// Interface provides constructor for informer and lister for persistent volume claims
|
|
|
|
type PVCInformer interface {
|
2016-09-14 18:35:38 +00:00
|
|
|
Informer() cache.SharedIndexInformer
|
2016-06-30 08:50:41 +00:00
|
|
|
Lister() *cache.StoreToPVCFetcher
|
|
|
|
}
|
|
|
|
|
|
|
|
type pvcInformer struct {
|
|
|
|
*sharedInformerFactory
|
|
|
|
}
|
|
|
|
|
|
|
|
// Informer checks whether pvcInformer exists in sharedInformerFactory and if not, it creates new informer of type
|
|
|
|
// pvcInformer and connects it to sharedInformerFactory
|
2016-09-14 18:35:38 +00:00
|
|
|
func (f *pvcInformer) Informer() cache.SharedIndexInformer {
|
2016-06-30 08:50:41 +00:00
|
|
|
f.lock.Lock()
|
|
|
|
defer f.lock.Unlock()
|
|
|
|
|
2016-08-04 07:02:13 +00:00
|
|
|
informerType := reflect.TypeOf(&api.PersistentVolumeClaim{})
|
2016-06-30 08:50:41 +00:00
|
|
|
informer, exists := f.informers[informerType]
|
|
|
|
if exists {
|
|
|
|
return informer
|
|
|
|
}
|
2016-08-04 07:02:13 +00:00
|
|
|
informer = NewPVCInformer(f.client, f.defaultResync)
|
2016-06-30 08:50:41 +00:00
|
|
|
f.informers[informerType] = informer
|
|
|
|
|
|
|
|
return informer
|
|
|
|
}
|
|
|
|
|
|
|
|
// Lister returns lister for pvcInformer
|
|
|
|
func (f *pvcInformer) Lister() *cache.StoreToPVCFetcher {
|
|
|
|
informer := f.Informer()
|
|
|
|
return &cache.StoreToPVCFetcher{Store: informer.GetStore()}
|
|
|
|
}
|
|
|
|
|
|
|
|
//*****************************************************************************
|
|
|
|
|
|
|
|
// PVInformer is type of SharedIndexInformer which watches and lists all persistent volumes.
|
|
|
|
// Interface provides constructor for informer and lister for persistent volumes
|
|
|
|
type PVInformer interface {
|
2016-09-14 18:35:38 +00:00
|
|
|
Informer() cache.SharedIndexInformer
|
2016-06-30 08:50:41 +00:00
|
|
|
Lister() *cache.StoreToPVFetcher
|
|
|
|
}
|
|
|
|
|
|
|
|
type pvInformer struct {
|
|
|
|
*sharedInformerFactory
|
|
|
|
}
|
|
|
|
|
|
|
|
// Informer checks whether pvInformer exists in sharedInformerFactory and if not, it creates new informer of type
|
|
|
|
// pvInformer and connects it to sharedInformerFactory
|
2016-09-14 18:35:38 +00:00
|
|
|
func (f *pvInformer) Informer() cache.SharedIndexInformer {
|
2016-06-30 08:50:41 +00:00
|
|
|
f.lock.Lock()
|
|
|
|
defer f.lock.Unlock()
|
|
|
|
|
2016-08-04 07:02:13 +00:00
|
|
|
informerType := reflect.TypeOf(&api.PersistentVolume{})
|
2016-06-30 08:50:41 +00:00
|
|
|
informer, exists := f.informers[informerType]
|
|
|
|
if exists {
|
|
|
|
return informer
|
|
|
|
}
|
2016-08-04 07:02:13 +00:00
|
|
|
informer = NewPVInformer(f.client, f.defaultResync)
|
2016-06-30 08:50:41 +00:00
|
|
|
f.informers[informerType] = informer
|
|
|
|
|
|
|
|
return informer
|
|
|
|
}
|
|
|
|
|
|
|
|
// Lister returns lister for pvInformer
|
|
|
|
func (f *pvInformer) Lister() *cache.StoreToPVFetcher {
|
|
|
|
informer := f.Informer()
|
|
|
|
return &cache.StoreToPVFetcher{Store: informer.GetStore()}
|
|
|
|
}
|
2016-09-15 20:27:47 +00:00
|
|
|
|
|
|
|
// NewPodInformer returns a SharedIndexInformer that lists and watches all pods
|
|
|
|
func NewPodInformer(client clientset.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
|
|
|
|
sharedIndexInformer := cache.NewSharedIndexInformer(
|
|
|
|
&cache.ListWatch{
|
|
|
|
ListFunc: func(options api.ListOptions) (runtime.Object, error) {
|
|
|
|
return client.Core().Pods(api.NamespaceAll).List(options)
|
|
|
|
},
|
|
|
|
WatchFunc: func(options api.ListOptions) (watch.Interface, error) {
|
|
|
|
return client.Core().Pods(api.NamespaceAll).Watch(options)
|
|
|
|
},
|
|
|
|
},
|
|
|
|
&api.Pod{},
|
|
|
|
resyncPeriod,
|
|
|
|
cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc},
|
|
|
|
)
|
|
|
|
|
|
|
|
return sharedIndexInformer
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewNodeInformer returns a SharedIndexInformer that lists and watches all nodes
|
|
|
|
func NewNodeInformer(client clientset.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
|
|
|
|
sharedIndexInformer := cache.NewSharedIndexInformer(
|
|
|
|
&cache.ListWatch{
|
|
|
|
ListFunc: func(options api.ListOptions) (runtime.Object, error) {
|
|
|
|
return client.Core().Nodes().List(options)
|
|
|
|
},
|
|
|
|
WatchFunc: func(options api.ListOptions) (watch.Interface, error) {
|
|
|
|
return client.Core().Nodes().Watch(options)
|
|
|
|
},
|
|
|
|
},
|
|
|
|
&api.Node{},
|
|
|
|
resyncPeriod,
|
|
|
|
cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc})
|
|
|
|
|
|
|
|
return sharedIndexInformer
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewPVCInformer returns a SharedIndexInformer that lists and watches all PVCs
|
|
|
|
func NewPVCInformer(client clientset.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
|
|
|
|
sharedIndexInformer := cache.NewSharedIndexInformer(
|
|
|
|
&cache.ListWatch{
|
|
|
|
ListFunc: func(options api.ListOptions) (runtime.Object, error) {
|
|
|
|
return client.Core().PersistentVolumeClaims(api.NamespaceAll).List(options)
|
|
|
|
},
|
|
|
|
WatchFunc: func(options api.ListOptions) (watch.Interface, error) {
|
|
|
|
return client.Core().PersistentVolumeClaims(api.NamespaceAll).Watch(options)
|
|
|
|
},
|
|
|
|
},
|
|
|
|
&api.PersistentVolumeClaim{},
|
|
|
|
resyncPeriod,
|
|
|
|
cache.Indexers{})
|
|
|
|
|
|
|
|
return sharedIndexInformer
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewPVInformer returns a SharedIndexInformer that lists and watches all PVs
|
|
|
|
func NewPVInformer(client clientset.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
|
|
|
|
sharedIndexInformer := cache.NewSharedIndexInformer(
|
|
|
|
&cache.ListWatch{
|
|
|
|
ListFunc: func(options api.ListOptions) (runtime.Object, error) {
|
|
|
|
return client.Core().PersistentVolumes().List(options)
|
|
|
|
},
|
|
|
|
WatchFunc: func(options api.ListOptions) (watch.Interface, error) {
|
|
|
|
return client.Core().PersistentVolumes().Watch(options)
|
|
|
|
},
|
|
|
|
},
|
|
|
|
&api.PersistentVolume{},
|
|
|
|
resyncPeriod,
|
|
|
|
cache.Indexers{})
|
|
|
|
|
|
|
|
return sharedIndexInformer
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewNamespaceInformer returns a SharedIndexInformer that lists and watches namespaces
|
|
|
|
func NewNamespaceInformer(client clientset.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
|
|
|
|
sharedIndexInformer := cache.NewSharedIndexInformer(
|
|
|
|
&cache.ListWatch{
|
|
|
|
ListFunc: func(options api.ListOptions) (runtime.Object, error) {
|
|
|
|
return client.Core().Namespaces().List(options)
|
|
|
|
},
|
|
|
|
WatchFunc: func(options api.ListOptions) (watch.Interface, error) {
|
|
|
|
return client.Core().Namespaces().Watch(options)
|
|
|
|
},
|
|
|
|
},
|
|
|
|
&api.Namespace{},
|
|
|
|
resyncPeriod,
|
|
|
|
cache.Indexers{})
|
|
|
|
|
|
|
|
return sharedIndexInformer
|
|
|
|
}
|