diff --git a/pkg/generated/clientset/versioned/clientset.go b/pkg/generated/clientset/versioned/clientset.go index 3748f19376..6877765686 100644 --- a/pkg/generated/clientset/versioned/clientset.go +++ b/pkg/generated/clientset/versioned/clientset.go @@ -19,7 +19,6 @@ limitations under the License. package versioned import ( - glog "github.com/golang/glog" arkv1 "github.com/heptio/ark/pkg/generated/clientset/versioned/typed/ark/v1" discovery "k8s.io/client-go/discovery" rest "k8s.io/client-go/rest" @@ -74,7 +73,6 @@ func NewForConfig(c *rest.Config) (*Clientset, error) { cs.DiscoveryClient, err = discovery.NewDiscoveryClientForConfig(&configShallowCopy) if err != nil { - glog.Errorf("failed to create the DiscoveryClient: %v", err) return nil, err } return &cs, nil diff --git a/pkg/generated/clientset/versioned/fake/clientset_generated.go b/pkg/generated/clientset/versioned/fake/clientset_generated.go index b4c0d11b4e..15542b1559 100644 --- a/pkg/generated/clientset/versioned/fake/clientset_generated.go +++ b/pkg/generated/clientset/versioned/fake/clientset_generated.go @@ -41,9 +41,10 @@ func NewSimpleClientset(objects ...runtime.Object) *Clientset { } } - fakePtr := testing.Fake{} - fakePtr.AddReactor("*", "*", testing.ObjectReaction(o)) - fakePtr.AddWatchReactor("*", func(action testing.Action) (handled bool, ret watch.Interface, err error) { + cs := &Clientset{} + 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) @@ -53,7 +54,7 @@ func NewSimpleClientset(objects ...runtime.Object) *Clientset { return true, watch, nil }) - return &Clientset{fakePtr, &fakediscovery.FakeDiscovery{Fake: &fakePtr}} + return cs } // Clientset implements clientset.Interface. Meant to be embedded into a diff --git a/pkg/generated/clientset/versioned/typed/ark/v1/fake/fake_backup.go b/pkg/generated/clientset/versioned/typed/ark/v1/fake/fake_backup.go index 9cd4ef78d1..a7929f626e 100644 --- a/pkg/generated/clientset/versioned/typed/ark/v1/fake/fake_backup.go +++ b/pkg/generated/clientset/versioned/typed/ark/v1/fake/fake_backup.go @@ -62,7 +62,7 @@ func (c *FakeBackups) List(opts v1.ListOptions) (result *ark_v1.BackupList, err if label == nil { label = labels.Everything() } - list := &ark_v1.BackupList{} + list := &ark_v1.BackupList{ListMeta: obj.(*ark_v1.BackupList).ListMeta} for _, item := range obj.(*ark_v1.BackupList).Items { if label.Matches(labels.Set(item.Labels)) { list.Items = append(list.Items, item) diff --git a/pkg/generated/clientset/versioned/typed/ark/v1/fake/fake_config.go b/pkg/generated/clientset/versioned/typed/ark/v1/fake/fake_config.go index d6e3bb6257..48c11341fe 100644 --- a/pkg/generated/clientset/versioned/typed/ark/v1/fake/fake_config.go +++ b/pkg/generated/clientset/versioned/typed/ark/v1/fake/fake_config.go @@ -62,7 +62,7 @@ func (c *FakeConfigs) List(opts v1.ListOptions) (result *ark_v1.ConfigList, err if label == nil { label = labels.Everything() } - list := &ark_v1.ConfigList{} + list := &ark_v1.ConfigList{ListMeta: obj.(*ark_v1.ConfigList).ListMeta} for _, item := range obj.(*ark_v1.ConfigList).Items { if label.Matches(labels.Set(item.Labels)) { list.Items = append(list.Items, item) diff --git a/pkg/generated/clientset/versioned/typed/ark/v1/fake/fake_deletebackuprequest.go b/pkg/generated/clientset/versioned/typed/ark/v1/fake/fake_deletebackuprequest.go index cb3095b281..eac7d17f1d 100644 --- a/pkg/generated/clientset/versioned/typed/ark/v1/fake/fake_deletebackuprequest.go +++ b/pkg/generated/clientset/versioned/typed/ark/v1/fake/fake_deletebackuprequest.go @@ -62,7 +62,7 @@ func (c *FakeDeleteBackupRequests) List(opts v1.ListOptions) (result *ark_v1.Del if label == nil { label = labels.Everything() } - list := &ark_v1.DeleteBackupRequestList{} + list := &ark_v1.DeleteBackupRequestList{ListMeta: obj.(*ark_v1.DeleteBackupRequestList).ListMeta} for _, item := range obj.(*ark_v1.DeleteBackupRequestList).Items { if label.Matches(labels.Set(item.Labels)) { list.Items = append(list.Items, item) diff --git a/pkg/generated/clientset/versioned/typed/ark/v1/fake/fake_downloadrequest.go b/pkg/generated/clientset/versioned/typed/ark/v1/fake/fake_downloadrequest.go index c6981a55b0..b1ad7fc770 100644 --- a/pkg/generated/clientset/versioned/typed/ark/v1/fake/fake_downloadrequest.go +++ b/pkg/generated/clientset/versioned/typed/ark/v1/fake/fake_downloadrequest.go @@ -62,7 +62,7 @@ func (c *FakeDownloadRequests) List(opts v1.ListOptions) (result *ark_v1.Downloa if label == nil { label = labels.Everything() } - list := &ark_v1.DownloadRequestList{} + list := &ark_v1.DownloadRequestList{ListMeta: obj.(*ark_v1.DownloadRequestList).ListMeta} for _, item := range obj.(*ark_v1.DownloadRequestList).Items { if label.Matches(labels.Set(item.Labels)) { list.Items = append(list.Items, item) diff --git a/pkg/generated/clientset/versioned/typed/ark/v1/fake/fake_podvolumebackup.go b/pkg/generated/clientset/versioned/typed/ark/v1/fake/fake_podvolumebackup.go index b3eca4519f..277bb4d6a9 100644 --- a/pkg/generated/clientset/versioned/typed/ark/v1/fake/fake_podvolumebackup.go +++ b/pkg/generated/clientset/versioned/typed/ark/v1/fake/fake_podvolumebackup.go @@ -62,7 +62,7 @@ func (c *FakePodVolumeBackups) List(opts v1.ListOptions) (result *ark_v1.PodVolu if label == nil { label = labels.Everything() } - list := &ark_v1.PodVolumeBackupList{} + list := &ark_v1.PodVolumeBackupList{ListMeta: obj.(*ark_v1.PodVolumeBackupList).ListMeta} for _, item := range obj.(*ark_v1.PodVolumeBackupList).Items { if label.Matches(labels.Set(item.Labels)) { list.Items = append(list.Items, item) diff --git a/pkg/generated/clientset/versioned/typed/ark/v1/fake/fake_podvolumerestore.go b/pkg/generated/clientset/versioned/typed/ark/v1/fake/fake_podvolumerestore.go index 0bfa9411fe..992f330180 100644 --- a/pkg/generated/clientset/versioned/typed/ark/v1/fake/fake_podvolumerestore.go +++ b/pkg/generated/clientset/versioned/typed/ark/v1/fake/fake_podvolumerestore.go @@ -62,7 +62,7 @@ func (c *FakePodVolumeRestores) List(opts v1.ListOptions) (result *ark_v1.PodVol if label == nil { label = labels.Everything() } - list := &ark_v1.PodVolumeRestoreList{} + list := &ark_v1.PodVolumeRestoreList{ListMeta: obj.(*ark_v1.PodVolumeRestoreList).ListMeta} for _, item := range obj.(*ark_v1.PodVolumeRestoreList).Items { if label.Matches(labels.Set(item.Labels)) { list.Items = append(list.Items, item) diff --git a/pkg/generated/clientset/versioned/typed/ark/v1/fake/fake_resticrepository.go b/pkg/generated/clientset/versioned/typed/ark/v1/fake/fake_resticrepository.go index ae2b5ce55f..39b49d0c0f 100644 --- a/pkg/generated/clientset/versioned/typed/ark/v1/fake/fake_resticrepository.go +++ b/pkg/generated/clientset/versioned/typed/ark/v1/fake/fake_resticrepository.go @@ -62,7 +62,7 @@ func (c *FakeResticRepositories) List(opts v1.ListOptions) (result *ark_v1.Resti if label == nil { label = labels.Everything() } - list := &ark_v1.ResticRepositoryList{} + list := &ark_v1.ResticRepositoryList{ListMeta: obj.(*ark_v1.ResticRepositoryList).ListMeta} for _, item := range obj.(*ark_v1.ResticRepositoryList).Items { if label.Matches(labels.Set(item.Labels)) { list.Items = append(list.Items, item) diff --git a/pkg/generated/clientset/versioned/typed/ark/v1/fake/fake_restore.go b/pkg/generated/clientset/versioned/typed/ark/v1/fake/fake_restore.go index 896e1f5c86..249609d5de 100644 --- a/pkg/generated/clientset/versioned/typed/ark/v1/fake/fake_restore.go +++ b/pkg/generated/clientset/versioned/typed/ark/v1/fake/fake_restore.go @@ -62,7 +62,7 @@ func (c *FakeRestores) List(opts v1.ListOptions) (result *ark_v1.RestoreList, er if label == nil { label = labels.Everything() } - list := &ark_v1.RestoreList{} + list := &ark_v1.RestoreList{ListMeta: obj.(*ark_v1.RestoreList).ListMeta} for _, item := range obj.(*ark_v1.RestoreList).Items { if label.Matches(labels.Set(item.Labels)) { list.Items = append(list.Items, item) diff --git a/pkg/generated/clientset/versioned/typed/ark/v1/fake/fake_schedule.go b/pkg/generated/clientset/versioned/typed/ark/v1/fake/fake_schedule.go index 6850cef204..e6a86cf61d 100644 --- a/pkg/generated/clientset/versioned/typed/ark/v1/fake/fake_schedule.go +++ b/pkg/generated/clientset/versioned/typed/ark/v1/fake/fake_schedule.go @@ -62,7 +62,7 @@ func (c *FakeSchedules) List(opts v1.ListOptions) (result *ark_v1.ScheduleList, if label == nil { label = labels.Everything() } - list := &ark_v1.ScheduleList{} + list := &ark_v1.ScheduleList{ListMeta: obj.(*ark_v1.ScheduleList).ListMeta} for _, item := range obj.(*ark_v1.ScheduleList).Items { if label.Matches(labels.Set(item.Labels)) { list.Items = append(list.Items, item) diff --git a/pkg/generated/informers/externalversions/factory.go b/pkg/generated/informers/externalversions/factory.go index 36c9b7e99e..3fc0460201 100644 --- a/pkg/generated/informers/externalversions/factory.go +++ b/pkg/generated/informers/externalversions/factory.go @@ -32,12 +32,16 @@ import ( 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 informers map[reflect.Type]cache.SharedIndexInformer // startedInformers is used for tracking which informers have been started. @@ -45,23 +49,62 @@ type sharedInformerFactory struct { startedInformers map[reflect.Type]bool } -// NewSharedInformerFactory constructs a new instance of sharedInformerFactory +// 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 versioned.Interface, defaultResync time.Duration) SharedInformerFactory { - return NewFilteredSharedInformerFactory(client, defaultResync, v1.NamespaceAll, nil) + 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 &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: namespace, - tweakListOptions: tweakListOptions, + 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 } // Start initializes all requested informers. @@ -110,7 +153,13 @@ func (f *sharedInformerFactory) InformerFor(obj runtime.Object, newFunc internal if exists { return informer } - informer = newFunc(f.client, f.defaultResync) + + resyncPeriod, exists := f.customResync[informerType] + if !exists { + resyncPeriod = f.defaultResync + } + + informer = newFunc(f.client, resyncPeriod) f.informers[informerType] = informer return informer