diff --git a/apis/bucket_info.go b/apis/bucket_info.go index dc0609f9..1b9b0b04 100644 --- a/apis/bucket_info.go +++ b/apis/bucket_info.go @@ -22,6 +22,18 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) +type SecretS3 struct { + Endpoint string `json:"endpoint"` + Region string `json:"region"` + AccessKeyID string `json:"accessKeyID"` + AccessSecretKey string `json:"accessSecretKey"` +} + +type SecretAzure struct { + AccessToken string `json:"acessToken"` + ExpiryTimeStamp *metav1.Time `json:"expiryTimeStamp"` +} + // +k8s:deepcopy-gen=false type BucketInfo struct { metav1.TypeMeta `json:",inline"` @@ -42,11 +54,11 @@ type BucketInfoSpec struct { // IAM - implicit authentication of pods to the OSP based on service account mappings AuthenticationType AuthenticationType `json:"authenticationType"` - // Endpoint is the URL at which the bucket can be accessed - Endpoint string `json:"endpoint"` + // S3 - Details of S3 credentials + S3 *SecretS3 `json:"secretS3"` - // Region is the vendor-defined region where the bucket "resides" - Region string `json:"region"` + // Azure - Details of Azure credentials + Azure *SecretAzure `json:"secretAzure"` // Protocols are the set of data APIs this bucket is expected to support. // The possible values for protocol are: diff --git a/apis/objectstorage/v1alpha1/types.go b/apis/objectstorage/v1alpha1/types.go index bd0b164f..44c2be41 100644 --- a/apis/objectstorage/v1alpha1/types.go +++ b/apis/objectstorage/v1alpha1/types.go @@ -256,7 +256,6 @@ type BucketAccessClassList struct { } // +genclient -// +genclient:nonNamespaced // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // +kubebuilder:resource:scope=Namespaced // +kubebuilder:storageversion diff --git a/client/clientset/versioned/typed/objectstorage/v1alpha1/bucketaccess.go b/client/clientset/versioned/typed/objectstorage/v1alpha1/bucketaccess.go index db8e5866..d4a3303b 100644 --- a/client/clientset/versioned/typed/objectstorage/v1alpha1/bucketaccess.go +++ b/client/clientset/versioned/typed/objectstorage/v1alpha1/bucketaccess.go @@ -33,7 +33,7 @@ import ( // BucketAccessesGetter has a method to return a BucketAccessInterface. // A group's client should implement this interface. type BucketAccessesGetter interface { - BucketAccesses() BucketAccessInterface + BucketAccesses(namespace string) BucketAccessInterface } // BucketAccessInterface has methods to work with BucketAccess resources. @@ -53,12 +53,14 @@ type BucketAccessInterface interface { // bucketAccesses implements BucketAccessInterface type bucketAccesses struct { client rest.Interface + ns string } // newBucketAccesses returns a BucketAccesses -func newBucketAccesses(c *ObjectstorageV1alpha1Client) *bucketAccesses { +func newBucketAccesses(c *ObjectstorageV1alpha1Client, namespace string) *bucketAccesses { return &bucketAccesses{ client: c.RESTClient(), + ns: namespace, } } @@ -66,6 +68,7 @@ func newBucketAccesses(c *ObjectstorageV1alpha1Client) *bucketAccesses { func (c *bucketAccesses) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha1.BucketAccess, err error) { result = &v1alpha1.BucketAccess{} err = c.client.Get(). + Namespace(c.ns). Resource("bucketaccesses"). Name(name). VersionedParams(&options, scheme.ParameterCodec). @@ -82,6 +85,7 @@ func (c *bucketAccesses) List(ctx context.Context, opts v1.ListOptions) (result } result = &v1alpha1.BucketAccessList{} err = c.client.Get(). + Namespace(c.ns). Resource("bucketaccesses"). VersionedParams(&opts, scheme.ParameterCodec). Timeout(timeout). @@ -98,6 +102,7 @@ func (c *bucketAccesses) Watch(ctx context.Context, opts v1.ListOptions) (watch. } opts.Watch = true return c.client.Get(). + Namespace(c.ns). Resource("bucketaccesses"). VersionedParams(&opts, scheme.ParameterCodec). Timeout(timeout). @@ -108,6 +113,7 @@ func (c *bucketAccesses) Watch(ctx context.Context, opts v1.ListOptions) (watch. func (c *bucketAccesses) Create(ctx context.Context, bucketAccess *v1alpha1.BucketAccess, opts v1.CreateOptions) (result *v1alpha1.BucketAccess, err error) { result = &v1alpha1.BucketAccess{} err = c.client.Post(). + Namespace(c.ns). Resource("bucketaccesses"). VersionedParams(&opts, scheme.ParameterCodec). Body(bucketAccess). @@ -120,6 +126,7 @@ func (c *bucketAccesses) Create(ctx context.Context, bucketAccess *v1alpha1.Buck func (c *bucketAccesses) Update(ctx context.Context, bucketAccess *v1alpha1.BucketAccess, opts v1.UpdateOptions) (result *v1alpha1.BucketAccess, err error) { result = &v1alpha1.BucketAccess{} err = c.client.Put(). + Namespace(c.ns). Resource("bucketaccesses"). Name(bucketAccess.Name). VersionedParams(&opts, scheme.ParameterCodec). @@ -134,6 +141,7 @@ func (c *bucketAccesses) Update(ctx context.Context, bucketAccess *v1alpha1.Buck func (c *bucketAccesses) UpdateStatus(ctx context.Context, bucketAccess *v1alpha1.BucketAccess, opts v1.UpdateOptions) (result *v1alpha1.BucketAccess, err error) { result = &v1alpha1.BucketAccess{} err = c.client.Put(). + Namespace(c.ns). Resource("bucketaccesses"). Name(bucketAccess.Name). SubResource("status"). @@ -147,6 +155,7 @@ func (c *bucketAccesses) UpdateStatus(ctx context.Context, bucketAccess *v1alpha // Delete takes name of the bucketAccess and deletes it. Returns an error if one occurs. func (c *bucketAccesses) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { return c.client.Delete(). + Namespace(c.ns). Resource("bucketaccesses"). Name(name). Body(&opts). @@ -161,6 +170,7 @@ func (c *bucketAccesses) DeleteCollection(ctx context.Context, opts v1.DeleteOpt timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second } return c.client.Delete(). + Namespace(c.ns). Resource("bucketaccesses"). VersionedParams(&listOpts, scheme.ParameterCodec). Timeout(timeout). @@ -173,6 +183,7 @@ func (c *bucketAccesses) DeleteCollection(ctx context.Context, opts v1.DeleteOpt func (c *bucketAccesses) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.BucketAccess, err error) { result = &v1alpha1.BucketAccess{} err = c.client.Patch(pt). + Namespace(c.ns). Resource("bucketaccesses"). Name(name). SubResource(subresources...). diff --git a/client/clientset/versioned/typed/objectstorage/v1alpha1/fake/fake_bucketaccess.go b/client/clientset/versioned/typed/objectstorage/v1alpha1/fake/fake_bucketaccess.go index ff288bcf..ac14a466 100644 --- a/client/clientset/versioned/typed/objectstorage/v1alpha1/fake/fake_bucketaccess.go +++ b/client/clientset/versioned/typed/objectstorage/v1alpha1/fake/fake_bucketaccess.go @@ -33,6 +33,7 @@ import ( // FakeBucketAccesses implements BucketAccessInterface type FakeBucketAccesses struct { Fake *FakeObjectstorageV1alpha1 + ns string } var bucketaccessesResource = schema.GroupVersionResource{Group: "objectstorage.k8s.io", Version: "v1alpha1", Resource: "bucketaccesses"} @@ -42,7 +43,8 @@ var bucketaccessesKind = schema.GroupVersionKind{Group: "objectstorage.k8s.io", // Get takes name of the bucketAccess, and returns the corresponding bucketAccess object, and an error if there is any. func (c *FakeBucketAccesses) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha1.BucketAccess, err error) { obj, err := c.Fake. - Invokes(testing.NewRootGetAction(bucketaccessesResource, name), &v1alpha1.BucketAccess{}) + Invokes(testing.NewGetAction(bucketaccessesResource, c.ns, name), &v1alpha1.BucketAccess{}) + if obj == nil { return nil, err } @@ -52,7 +54,8 @@ func (c *FakeBucketAccesses) Get(ctx context.Context, name string, options v1.Ge // List takes label and field selectors, and returns the list of BucketAccesses that match those selectors. func (c *FakeBucketAccesses) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha1.BucketAccessList, err error) { obj, err := c.Fake. - Invokes(testing.NewRootListAction(bucketaccessesResource, bucketaccessesKind, opts), &v1alpha1.BucketAccessList{}) + Invokes(testing.NewListAction(bucketaccessesResource, bucketaccessesKind, c.ns, opts), &v1alpha1.BucketAccessList{}) + if obj == nil { return nil, err } @@ -73,13 +76,15 @@ func (c *FakeBucketAccesses) List(ctx context.Context, opts v1.ListOptions) (res // Watch returns a watch.Interface that watches the requested bucketAccesses. func (c *FakeBucketAccesses) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { return c.Fake. - InvokesWatch(testing.NewRootWatchAction(bucketaccessesResource, opts)) + InvokesWatch(testing.NewWatchAction(bucketaccessesResource, c.ns, opts)) + } // Create takes the representation of a bucketAccess and creates it. Returns the server's representation of the bucketAccess, and an error, if there is any. func (c *FakeBucketAccesses) Create(ctx context.Context, bucketAccess *v1alpha1.BucketAccess, opts v1.CreateOptions) (result *v1alpha1.BucketAccess, err error) { obj, err := c.Fake. - Invokes(testing.NewRootCreateAction(bucketaccessesResource, bucketAccess), &v1alpha1.BucketAccess{}) + Invokes(testing.NewCreateAction(bucketaccessesResource, c.ns, bucketAccess), &v1alpha1.BucketAccess{}) + if obj == nil { return nil, err } @@ -89,7 +94,8 @@ func (c *FakeBucketAccesses) Create(ctx context.Context, bucketAccess *v1alpha1. // Update takes the representation of a bucketAccess and updates it. Returns the server's representation of the bucketAccess, and an error, if there is any. func (c *FakeBucketAccesses) Update(ctx context.Context, bucketAccess *v1alpha1.BucketAccess, opts v1.UpdateOptions) (result *v1alpha1.BucketAccess, err error) { obj, err := c.Fake. - Invokes(testing.NewRootUpdateAction(bucketaccessesResource, bucketAccess), &v1alpha1.BucketAccess{}) + Invokes(testing.NewUpdateAction(bucketaccessesResource, c.ns, bucketAccess), &v1alpha1.BucketAccess{}) + if obj == nil { return nil, err } @@ -100,7 +106,8 @@ func (c *FakeBucketAccesses) Update(ctx context.Context, bucketAccess *v1alpha1. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). func (c *FakeBucketAccesses) UpdateStatus(ctx context.Context, bucketAccess *v1alpha1.BucketAccess, opts v1.UpdateOptions) (*v1alpha1.BucketAccess, error) { obj, err := c.Fake. - Invokes(testing.NewRootUpdateSubresourceAction(bucketaccessesResource, "status", bucketAccess), &v1alpha1.BucketAccess{}) + Invokes(testing.NewUpdateSubresourceAction(bucketaccessesResource, "status", c.ns, bucketAccess), &v1alpha1.BucketAccess{}) + if obj == nil { return nil, err } @@ -110,13 +117,14 @@ func (c *FakeBucketAccesses) UpdateStatus(ctx context.Context, bucketAccess *v1a // Delete takes name of the bucketAccess and deletes it. Returns an error if one occurs. func (c *FakeBucketAccesses) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { _, err := c.Fake. - Invokes(testing.NewRootDeleteActionWithOptions(bucketaccessesResource, name, opts), &v1alpha1.BucketAccess{}) + Invokes(testing.NewDeleteActionWithOptions(bucketaccessesResource, c.ns, name, opts), &v1alpha1.BucketAccess{}) + return err } // DeleteCollection deletes a collection of objects. func (c *FakeBucketAccesses) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { - action := testing.NewRootDeleteCollectionAction(bucketaccessesResource, listOpts) + action := testing.NewDeleteCollectionAction(bucketaccessesResource, c.ns, listOpts) _, err := c.Fake.Invokes(action, &v1alpha1.BucketAccessList{}) return err @@ -125,7 +133,8 @@ func (c *FakeBucketAccesses) DeleteCollection(ctx context.Context, opts v1.Delet // Patch applies the patch and returns the patched bucketAccess. func (c *FakeBucketAccesses) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.BucketAccess, err error) { obj, err := c.Fake. - Invokes(testing.NewRootPatchSubresourceAction(bucketaccessesResource, name, pt, data, subresources...), &v1alpha1.BucketAccess{}) + Invokes(testing.NewPatchSubresourceAction(bucketaccessesResource, c.ns, name, pt, data, subresources...), &v1alpha1.BucketAccess{}) + if obj == nil { return nil, err } diff --git a/client/clientset/versioned/typed/objectstorage/v1alpha1/fake/fake_objectstorage_client.go b/client/clientset/versioned/typed/objectstorage/v1alpha1/fake/fake_objectstorage_client.go index f029133a..a0689150 100644 --- a/client/clientset/versioned/typed/objectstorage/v1alpha1/fake/fake_objectstorage_client.go +++ b/client/clientset/versioned/typed/objectstorage/v1alpha1/fake/fake_objectstorage_client.go @@ -32,8 +32,8 @@ func (c *FakeObjectstorageV1alpha1) Buckets() v1alpha1.BucketInterface { return &FakeBuckets{c} } -func (c *FakeObjectstorageV1alpha1) BucketAccesses() v1alpha1.BucketAccessInterface { - return &FakeBucketAccesses{c} +func (c *FakeObjectstorageV1alpha1) BucketAccesses(namespace string) v1alpha1.BucketAccessInterface { + return &FakeBucketAccesses{c, namespace} } func (c *FakeObjectstorageV1alpha1) BucketAccessClasses() v1alpha1.BucketAccessClassInterface { diff --git a/client/clientset/versioned/typed/objectstorage/v1alpha1/objectstorage_client.go b/client/clientset/versioned/typed/objectstorage/v1alpha1/objectstorage_client.go index d3bf0b72..f687a7ad 100644 --- a/client/clientset/versioned/typed/objectstorage/v1alpha1/objectstorage_client.go +++ b/client/clientset/versioned/typed/objectstorage/v1alpha1/objectstorage_client.go @@ -44,8 +44,8 @@ func (c *ObjectstorageV1alpha1Client) Buckets() BucketInterface { return newBuckets(c) } -func (c *ObjectstorageV1alpha1Client) BucketAccesses() BucketAccessInterface { - return newBucketAccesses(c) +func (c *ObjectstorageV1alpha1Client) BucketAccesses(namespace string) BucketAccessInterface { + return newBucketAccesses(c, namespace) } func (c *ObjectstorageV1alpha1Client) BucketAccessClasses() BucketAccessClassInterface { diff --git a/client/informers/externalversions/objectstorage/v1alpha1/bucketaccess.go b/client/informers/externalversions/objectstorage/v1alpha1/bucketaccess.go index 2dd594df..c5beee30 100644 --- a/client/informers/externalversions/objectstorage/v1alpha1/bucketaccess.go +++ b/client/informers/externalversions/objectstorage/v1alpha1/bucketaccess.go @@ -42,32 +42,33 @@ type BucketAccessInformer interface { type bucketAccessInformer struct { factory internalinterfaces.SharedInformerFactory tweakListOptions internalinterfaces.TweakListOptionsFunc + namespace string } // NewBucketAccessInformer constructs a new informer for BucketAccess 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 NewBucketAccessInformer(client versioned.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { - return NewFilteredBucketAccessInformer(client, resyncPeriod, indexers, nil) +func NewBucketAccessInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { + return NewFilteredBucketAccessInformer(client, namespace, resyncPeriod, indexers, nil) } // NewFilteredBucketAccessInformer constructs a new informer for BucketAccess 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 NewFilteredBucketAccessInformer(client versioned.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { +func NewFilteredBucketAccessInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { return cache.NewSharedIndexInformer( &cache.ListWatch{ ListFunc: func(options v1.ListOptions) (runtime.Object, error) { if tweakListOptions != nil { tweakListOptions(&options) } - return client.ObjectstorageV1alpha1().BucketAccesses().List(context.TODO(), options) + return client.ObjectstorageV1alpha1().BucketAccesses(namespace).List(context.TODO(), options) }, WatchFunc: func(options v1.ListOptions) (watch.Interface, error) { if tweakListOptions != nil { tweakListOptions(&options) } - return client.ObjectstorageV1alpha1().BucketAccesses().Watch(context.TODO(), options) + return client.ObjectstorageV1alpha1().BucketAccesses(namespace).Watch(context.TODO(), options) }, }, &objectstoragev1alpha1.BucketAccess{}, @@ -77,7 +78,7 @@ func NewFilteredBucketAccessInformer(client versioned.Interface, resyncPeriod ti } func (f *bucketAccessInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { - return NewFilteredBucketAccessInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) + return NewFilteredBucketAccessInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) } func (f *bucketAccessInformer) Informer() cache.SharedIndexInformer { diff --git a/client/informers/externalversions/objectstorage/v1alpha1/interface.go b/client/informers/externalversions/objectstorage/v1alpha1/interface.go index bb117d76..b9742728 100644 --- a/client/informers/externalversions/objectstorage/v1alpha1/interface.go +++ b/client/informers/externalversions/objectstorage/v1alpha1/interface.go @@ -54,7 +54,7 @@ func (v *version) Buckets() BucketInformer { // BucketAccesses returns a BucketAccessInformer. func (v *version) BucketAccesses() BucketAccessInformer { - return &bucketAccessInformer{factory: v.factory, tweakListOptions: v.tweakListOptions} + return &bucketAccessInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions} } // BucketAccessClasses returns a BucketAccessClassInformer. diff --git a/client/listers/objectstorage/v1alpha1/bucketaccess.go b/client/listers/objectstorage/v1alpha1/bucketaccess.go index a9431fc8..a1d6c1a7 100644 --- a/client/listers/objectstorage/v1alpha1/bucketaccess.go +++ b/client/listers/objectstorage/v1alpha1/bucketaccess.go @@ -31,9 +31,8 @@ type BucketAccessLister interface { // List lists all BucketAccesses in the indexer. // Objects returned here must be treated as read-only. List(selector labels.Selector) (ret []*v1alpha1.BucketAccess, err error) - // Get retrieves the BucketAccess from the index for a given name. - // Objects returned here must be treated as read-only. - Get(name string) (*v1alpha1.BucketAccess, error) + // BucketAccesses returns an object that can list and get BucketAccesses. + BucketAccesses(namespace string) BucketAccessNamespaceLister BucketAccessListerExpansion } @@ -55,9 +54,41 @@ func (s *bucketAccessLister) List(selector labels.Selector) (ret []*v1alpha1.Buc return ret, err } -// Get retrieves the BucketAccess from the index for a given name. -func (s *bucketAccessLister) Get(name string) (*v1alpha1.BucketAccess, error) { - obj, exists, err := s.indexer.GetByKey(name) +// BucketAccesses returns an object that can list and get BucketAccesses. +func (s *bucketAccessLister) BucketAccesses(namespace string) BucketAccessNamespaceLister { + return bucketAccessNamespaceLister{indexer: s.indexer, namespace: namespace} +} + +// BucketAccessNamespaceLister helps list and get BucketAccesses. +// All objects returned here must be treated as read-only. +type BucketAccessNamespaceLister interface { + // List lists all BucketAccesses in the indexer for a given namespace. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1alpha1.BucketAccess, err error) + // Get retrieves the BucketAccess from the indexer for a given namespace and name. + // Objects returned here must be treated as read-only. + Get(name string) (*v1alpha1.BucketAccess, error) + BucketAccessNamespaceListerExpansion +} + +// bucketAccessNamespaceLister implements the BucketAccessNamespaceLister +// interface. +type bucketAccessNamespaceLister struct { + indexer cache.Indexer + namespace string +} + +// List lists all BucketAccesses in the indexer for a given namespace. +func (s bucketAccessNamespaceLister) List(selector labels.Selector) (ret []*v1alpha1.BucketAccess, err error) { + err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { + ret = append(ret, m.(*v1alpha1.BucketAccess)) + }) + return ret, err +} + +// Get retrieves the BucketAccess from the indexer for a given namespace and name. +func (s bucketAccessNamespaceLister) Get(name string) (*v1alpha1.BucketAccess, error) { + obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) if err != nil { return nil, err } diff --git a/client/listers/objectstorage/v1alpha1/expansion_generated.go b/client/listers/objectstorage/v1alpha1/expansion_generated.go index 5c5e2490..a6249a40 100644 --- a/client/listers/objectstorage/v1alpha1/expansion_generated.go +++ b/client/listers/objectstorage/v1alpha1/expansion_generated.go @@ -26,6 +26,10 @@ type BucketListerExpansion interface{} // BucketAccessLister. type BucketAccessListerExpansion interface{} +// BucketAccessNamespaceListerExpansion allows custom methods to be added to +// BucketAccessNamespaceLister. +type BucketAccessNamespaceListerExpansion interface{} + // BucketAccessClassListerExpansion allows custom methods to be added to // BucketAccessClassLister. type BucketAccessClassListerExpansion interface{}