mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-27 13:37:30 +00:00
Add an informer for StorageClass
This commit is contained in:
parent
10a0d2a468
commit
39da9d19f0
39
pkg/client/cache/listers.go
vendored
39
pkg/client/cache/listers.go
vendored
@ -21,6 +21,7 @@ import (
|
|||||||
|
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
|
"k8s.io/kubernetes/pkg/api/errors"
|
||||||
"k8s.io/kubernetes/pkg/api/meta"
|
"k8s.io/kubernetes/pkg/api/meta"
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
"k8s.io/kubernetes/pkg/apis/apps"
|
"k8s.io/kubernetes/pkg/apis/apps"
|
||||||
@ -28,6 +29,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/apis/certificates"
|
"k8s.io/kubernetes/pkg/apis/certificates"
|
||||||
"k8s.io/kubernetes/pkg/apis/extensions"
|
"k8s.io/kubernetes/pkg/apis/extensions"
|
||||||
"k8s.io/kubernetes/pkg/apis/policy"
|
"k8s.io/kubernetes/pkg/apis/policy"
|
||||||
|
"k8s.io/kubernetes/pkg/apis/storage"
|
||||||
"k8s.io/kubernetes/pkg/labels"
|
"k8s.io/kubernetes/pkg/labels"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -450,3 +452,40 @@ func (s *StoreToPodDisruptionBudgetLister) GetPodPodDisruptionBudgets(pod *api.P
|
|||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// StorageClassLister knows how to list storage classes
|
||||||
|
type StorageClassLister interface {
|
||||||
|
List(selector labels.Selector) (ret []*storage.StorageClass, err error)
|
||||||
|
Get(name string) (*storage.StorageClass, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
// storageClassLister implements StorageClassLister
|
||||||
|
type storageClassLister struct {
|
||||||
|
indexer Indexer
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewStorageClassLister returns a new lister.
|
||||||
|
func NewStorageClassLister(indexer Indexer) StorageClassLister {
|
||||||
|
return &storageClassLister{indexer: indexer}
|
||||||
|
}
|
||||||
|
|
||||||
|
// List returns a list of storage classes
|
||||||
|
func (s *storageClassLister) List(selector labels.Selector) (ret []*storage.StorageClass, err error) {
|
||||||
|
err = ListAll(s.indexer, selector, func(m interface{}) {
|
||||||
|
ret = append(ret, m.(*storage.StorageClass))
|
||||||
|
})
|
||||||
|
return ret, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// List returns a list of storage classes
|
||||||
|
func (s *storageClassLister) Get(name string) (*storage.StorageClass, error) {
|
||||||
|
key := &storage.StorageClass{ObjectMeta: api.ObjectMeta{Name: name}}
|
||||||
|
obj, exists, err := s.indexer.Get(key)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if !exists {
|
||||||
|
return nil, errors.NewNotFound(storage.Resource("storageclass"), name)
|
||||||
|
}
|
||||||
|
return obj.(*storage.StorageClass), nil
|
||||||
|
}
|
||||||
|
@ -48,6 +48,8 @@ type SharedInformerFactory interface {
|
|||||||
RoleBindings() RoleBindingInformer
|
RoleBindings() RoleBindingInformer
|
||||||
|
|
||||||
LimitRanges() LimitRangeInformer
|
LimitRanges() LimitRangeInformer
|
||||||
|
|
||||||
|
StorageClasses() StorageClassInformer
|
||||||
}
|
}
|
||||||
|
|
||||||
type sharedInformerFactory struct {
|
type sharedInformerFactory struct {
|
||||||
@ -72,14 +74,14 @@ func NewSharedInformerFactory(client clientset.Interface, defaultResync time.Dur
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Start initializes all requested informers.
|
// Start initializes all requested informers.
|
||||||
func (s *sharedInformerFactory) Start(stopCh <-chan struct{}) {
|
func (f *sharedInformerFactory) Start(stopCh <-chan struct{}) {
|
||||||
s.lock.Lock()
|
f.lock.Lock()
|
||||||
defer s.lock.Unlock()
|
defer f.lock.Unlock()
|
||||||
|
|
||||||
for informerType, informer := range s.informers {
|
for informerType, informer := range f.informers {
|
||||||
if !s.startedInformers[informerType] {
|
if !f.startedInformers[informerType] {
|
||||||
go informer.Run(stopCh)
|
go informer.Run(stopCh)
|
||||||
s.startedInformers[informerType] = true
|
f.startedInformers[informerType] = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -147,3 +149,8 @@ func (f *sharedInformerFactory) RoleBindings() RoleBindingInformer {
|
|||||||
func (f *sharedInformerFactory) LimitRanges() LimitRangeInformer {
|
func (f *sharedInformerFactory) LimitRanges() LimitRangeInformer {
|
||||||
return &limitRangeInformer{sharedInformerFactory: f}
|
return &limitRangeInformer{sharedInformerFactory: f}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// StorageClasses returns a SharedIndexInformer that lists and watches all storage classes
|
||||||
|
func (f *sharedInformerFactory) StorageClasses() StorageClassInformer {
|
||||||
|
return &storageClassInformer{sharedInformerFactory: f}
|
||||||
|
}
|
||||||
|
70
pkg/controller/informers/storage.go
Normal file
70
pkg/controller/informers/storage.go
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
/*
|
||||||
|
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"
|
||||||
|
|
||||||
|
"k8s.io/kubernetes/pkg/api"
|
||||||
|
"k8s.io/kubernetes/pkg/apis/storage"
|
||||||
|
"k8s.io/kubernetes/pkg/client/cache"
|
||||||
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
|
"k8s.io/kubernetes/pkg/watch"
|
||||||
|
)
|
||||||
|
|
||||||
|
// StorageClassInformer is type of SharedIndexInformer which watches and lists all storage classes.
|
||||||
|
// Interface provides constructor for informer and lister for storage classes
|
||||||
|
type StorageClassInformer interface {
|
||||||
|
Informer() cache.SharedIndexInformer
|
||||||
|
Lister() cache.StorageClassLister
|
||||||
|
}
|
||||||
|
|
||||||
|
type storageClassInformer struct {
|
||||||
|
*sharedInformerFactory
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *storageClassInformer) Informer() cache.SharedIndexInformer {
|
||||||
|
f.lock.Lock()
|
||||||
|
defer f.lock.Unlock()
|
||||||
|
|
||||||
|
informerType := reflect.TypeOf(&storage.StorageClass{})
|
||||||
|
informer, exists := f.informers[informerType]
|
||||||
|
if exists {
|
||||||
|
return informer
|
||||||
|
}
|
||||||
|
informer = cache.NewSharedIndexInformer(
|
||||||
|
&cache.ListWatch{
|
||||||
|
ListFunc: func(options api.ListOptions) (runtime.Object, error) {
|
||||||
|
return f.client.Storage().StorageClasses().List(options)
|
||||||
|
},
|
||||||
|
WatchFunc: func(options api.ListOptions) (watch.Interface, error) {
|
||||||
|
return f.client.Storage().StorageClasses().Watch(options)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
&storage.StorageClass{},
|
||||||
|
f.defaultResync,
|
||||||
|
cache.Indexers{},
|
||||||
|
)
|
||||||
|
f.informers[informerType] = informer
|
||||||
|
|
||||||
|
return informer
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *storageClassInformer) Lister() cache.StorageClassLister {
|
||||||
|
informer := f.Informer()
|
||||||
|
return cache.NewStorageClassLister(informer.GetIndexer())
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user