diff --git a/pkg/apis/types/v1beta1/types.go b/pkg/apis/types/v1beta1/types.go index 80dd20c61..ffd1c422f 100644 --- a/pkg/apis/types/v1beta1/types.go +++ b/pkg/apis/types/v1beta1/types.go @@ -56,7 +56,6 @@ type ClusterOverride struct { // +genclient // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object -// +genclient:nonNamespaced type FederatedNamespace struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` @@ -76,7 +75,6 @@ type NamespaceTemplate struct { } // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object -// +genclient:nonNamespaced // FederatedNamespaceList contains a list of federatednamespacelists type FederatedNamespaceList struct { diff --git a/pkg/client/clientset/versioned/typed/types/v1beta1/fake/fake_federatednamespace.go b/pkg/client/clientset/versioned/typed/types/v1beta1/fake/fake_federatednamespace.go index eb570a196..36e821b7a 100644 --- a/pkg/client/clientset/versioned/typed/types/v1beta1/fake/fake_federatednamespace.go +++ b/pkg/client/clientset/versioned/typed/types/v1beta1/fake/fake_federatednamespace.go @@ -31,6 +31,7 @@ import ( // FakeFederatedNamespaces implements FederatedNamespaceInterface type FakeFederatedNamespaces struct { Fake *FakeTypesV1beta1 + ns string } var federatednamespacesResource = schema.GroupVersionResource{Group: "types.kubefed.io", Version: "v1beta1", Resource: "federatednamespaces"} @@ -40,7 +41,8 @@ var federatednamespacesKind = schema.GroupVersionKind{Group: "types.kubefed.io", // Get takes name of the federatedNamespace, and returns the corresponding federatedNamespace object, and an error if there is any. func (c *FakeFederatedNamespaces) Get(name string, options v1.GetOptions) (result *v1beta1.FederatedNamespace, err error) { obj, err := c.Fake. - Invokes(testing.NewRootGetAction(federatednamespacesResource, name), &v1beta1.FederatedNamespace{}) + Invokes(testing.NewGetAction(federatednamespacesResource, c.ns, name), &v1beta1.FederatedNamespace{}) + if obj == nil { return nil, err } @@ -50,7 +52,8 @@ func (c *FakeFederatedNamespaces) Get(name string, options v1.GetOptions) (resul // List takes label and field selectors, and returns the list of FederatedNamespaces that match those selectors. func (c *FakeFederatedNamespaces) List(opts v1.ListOptions) (result *v1beta1.FederatedNamespaceList, err error) { obj, err := c.Fake. - Invokes(testing.NewRootListAction(federatednamespacesResource, federatednamespacesKind, opts), &v1beta1.FederatedNamespaceList{}) + Invokes(testing.NewListAction(federatednamespacesResource, federatednamespacesKind, c.ns, opts), &v1beta1.FederatedNamespaceList{}) + if obj == nil { return nil, err } @@ -71,13 +74,15 @@ func (c *FakeFederatedNamespaces) List(opts v1.ListOptions) (result *v1beta1.Fed // Watch returns a watch.Interface that watches the requested federatedNamespaces. func (c *FakeFederatedNamespaces) Watch(opts v1.ListOptions) (watch.Interface, error) { return c.Fake. - InvokesWatch(testing.NewRootWatchAction(federatednamespacesResource, opts)) + InvokesWatch(testing.NewWatchAction(federatednamespacesResource, c.ns, opts)) + } // Create takes the representation of a federatedNamespace and creates it. Returns the server's representation of the federatedNamespace, and an error, if there is any. func (c *FakeFederatedNamespaces) Create(federatedNamespace *v1beta1.FederatedNamespace) (result *v1beta1.FederatedNamespace, err error) { obj, err := c.Fake. - Invokes(testing.NewRootCreateAction(federatednamespacesResource, federatedNamespace), &v1beta1.FederatedNamespace{}) + Invokes(testing.NewCreateAction(federatednamespacesResource, c.ns, federatedNamespace), &v1beta1.FederatedNamespace{}) + if obj == nil { return nil, err } @@ -87,7 +92,8 @@ func (c *FakeFederatedNamespaces) Create(federatedNamespace *v1beta1.FederatedNa // Update takes the representation of a federatedNamespace and updates it. Returns the server's representation of the federatedNamespace, and an error, if there is any. func (c *FakeFederatedNamespaces) Update(federatedNamespace *v1beta1.FederatedNamespace) (result *v1beta1.FederatedNamespace, err error) { obj, err := c.Fake. - Invokes(testing.NewRootUpdateAction(federatednamespacesResource, federatedNamespace), &v1beta1.FederatedNamespace{}) + Invokes(testing.NewUpdateAction(federatednamespacesResource, c.ns, federatedNamespace), &v1beta1.FederatedNamespace{}) + if obj == nil { return nil, err } @@ -97,13 +103,14 @@ func (c *FakeFederatedNamespaces) Update(federatedNamespace *v1beta1.FederatedNa // Delete takes name of the federatedNamespace and deletes it. Returns an error if one occurs. func (c *FakeFederatedNamespaces) Delete(name string, options *v1.DeleteOptions) error { _, err := c.Fake. - Invokes(testing.NewRootDeleteAction(federatednamespacesResource, name), &v1beta1.FederatedNamespace{}) + Invokes(testing.NewDeleteAction(federatednamespacesResource, c.ns, name), &v1beta1.FederatedNamespace{}) + return err } // DeleteCollection deletes a collection of objects. func (c *FakeFederatedNamespaces) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { - action := testing.NewRootDeleteCollectionAction(federatednamespacesResource, listOptions) + action := testing.NewDeleteCollectionAction(federatednamespacesResource, c.ns, listOptions) _, err := c.Fake.Invokes(action, &v1beta1.FederatedNamespaceList{}) return err @@ -112,7 +119,8 @@ func (c *FakeFederatedNamespaces) DeleteCollection(options *v1.DeleteOptions, li // Patch applies the patch and returns the patched federatedNamespace. func (c *FakeFederatedNamespaces) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1beta1.FederatedNamespace, err error) { obj, err := c.Fake. - Invokes(testing.NewRootPatchSubresourceAction(federatednamespacesResource, name, pt, data, subresources...), &v1beta1.FederatedNamespace{}) + Invokes(testing.NewPatchSubresourceAction(federatednamespacesResource, c.ns, name, pt, data, subresources...), &v1beta1.FederatedNamespace{}) + if obj == nil { return nil, err } diff --git a/pkg/client/clientset/versioned/typed/types/v1beta1/fake/fake_types_client.go b/pkg/client/clientset/versioned/typed/types/v1beta1/fake/fake_types_client.go index ff952e916..fca25d5dc 100644 --- a/pkg/client/clientset/versioned/typed/types/v1beta1/fake/fake_types_client.go +++ b/pkg/client/clientset/versioned/typed/types/v1beta1/fake/fake_types_client.go @@ -28,8 +28,8 @@ type FakeTypesV1beta1 struct { *testing.Fake } -func (c *FakeTypesV1beta1) FederatedNamespaces() v1beta1.FederatedNamespaceInterface { - return &FakeFederatedNamespaces{c} +func (c *FakeTypesV1beta1) FederatedNamespaces(namespace string) v1beta1.FederatedNamespaceInterface { + return &FakeFederatedNamespaces{c, namespace} } // RESTClient returns a RESTClient that is used to communicate diff --git a/pkg/client/clientset/versioned/typed/types/v1beta1/federatednamespace.go b/pkg/client/clientset/versioned/typed/types/v1beta1/federatednamespace.go index c08a73587..0c81d868d 100644 --- a/pkg/client/clientset/versioned/typed/types/v1beta1/federatednamespace.go +++ b/pkg/client/clientset/versioned/typed/types/v1beta1/federatednamespace.go @@ -32,7 +32,7 @@ import ( // FederatedNamespacesGetter has a method to return a FederatedNamespaceInterface. // A group's client should implement this interface. type FederatedNamespacesGetter interface { - FederatedNamespaces() FederatedNamespaceInterface + FederatedNamespaces(namespace string) FederatedNamespaceInterface } // FederatedNamespaceInterface has methods to work with FederatedNamespace resources. @@ -51,12 +51,14 @@ type FederatedNamespaceInterface interface { // federatedNamespaces implements FederatedNamespaceInterface type federatedNamespaces struct { client rest.Interface + ns string } // newFederatedNamespaces returns a FederatedNamespaces -func newFederatedNamespaces(c *TypesV1beta1Client) *federatedNamespaces { +func newFederatedNamespaces(c *TypesV1beta1Client, namespace string) *federatedNamespaces { return &federatedNamespaces{ client: c.RESTClient(), + ns: namespace, } } @@ -64,6 +66,7 @@ func newFederatedNamespaces(c *TypesV1beta1Client) *federatedNamespaces { func (c *federatedNamespaces) Get(name string, options v1.GetOptions) (result *v1beta1.FederatedNamespace, err error) { result = &v1beta1.FederatedNamespace{} err = c.client.Get(). + Namespace(c.ns). Resource("federatednamespaces"). Name(name). VersionedParams(&options, scheme.ParameterCodec). @@ -80,6 +83,7 @@ func (c *federatedNamespaces) List(opts v1.ListOptions) (result *v1beta1.Federat } result = &v1beta1.FederatedNamespaceList{} err = c.client.Get(). + Namespace(c.ns). Resource("federatednamespaces"). VersionedParams(&opts, scheme.ParameterCodec). Timeout(timeout). @@ -96,6 +100,7 @@ func (c *federatedNamespaces) Watch(opts v1.ListOptions) (watch.Interface, error } opts.Watch = true return c.client.Get(). + Namespace(c.ns). Resource("federatednamespaces"). VersionedParams(&opts, scheme.ParameterCodec). Timeout(timeout). @@ -106,6 +111,7 @@ func (c *federatedNamespaces) Watch(opts v1.ListOptions) (watch.Interface, error func (c *federatedNamespaces) Create(federatedNamespace *v1beta1.FederatedNamespace) (result *v1beta1.FederatedNamespace, err error) { result = &v1beta1.FederatedNamespace{} err = c.client.Post(). + Namespace(c.ns). Resource("federatednamespaces"). Body(federatedNamespace). Do(). @@ -117,6 +123,7 @@ func (c *federatedNamespaces) Create(federatedNamespace *v1beta1.FederatedNamesp func (c *federatedNamespaces) Update(federatedNamespace *v1beta1.FederatedNamespace) (result *v1beta1.FederatedNamespace, err error) { result = &v1beta1.FederatedNamespace{} err = c.client.Put(). + Namespace(c.ns). Resource("federatednamespaces"). Name(federatedNamespace.Name). Body(federatedNamespace). @@ -128,6 +135,7 @@ func (c *federatedNamespaces) Update(federatedNamespace *v1beta1.FederatedNamesp // Delete takes name of the federatedNamespace and deletes it. Returns an error if one occurs. func (c *federatedNamespaces) Delete(name string, options *v1.DeleteOptions) error { return c.client.Delete(). + Namespace(c.ns). Resource("federatednamespaces"). Name(name). Body(options). @@ -142,6 +150,7 @@ func (c *federatedNamespaces) DeleteCollection(options *v1.DeleteOptions, listOp timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second } return c.client.Delete(). + Namespace(c.ns). Resource("federatednamespaces"). VersionedParams(&listOptions, scheme.ParameterCodec). Timeout(timeout). @@ -154,6 +163,7 @@ func (c *federatedNamespaces) DeleteCollection(options *v1.DeleteOptions, listOp func (c *federatedNamespaces) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1beta1.FederatedNamespace, err error) { result = &v1beta1.FederatedNamespace{} err = c.client.Patch(pt). + Namespace(c.ns). Resource("federatednamespaces"). SubResource(subresources...). Name(name). diff --git a/pkg/client/clientset/versioned/typed/types/v1beta1/types_client.go b/pkg/client/clientset/versioned/typed/types/v1beta1/types_client.go index f053bb6f3..bedec6c09 100644 --- a/pkg/client/clientset/versioned/typed/types/v1beta1/types_client.go +++ b/pkg/client/clientset/versioned/typed/types/v1beta1/types_client.go @@ -34,8 +34,8 @@ type TypesV1beta1Client struct { restClient rest.Interface } -func (c *TypesV1beta1Client) FederatedNamespaces() FederatedNamespaceInterface { - return newFederatedNamespaces(c) +func (c *TypesV1beta1Client) FederatedNamespaces(namespace string) FederatedNamespaceInterface { + return newFederatedNamespaces(c, namespace) } // NewForConfig creates a new TypesV1beta1Client for the given config. diff --git a/pkg/client/informers/externalversions/types/v1beta1/federatednamespace.go b/pkg/client/informers/externalversions/types/v1beta1/federatednamespace.go index 7deb70a36..6f5c8e6fa 100644 --- a/pkg/client/informers/externalversions/types/v1beta1/federatednamespace.go +++ b/pkg/client/informers/externalversions/types/v1beta1/federatednamespace.go @@ -41,32 +41,33 @@ type FederatedNamespaceInformer interface { type federatedNamespaceInformer struct { factory internalinterfaces.SharedInformerFactory tweakListOptions internalinterfaces.TweakListOptionsFunc + namespace string } // NewFederatedNamespaceInformer constructs a new informer for FederatedNamespace 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 NewFederatedNamespaceInformer(client versioned.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { - return NewFilteredFederatedNamespaceInformer(client, resyncPeriod, indexers, nil) +func NewFederatedNamespaceInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { + return NewFilteredFederatedNamespaceInformer(client, namespace, resyncPeriod, indexers, nil) } // NewFilteredFederatedNamespaceInformer constructs a new informer for FederatedNamespace 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 NewFilteredFederatedNamespaceInformer(client versioned.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { +func NewFilteredFederatedNamespaceInformer(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.TypesV1beta1().FederatedNamespaces().List(options) + return client.TypesV1beta1().FederatedNamespaces(namespace).List(options) }, WatchFunc: func(options v1.ListOptions) (watch.Interface, error) { if tweakListOptions != nil { tweakListOptions(&options) } - return client.TypesV1beta1().FederatedNamespaces().Watch(options) + return client.TypesV1beta1().FederatedNamespaces(namespace).Watch(options) }, }, &typesv1beta1.FederatedNamespace{}, @@ -76,7 +77,7 @@ func NewFilteredFederatedNamespaceInformer(client versioned.Interface, resyncPer } func (f *federatedNamespaceInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { - return NewFilteredFederatedNamespaceInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) + return NewFilteredFederatedNamespaceInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) } func (f *federatedNamespaceInformer) Informer() cache.SharedIndexInformer { diff --git a/pkg/client/informers/externalversions/types/v1beta1/interface.go b/pkg/client/informers/externalversions/types/v1beta1/interface.go index f04600705..8ec261096 100644 --- a/pkg/client/informers/externalversions/types/v1beta1/interface.go +++ b/pkg/client/informers/externalversions/types/v1beta1/interface.go @@ -41,5 +41,5 @@ func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakList // FederatedNamespaces returns a FederatedNamespaceInformer. func (v *version) FederatedNamespaces() FederatedNamespaceInformer { - return &federatedNamespaceInformer{factory: v.factory, tweakListOptions: v.tweakListOptions} + return &federatedNamespaceInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions} } diff --git a/pkg/client/listers/types/v1beta1/expansion_generated.go b/pkg/client/listers/types/v1beta1/expansion_generated.go index cc1997a0c..f22cdd76b 100644 --- a/pkg/client/listers/types/v1beta1/expansion_generated.go +++ b/pkg/client/listers/types/v1beta1/expansion_generated.go @@ -21,3 +21,7 @@ package v1beta1 // FederatedNamespaceListerExpansion allows custom methods to be added to // FederatedNamespaceLister. type FederatedNamespaceListerExpansion interface{} + +// FederatedNamespaceNamespaceListerExpansion allows custom methods to be added to +// FederatedNamespaceNamespaceLister. +type FederatedNamespaceNamespaceListerExpansion interface{} diff --git a/pkg/client/listers/types/v1beta1/federatednamespace.go b/pkg/client/listers/types/v1beta1/federatednamespace.go index b0967fcd9..9fb4fb3dc 100644 --- a/pkg/client/listers/types/v1beta1/federatednamespace.go +++ b/pkg/client/listers/types/v1beta1/federatednamespace.go @@ -29,8 +29,8 @@ import ( type FederatedNamespaceLister interface { // List lists all FederatedNamespaces in the indexer. List(selector labels.Selector) (ret []*v1beta1.FederatedNamespace, err error) - // Get retrieves the FederatedNamespace from the index for a given name. - Get(name string) (*v1beta1.FederatedNamespace, error) + // FederatedNamespaces returns an object that can list and get FederatedNamespaces. + FederatedNamespaces(namespace string) FederatedNamespaceNamespaceLister FederatedNamespaceListerExpansion } @@ -52,9 +52,38 @@ func (s *federatedNamespaceLister) List(selector labels.Selector) (ret []*v1beta return ret, err } -// Get retrieves the FederatedNamespace from the index for a given name. -func (s *federatedNamespaceLister) Get(name string) (*v1beta1.FederatedNamespace, error) { - obj, exists, err := s.indexer.GetByKey(name) +// FederatedNamespaces returns an object that can list and get FederatedNamespaces. +func (s *federatedNamespaceLister) FederatedNamespaces(namespace string) FederatedNamespaceNamespaceLister { + return federatedNamespaceNamespaceLister{indexer: s.indexer, namespace: namespace} +} + +// FederatedNamespaceNamespaceLister helps list and get FederatedNamespaces. +type FederatedNamespaceNamespaceLister interface { + // List lists all FederatedNamespaces in the indexer for a given namespace. + List(selector labels.Selector) (ret []*v1beta1.FederatedNamespace, err error) + // Get retrieves the FederatedNamespace from the indexer for a given namespace and name. + Get(name string) (*v1beta1.FederatedNamespace, error) + FederatedNamespaceNamespaceListerExpansion +} + +// federatedNamespaceNamespaceLister implements the FederatedNamespaceNamespaceLister +// interface. +type federatedNamespaceNamespaceLister struct { + indexer cache.Indexer + namespace string +} + +// List lists all FederatedNamespaces in the indexer for a given namespace. +func (s federatedNamespaceNamespaceLister) List(selector labels.Selector) (ret []*v1beta1.FederatedNamespace, err error) { + err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { + ret = append(ret, m.(*v1beta1.FederatedNamespace)) + }) + return ret, err +} + +// Get retrieves the FederatedNamespace from the indexer for a given namespace and name. +func (s federatedNamespaceNamespaceLister) Get(name string) (*v1beta1.FederatedNamespace, error) { + obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) if err != nil { return nil, err } diff --git a/pkg/models/resources/v1alpha3/federatednamespace/federatednamespaces.go b/pkg/models/resources/v1alpha3/federatednamespace/federatednamespaces.go index 157bbaa27..cb216e337 100644 --- a/pkg/models/resources/v1alpha3/federatednamespace/federatednamespaces.go +++ b/pkg/models/resources/v1alpha3/federatednamespace/federatednamespaces.go @@ -33,8 +33,8 @@ func New(informers informers.SharedInformerFactory) v1alpha3.Interface { return &federatedNamespacesGetter{informers: informers} } -func (n federatedNamespacesGetter) Get(_, name string) (runtime.Object, error) { - return n.informers.Types().V1beta1().FederatedNamespaces().Lister().Get(name) +func (n federatedNamespacesGetter) Get(namespace, name string) (runtime.Object, error) { + return n.informers.Types().V1beta1().FederatedNamespaces().Lister().FederatedNamespaces(namespace).Get(name) } func (n federatedNamespacesGetter) List(_ string, query *query.Query) (*api.ListResult, error) { diff --git a/pkg/models/tenant/tenant.go b/pkg/models/tenant/tenant.go index 29327dfb3..1f1f200e7 100644 --- a/pkg/models/tenant/tenant.go +++ b/pkg/models/tenant/tenant.go @@ -222,8 +222,10 @@ func (t *tenantOperator) ListFederatedNamespaces(user user.Info, workspace strin for _, roleBinding := range roleBindings { namespace, err := t.resourceGetter.Get(typesv1beta1.ResourcesPluralFedNamespace, roleBinding.Namespace, roleBinding.Namespace) - if err != nil { + if errors.IsNotFound(err) { + continue + } klog.Error(err) return nil, err } @@ -239,7 +241,7 @@ func (t *tenantOperator) ListFederatedNamespaces(user user.Info, workspace strin } result := resources.DefaultList(namespaces, queryParam, func(left runtime.Object, right runtime.Object, field query.Field) bool { - return resources.DefaultObjectMetaCompare(left.(*corev1.Namespace).ObjectMeta, right.(*corev1.Namespace).ObjectMeta, field) + return resources.DefaultObjectMetaCompare(left.(*typesv1beta1.FederatedNamespace).ObjectMeta, right.(*typesv1beta1.FederatedNamespace).ObjectMeta, field) }, func(object runtime.Object, filter query.Filter) bool { namespace := object.(*typesv1beta1.FederatedNamespace).ObjectMeta if workspace != "" {