remove Config-related code

Signed-off-by: Steve Kriss <steve@heptio.com>
pull/949/head
Steve Kriss 2018-10-15 09:11:36 -06:00
parent 17b3a3b073
commit c36131a024
16 changed files with 6 additions and 795 deletions

View File

@ -1,51 +0,0 @@
/*
Copyright 2017 the Heptio Ark contributors.
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 v1
import metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
// ConfigList is a list of Configs.
type ConfigList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata"`
Items []Config `json:"items"`
}
// +genclient
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
// Config is an Ark resource that captures configuration information to be
// used for running the Ark server.
type Config struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata"`
// PersistentVolumeProvider is the configuration information for the cloud where
// the cluster is running and has PersistentVolumes to snapshot or restore. Optional.
PersistentVolumeProvider *CloudProviderConfig `json:"persistentVolumeProvider"`
}
// CloudProviderConfig is configuration information about how to connect
// to a particular cloud.
type CloudProviderConfig struct {
Name string `json:"name"`
Config map[string]string `json:"config"`
}

View File

@ -62,7 +62,6 @@ func CustomResources() map[string]typeInfo {
"Backup": newTypeInfo("backups", &Backup{}, &BackupList{}),
"Restore": newTypeInfo("restores", &Restore{}, &RestoreList{}),
"Schedule": newTypeInfo("schedules", &Schedule{}, &ScheduleList{}),
"Config": newTypeInfo("configs", &Config{}, &ConfigList{}),
"DownloadRequest": newTypeInfo("downloadrequests", &DownloadRequest{}, &DownloadRequestList{}),
"DeleteBackupRequest": newTypeInfo("deletebackuprequests", &DeleteBackupRequest{}, &DeleteBackupRequestList{}),
"PodVolumeBackup": newTypeInfo("podvolumebackups", &PodVolumeBackup{}, &PodVolumeBackupList{}),

View File

@ -408,97 +408,6 @@ func (in *BackupStorageLocationStatus) DeepCopy() *BackupStorageLocationStatus {
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *CloudProviderConfig) DeepCopyInto(out *CloudProviderConfig) {
*out = *in
if in.Config != nil {
in, out := &in.Config, &out.Config
*out = make(map[string]string, len(*in))
for key, val := range *in {
(*out)[key] = val
}
}
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CloudProviderConfig.
func (in *CloudProviderConfig) DeepCopy() *CloudProviderConfig {
if in == nil {
return nil
}
out := new(CloudProviderConfig)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Config) DeepCopyInto(out *Config) {
*out = *in
out.TypeMeta = in.TypeMeta
in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
if in.PersistentVolumeProvider != nil {
in, out := &in.PersistentVolumeProvider, &out.PersistentVolumeProvider
if *in == nil {
*out = nil
} else {
*out = new(CloudProviderConfig)
(*in).DeepCopyInto(*out)
}
}
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Config.
func (in *Config) DeepCopy() *Config {
if in == nil {
return nil
}
out := new(Config)
in.DeepCopyInto(out)
return out
}
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func (in *Config) DeepCopyObject() runtime.Object {
if c := in.DeepCopy(); c != nil {
return c
}
return nil
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *ConfigList) DeepCopyInto(out *ConfigList) {
*out = *in
out.TypeMeta = in.TypeMeta
out.ListMeta = in.ListMeta
if in.Items != nil {
in, out := &in.Items, &out.Items
*out = make([]Config, len(*in))
for i := range *in {
(*in)[i].DeepCopyInto(&(*out)[i])
}
}
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConfigList.
func (in *ConfigList) DeepCopy() *ConfigList {
if in == nil {
return nil
}
out := new(ConfigList)
in.DeepCopyInto(out)
return out
}
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func (in *ConfigList) DeepCopyObject() runtime.Object {
if c := in.DeepCopy(); c != nil {
return c
}
return nil
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *DeleteBackupRequest) DeepCopyInto(out *DeleteBackupRequest) {
*out = *in

View File

@ -24,7 +24,6 @@ import (
"log"
"net/http"
"os"
"reflect"
"strings"
"sync"
"time"
@ -74,6 +73,9 @@ import (
const (
// the port where prometheus metrics are exposed
defaultMetricsAddress = ":8085"
defaultBackupSyncPeriod = time.Minute
defaultPodVolumeOperationTimeout = 60 * time.Minute
)
type serverConfig struct {
@ -267,19 +269,7 @@ func (s *server) run() error {
return err
}
originalConfig, err := s.loadConfig()
if err != nil {
return err
}
// watchConfig needs to examine the unmodified original config, so we keep that around as a
// separate object, and instead apply defaults to a clone.
config := originalConfig.DeepCopy()
s.applyConfigDefaults(config)
s.watchConfig(originalConfig)
if _, err = s.arkClient.ArkV1().BackupStorageLocations(s.namespace).Get(s.config.defaultBackupLocation, metav1.GetOptions{}); err != nil {
if _, err := s.arkClient.ArkV1().BackupStorageLocations(s.namespace).Get(s.config.defaultBackupLocation, metav1.GetOptions{}); err != nil {
s.logger.WithError(errors.WithStack(err)).
Warnf("Default backup storage location %q not found; backups must explicitly specify a location", s.config.defaultBackupLocation)
}
@ -293,7 +283,7 @@ func (s *server) run() error {
return err
}
if err := s.runControllers(config, defaultVolumeSnapshotLocations); err != nil {
if err := s.runControllers(defaultVolumeSnapshotLocations); err != nil {
return err
}
@ -338,23 +328,6 @@ func getDefaultVolumeSnapshotLocations(arkClient clientset.Interface, namespace
return providerDefaults, nil
}
func (s *server) applyConfigDefaults(c *api.Config) {
if s.config.backupSyncPeriod == 0 {
s.config.backupSyncPeriod = defaultBackupSyncPeriod
}
if s.config.podVolumeOperationTimeout == 0 {
s.config.podVolumeOperationTimeout = defaultPodVolumeOperationTimeout
}
if len(s.config.restoreResourcePriorities) == 0 {
s.config.restoreResourcePriorities = defaultRestorePriorities
s.logger.WithField("priorities", s.config.restoreResourcePriorities).Info("Using default resource priorities")
} else {
s.logger.WithField("priorities", s.config.restoreResourcePriorities).Info("Using given resource priorities")
}
}
// namespaceExists returns nil if namespace can be successfully
// gotten from the kubernetes API, or an error otherwise.
func (s *server) namespaceExists(namespace string) error {
@ -464,34 +437,6 @@ func (s *server) validateBackupStorageLocations() error {
return nil
}
func (s *server) loadConfig() (*api.Config, error) {
s.logger.Info("Retrieving Ark configuration")
var (
config *api.Config
err error
)
for {
config, err = s.arkClient.ArkV1().Configs(s.namespace).Get("default", metav1.GetOptions{})
if err == nil {
break
}
if !apierrors.IsNotFound(err) {
s.logger.WithError(err).Error("Error retrieving configuration")
} else {
s.logger.Info("Configuration not found")
}
s.logger.Info("Will attempt to retrieve configuration again in 5 seconds")
time.Sleep(5 * time.Second)
}
s.logger.Info("Successfully retrieved Ark configuration")
return config, nil
}
const (
defaultBackupSyncPeriod = time.Minute
defaultPodVolumeOperationTimeout = 60 * time.Minute
)
// - Namespaces go first because all namespaced resources depend on them.
// - PVs go before PVCs because PVCs depend on them.
// - PVCs go before pods or controllers so they can be mounted as volumes.
@ -513,39 +458,6 @@ var defaultRestorePriorities = []string{
"replicaset",
}
// watchConfig adds an update event handler to the Config shared informer, invoking s.cancelFunc
// when it sees a change.
func (s *server) watchConfig(config *api.Config) {
s.sharedInformerFactory.Ark().V1().Configs().Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{
UpdateFunc: func(oldObj, newObj interface{}) {
updated := newObj.(*api.Config)
s.logger.WithField("name", kube.NamespaceAndName(updated)).Debug("received updated config")
if updated.Name != config.Name {
s.logger.WithField("name", updated.Name).Debug("Config watch channel received other config")
return
}
// Objects retrieved via Get() don't have their Kind or APIVersion set. Objects retrieved via
// Watch(), including those from shared informer event handlers, DO have their Kind and
// APIVersion set. To prevent the DeepEqual() call below from considering Kind or APIVersion
// as the source of a change, set config.Kind and config.APIVersion to match the values from
// the updated Config.
if config.Kind != updated.Kind {
config.Kind = updated.Kind
}
if config.APIVersion != updated.APIVersion {
config.APIVersion = updated.APIVersion
}
if !reflect.DeepEqual(config, updated) {
s.logger.Info("Detected a config change. Gracefully shutting down")
s.cancelFunc()
}
},
})
}
func (s *server) initRestic() error {
// warn if restic daemonset does not exist
if _, err := s.kubeClient.AppsV1().DaemonSets(s.namespace).Get(restic.DaemonSet, metav1.GetOptions{}); apierrors.IsNotFound(err) {
@ -594,7 +506,7 @@ func (s *server) initRestic() error {
return nil
}
func (s *server) runControllers(config *api.Config, defaultVolumeSnapshotLocations map[string]*api.VolumeSnapshotLocation) error {
func (s *server) runControllers(defaultVolumeSnapshotLocations map[string]*api.VolumeSnapshotLocation) error {
s.logger.Info("Starting controllers")
ctx := s.ctx

View File

@ -18,7 +18,6 @@ package server
import (
"testing"
"time"
"github.com/stretchr/testify/assert"
@ -29,32 +28,6 @@ import (
arktest "github.com/heptio/ark/pkg/util/test"
)
func TestApplyConfigDefaults(t *testing.T) {
var (
c = &v1.Config{}
server = &server{
logger: arktest.NewLogger(),
config: serverConfig{},
}
)
// test defaulting
server.applyConfigDefaults(c)
assert.Equal(t, defaultBackupSyncPeriod, server.config.backupSyncPeriod)
assert.Equal(t, defaultPodVolumeOperationTimeout, server.config.podVolumeOperationTimeout)
assert.Equal(t, defaultRestorePriorities, server.config.restoreResourcePriorities)
// // make sure defaulting doesn't overwrite real values
server.config.backupSyncPeriod = 4 * time.Minute
server.config.podVolumeOperationTimeout = 5 * time.Second
server.config.restoreResourcePriorities = []string{"a", "b"}
server.applyConfigDefaults(c)
assert.Equal(t, 4*time.Minute, server.config.backupSyncPeriod)
assert.Equal(t, 5*time.Second, server.config.podVolumeOperationTimeout)
assert.Equal(t, []string{"a", "b"}, server.config.restoreResourcePriorities)
}
func TestArkResourcesExist(t *testing.T) {
var (
fakeDiscoveryHelper = &arktest.FakeDiscoveryHelper{}

View File

@ -29,7 +29,6 @@ type ArkV1Interface interface {
RESTClient() rest.Interface
BackupsGetter
BackupStorageLocationsGetter
ConfigsGetter
DeleteBackupRequestsGetter
DownloadRequestsGetter
PodVolumeBackupsGetter
@ -53,10 +52,6 @@ func (c *ArkV1Client) BackupStorageLocations(namespace string) BackupStorageLoca
return newBackupStorageLocations(c, namespace)
}
func (c *ArkV1Client) Configs(namespace string) ConfigInterface {
return newConfigs(c, namespace)
}
func (c *ArkV1Client) DeleteBackupRequests(namespace string) DeleteBackupRequestInterface {
return newDeleteBackupRequests(c, namespace)
}

View File

@ -1,157 +0,0 @@
/*
Copyright 2018 the Heptio Ark contributors.
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 client-gen. DO NOT EDIT.
package v1
import (
v1 "github.com/heptio/ark/pkg/apis/ark/v1"
scheme "github.com/heptio/ark/pkg/generated/clientset/versioned/scheme"
meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
types "k8s.io/apimachinery/pkg/types"
watch "k8s.io/apimachinery/pkg/watch"
rest "k8s.io/client-go/rest"
)
// ConfigsGetter has a method to return a ConfigInterface.
// A group's client should implement this interface.
type ConfigsGetter interface {
Configs(namespace string) ConfigInterface
}
// ConfigInterface has methods to work with Config resources.
type ConfigInterface interface {
Create(*v1.Config) (*v1.Config, error)
Update(*v1.Config) (*v1.Config, error)
Delete(name string, options *meta_v1.DeleteOptions) error
DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error
Get(name string, options meta_v1.GetOptions) (*v1.Config, error)
List(opts meta_v1.ListOptions) (*v1.ConfigList, error)
Watch(opts meta_v1.ListOptions) (watch.Interface, error)
Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.Config, err error)
ConfigExpansion
}
// configs implements ConfigInterface
type configs struct {
client rest.Interface
ns string
}
// newConfigs returns a Configs
func newConfigs(c *ArkV1Client, namespace string) *configs {
return &configs{
client: c.RESTClient(),
ns: namespace,
}
}
// Get takes name of the config, and returns the corresponding config object, and an error if there is any.
func (c *configs) Get(name string, options meta_v1.GetOptions) (result *v1.Config, err error) {
result = &v1.Config{}
err = c.client.Get().
Namespace(c.ns).
Resource("configs").
Name(name).
VersionedParams(&options, scheme.ParameterCodec).
Do().
Into(result)
return
}
// List takes label and field selectors, and returns the list of Configs that match those selectors.
func (c *configs) List(opts meta_v1.ListOptions) (result *v1.ConfigList, err error) {
result = &v1.ConfigList{}
err = c.client.Get().
Namespace(c.ns).
Resource("configs").
VersionedParams(&opts, scheme.ParameterCodec).
Do().
Into(result)
return
}
// Watch returns a watch.Interface that watches the requested configs.
func (c *configs) Watch(opts meta_v1.ListOptions) (watch.Interface, error) {
opts.Watch = true
return c.client.Get().
Namespace(c.ns).
Resource("configs").
VersionedParams(&opts, scheme.ParameterCodec).
Watch()
}
// Create takes the representation of a config and creates it. Returns the server's representation of the config, and an error, if there is any.
func (c *configs) Create(config *v1.Config) (result *v1.Config, err error) {
result = &v1.Config{}
err = c.client.Post().
Namespace(c.ns).
Resource("configs").
Body(config).
Do().
Into(result)
return
}
// Update takes the representation of a config and updates it. Returns the server's representation of the config, and an error, if there is any.
func (c *configs) Update(config *v1.Config) (result *v1.Config, err error) {
result = &v1.Config{}
err = c.client.Put().
Namespace(c.ns).
Resource("configs").
Name(config.Name).
Body(config).
Do().
Into(result)
return
}
// Delete takes name of the config and deletes it. Returns an error if one occurs.
func (c *configs) Delete(name string, options *meta_v1.DeleteOptions) error {
return c.client.Delete().
Namespace(c.ns).
Resource("configs").
Name(name).
Body(options).
Do().
Error()
}
// DeleteCollection deletes a collection of objects.
func (c *configs) DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error {
return c.client.Delete().
Namespace(c.ns).
Resource("configs").
VersionedParams(&listOptions, scheme.ParameterCodec).
Body(options).
Do().
Error()
}
// Patch applies the patch and returns the patched config.
func (c *configs) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.Config, err error) {
result = &v1.Config{}
err = c.client.Patch(pt).
Namespace(c.ns).
Resource("configs").
SubResource(subresources...).
Name(name).
Body(data).
Do().
Into(result)
return
}

View File

@ -36,10 +36,6 @@ func (c *FakeArkV1) BackupStorageLocations(namespace string) v1.BackupStorageLoc
return &FakeBackupStorageLocations{c, namespace}
}
func (c *FakeArkV1) Configs(namespace string) v1.ConfigInterface {
return &FakeConfigs{c, namespace}
}
func (c *FakeArkV1) DeleteBackupRequests(namespace string) v1.DeleteBackupRequestInterface {
return &FakeDeleteBackupRequests{c, namespace}
}

View File

@ -1,128 +0,0 @@
/*
Copyright 2018 the Heptio Ark contributors.
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 client-gen. DO NOT EDIT.
package fake
import (
ark_v1 "github.com/heptio/ark/pkg/apis/ark/v1"
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
labels "k8s.io/apimachinery/pkg/labels"
schema "k8s.io/apimachinery/pkg/runtime/schema"
types "k8s.io/apimachinery/pkg/types"
watch "k8s.io/apimachinery/pkg/watch"
testing "k8s.io/client-go/testing"
)
// FakeConfigs implements ConfigInterface
type FakeConfigs struct {
Fake *FakeArkV1
ns string
}
var configsResource = schema.GroupVersionResource{Group: "ark.heptio.com", Version: "v1", Resource: "configs"}
var configsKind = schema.GroupVersionKind{Group: "ark.heptio.com", Version: "v1", Kind: "Config"}
// Get takes name of the config, and returns the corresponding config object, and an error if there is any.
func (c *FakeConfigs) Get(name string, options v1.GetOptions) (result *ark_v1.Config, err error) {
obj, err := c.Fake.
Invokes(testing.NewGetAction(configsResource, c.ns, name), &ark_v1.Config{})
if obj == nil {
return nil, err
}
return obj.(*ark_v1.Config), err
}
// List takes label and field selectors, and returns the list of Configs that match those selectors.
func (c *FakeConfigs) List(opts v1.ListOptions) (result *ark_v1.ConfigList, err error) {
obj, err := c.Fake.
Invokes(testing.NewListAction(configsResource, configsKind, c.ns, opts), &ark_v1.ConfigList{})
if obj == nil {
return nil, err
}
label, _, _ := testing.ExtractFromListOptions(opts)
if label == nil {
label = labels.Everything()
}
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)
}
}
return list, err
}
// Watch returns a watch.Interface that watches the requested configs.
func (c *FakeConfigs) Watch(opts v1.ListOptions) (watch.Interface, error) {
return c.Fake.
InvokesWatch(testing.NewWatchAction(configsResource, c.ns, opts))
}
// Create takes the representation of a config and creates it. Returns the server's representation of the config, and an error, if there is any.
func (c *FakeConfigs) Create(config *ark_v1.Config) (result *ark_v1.Config, err error) {
obj, err := c.Fake.
Invokes(testing.NewCreateAction(configsResource, c.ns, config), &ark_v1.Config{})
if obj == nil {
return nil, err
}
return obj.(*ark_v1.Config), err
}
// Update takes the representation of a config and updates it. Returns the server's representation of the config, and an error, if there is any.
func (c *FakeConfigs) Update(config *ark_v1.Config) (result *ark_v1.Config, err error) {
obj, err := c.Fake.
Invokes(testing.NewUpdateAction(configsResource, c.ns, config), &ark_v1.Config{})
if obj == nil {
return nil, err
}
return obj.(*ark_v1.Config), err
}
// Delete takes name of the config and deletes it. Returns an error if one occurs.
func (c *FakeConfigs) Delete(name string, options *v1.DeleteOptions) error {
_, err := c.Fake.
Invokes(testing.NewDeleteAction(configsResource, c.ns, name), &ark_v1.Config{})
return err
}
// DeleteCollection deletes a collection of objects.
func (c *FakeConfigs) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error {
action := testing.NewDeleteCollectionAction(configsResource, c.ns, listOptions)
_, err := c.Fake.Invokes(action, &ark_v1.ConfigList{})
return err
}
// Patch applies the patch and returns the patched config.
func (c *FakeConfigs) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *ark_v1.Config, err error) {
obj, err := c.Fake.
Invokes(testing.NewPatchSubresourceAction(configsResource, c.ns, name, data, subresources...), &ark_v1.Config{})
if obj == nil {
return nil, err
}
return obj.(*ark_v1.Config), err
}

View File

@ -22,8 +22,6 @@ type BackupExpansion interface{}
type BackupStorageLocationExpansion interface{}
type ConfigExpansion interface{}
type DeleteBackupRequestExpansion interface{}
type DownloadRequestExpansion interface{}

View File

@ -1,89 +0,0 @@
/*
Copyright 2018 the Heptio Ark contributors.
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 v1
import (
time "time"
ark_v1 "github.com/heptio/ark/pkg/apis/ark/v1"
versioned "github.com/heptio/ark/pkg/generated/clientset/versioned"
internalinterfaces "github.com/heptio/ark/pkg/generated/informers/externalversions/internalinterfaces"
v1 "github.com/heptio/ark/pkg/generated/listers/ark/v1"
meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
runtime "k8s.io/apimachinery/pkg/runtime"
watch "k8s.io/apimachinery/pkg/watch"
cache "k8s.io/client-go/tools/cache"
)
// ConfigInformer provides access to a shared informer and lister for
// Configs.
type ConfigInformer interface {
Informer() cache.SharedIndexInformer
Lister() v1.ConfigLister
}
type configInformer struct {
factory internalinterfaces.SharedInformerFactory
tweakListOptions internalinterfaces.TweakListOptionsFunc
namespace string
}
// NewConfigInformer constructs a new informer for Config type.
// Always prefer using an informer factory to get a shared informer instead of getting an independent
// one. This reduces memory footprint and number of connections to the server.
func NewConfigInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
return NewFilteredConfigInformer(client, namespace, resyncPeriod, indexers, nil)
}
// NewFilteredConfigInformer constructs a new informer for Config type.
// Always prefer using an informer factory to get a shared informer instead of getting an independent
// one. This reduces memory footprint and number of connections to the server.
func NewFilteredConfigInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
return cache.NewSharedIndexInformer(
&cache.ListWatch{
ListFunc: func(options meta_v1.ListOptions) (runtime.Object, error) {
if tweakListOptions != nil {
tweakListOptions(&options)
}
return client.ArkV1().Configs(namespace).List(options)
},
WatchFunc: func(options meta_v1.ListOptions) (watch.Interface, error) {
if tweakListOptions != nil {
tweakListOptions(&options)
}
return client.ArkV1().Configs(namespace).Watch(options)
},
},
&ark_v1.Config{},
resyncPeriod,
indexers,
)
}
func (f *configInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
return NewFilteredConfigInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
}
func (f *configInformer) Informer() cache.SharedIndexInformer {
return f.factory.InformerFor(&ark_v1.Config{}, f.defaultInformer)
}
func (f *configInformer) Lister() v1.ConfigLister {
return v1.NewConfigLister(f.Informer().GetIndexer())
}

View File

@ -28,8 +28,6 @@ type Interface interface {
Backups() BackupInformer
// BackupStorageLocations returns a BackupStorageLocationInformer.
BackupStorageLocations() BackupStorageLocationInformer
// Configs returns a ConfigInformer.
Configs() ConfigInformer
// DeleteBackupRequests returns a DeleteBackupRequestInformer.
DeleteBackupRequests() DeleteBackupRequestInformer
// DownloadRequests returns a DownloadRequestInformer.
@ -69,11 +67,6 @@ func (v *version) BackupStorageLocations() BackupStorageLocationInformer {
return &backupStorageLocationInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
}
// Configs returns a ConfigInformer.
func (v *version) Configs() ConfigInformer {
return &configInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
}
// DeleteBackupRequests returns a DeleteBackupRequestInformer.
func (v *version) DeleteBackupRequests() DeleteBackupRequestInformer {
return &deleteBackupRequestInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}

View File

@ -57,8 +57,6 @@ func (f *sharedInformerFactory) ForResource(resource schema.GroupVersionResource
return &genericInformer{resource: resource.GroupResource(), informer: f.Ark().V1().Backups().Informer()}, nil
case v1.SchemeGroupVersion.WithResource("backupstoragelocations"):
return &genericInformer{resource: resource.GroupResource(), informer: f.Ark().V1().BackupStorageLocations().Informer()}, nil
case v1.SchemeGroupVersion.WithResource("configs"):
return &genericInformer{resource: resource.GroupResource(), informer: f.Ark().V1().Configs().Informer()}, nil
case v1.SchemeGroupVersion.WithResource("deletebackuprequests"):
return &genericInformer{resource: resource.GroupResource(), informer: f.Ark().V1().DeleteBackupRequests().Informer()}, nil
case v1.SchemeGroupVersion.WithResource("downloadrequests"):

View File

@ -1,94 +0,0 @@
/*
Copyright 2018 the Heptio Ark contributors.
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 lister-gen. DO NOT EDIT.
package v1
import (
v1 "github.com/heptio/ark/pkg/apis/ark/v1"
"k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/labels"
"k8s.io/client-go/tools/cache"
)
// ConfigLister helps list Configs.
type ConfigLister interface {
// List lists all Configs in the indexer.
List(selector labels.Selector) (ret []*v1.Config, err error)
// Configs returns an object that can list and get Configs.
Configs(namespace string) ConfigNamespaceLister
ConfigListerExpansion
}
// configLister implements the ConfigLister interface.
type configLister struct {
indexer cache.Indexer
}
// NewConfigLister returns a new ConfigLister.
func NewConfigLister(indexer cache.Indexer) ConfigLister {
return &configLister{indexer: indexer}
}
// List lists all Configs in the indexer.
func (s *configLister) List(selector labels.Selector) (ret []*v1.Config, err error) {
err = cache.ListAll(s.indexer, selector, func(m interface{}) {
ret = append(ret, m.(*v1.Config))
})
return ret, err
}
// Configs returns an object that can list and get Configs.
func (s *configLister) Configs(namespace string) ConfigNamespaceLister {
return configNamespaceLister{indexer: s.indexer, namespace: namespace}
}
// ConfigNamespaceLister helps list and get Configs.
type ConfigNamespaceLister interface {
// List lists all Configs in the indexer for a given namespace.
List(selector labels.Selector) (ret []*v1.Config, err error)
// Get retrieves the Config from the indexer for a given namespace and name.
Get(name string) (*v1.Config, error)
ConfigNamespaceListerExpansion
}
// configNamespaceLister implements the ConfigNamespaceLister
// interface.
type configNamespaceLister struct {
indexer cache.Indexer
namespace string
}
// List lists all Configs in the indexer for a given namespace.
func (s configNamespaceLister) List(selector labels.Selector) (ret []*v1.Config, err error) {
err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) {
ret = append(ret, m.(*v1.Config))
})
return ret, err
}
// Get retrieves the Config from the indexer for a given namespace and name.
func (s configNamespaceLister) Get(name string) (*v1.Config, error) {
obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name)
if err != nil {
return nil, err
}
if !exists {
return nil, errors.NewNotFound(v1.Resource("config"), name)
}
return obj.(*v1.Config), nil
}

View File

@ -34,14 +34,6 @@ type BackupStorageLocationListerExpansion interface{}
// BackupStorageLocationNamespaceLister.
type BackupStorageLocationNamespaceListerExpansion interface{}
// ConfigListerExpansion allows custom methods to be added to
// ConfigLister.
type ConfigListerExpansion interface{}
// ConfigNamespaceListerExpansion allows custom methods to be added to
// ConfigNamespaceLister.
type ConfigNamespaceListerExpansion interface{}
// DeleteBackupRequestListerExpansion allows custom methods to be added to
// DeleteBackupRequestLister.
type DeleteBackupRequestListerExpansion interface{}

View File

@ -1,35 +0,0 @@
/*
Copyright 2018 the Heptio Ark contributors.
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 install
import (
arkv1 "github.com/heptio/ark/pkg/apis/ark/v1"
)
func Config(
namespace string,
pvCloudProviderName string,
pvCloudProviderConfig map[string]string,
) *arkv1.Config {
return &arkv1.Config{
ObjectMeta: objectMeta(namespace, "default"),
PersistentVolumeProvider: &arkv1.CloudProviderConfig{
Name: pvCloudProviderName,
Config: pvCloudProviderConfig,
},
}
}