diff --git a/apis/apps/v1beta2/zz_generated_deepcopy.go b/apis/apps/v1beta2/zz_generated_deepcopy.go new file mode 100644 index 00000000..8c2cbc05 --- /dev/null +++ b/apis/apps/v1beta2/zz_generated_deepcopy.go @@ -0,0 +1,40 @@ +package v1beta2 + +import ( + apps_v1beta2 "k8s.io/api/apps/v1beta2" + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DeploymentList) DeepCopyInto(out *DeploymentList) { + *out = *in + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]apps_v1beta2.Deployment, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeploymentList. +func (in *DeploymentList) DeepCopy() *DeploymentList { + if in == nil { + return nil + } + out := new(DeploymentList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *DeploymentList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } else { + return nil + } +} diff --git a/apis/apps/v1beta2/zz_generated_deployment_controller.go b/apis/apps/v1beta2/zz_generated_deployment_controller.go new file mode 100644 index 00000000..53d9755d --- /dev/null +++ b/apis/apps/v1beta2/zz_generated_deployment_controller.go @@ -0,0 +1,188 @@ +package v1beta2 + +import ( + "context" + + "github.com/rancher/norman/clientbase" + "github.com/rancher/norman/controller" + "k8s.io/api/apps/v1beta2" + "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/watch" + "k8s.io/client-go/tools/cache" +) + +var ( + DeploymentGroupVersionKind = schema.GroupVersionKind{ + Version: "v1beta2", + Group: "apps", + Kind: "Deployment", + } + DeploymentResource = metav1.APIResource{ + Name: "deployments", + SingularName: "deployment", + Namespaced: false, + Kind: DeploymentGroupVersionKind.Kind, + } +) + +type DeploymentList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []v1beta2.Deployment +} + +type DeploymentHandlerFunc func(key string, obj *v1beta2.Deployment) error + +type DeploymentLister interface { + List(namespace string, selector labels.Selector) (ret []*v1beta2.Deployment, err error) + Get(namespace, name string) (*v1beta2.Deployment, error) +} + +type DeploymentController interface { + Informer() cache.SharedIndexInformer + Lister() DeploymentLister + AddHandler(handler DeploymentHandlerFunc) + Enqueue(namespace, name string) + Sync(ctx context.Context) error + Start(ctx context.Context, threadiness int) error +} + +type DeploymentInterface interface { + ObjectClient() *clientbase.ObjectClient + Create(*v1beta2.Deployment) (*v1beta2.Deployment, error) + Get(name string, opts metav1.GetOptions) (*v1beta2.Deployment, error) + Update(*v1beta2.Deployment) (*v1beta2.Deployment, error) + Delete(name string, options *metav1.DeleteOptions) error + List(opts metav1.ListOptions) (*v1beta2.DeploymentList, error) + Watch(opts metav1.ListOptions) (watch.Interface, error) + DeleteCollection(deleteOpts *metav1.DeleteOptions, listOpts metav1.ListOptions) error + Controller() DeploymentController +} + +type deploymentLister struct { + controller *deploymentController +} + +func (l *deploymentLister) List(namespace string, selector labels.Selector) (ret []*v1beta2.Deployment, err error) { + err = cache.ListAllByNamespace(l.controller.Informer().GetIndexer(), namespace, selector, func(obj interface{}) { + ret = append(ret, obj.(*v1beta2.Deployment)) + }) + return +} + +func (l *deploymentLister) Get(namespace, name string) (*v1beta2.Deployment, error) { + obj, exists, err := l.controller.Informer().GetIndexer().GetByKey(namespace + "/" + name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(schema.GroupResource{ + Group: DeploymentGroupVersionKind.Group, + Resource: "deployment", + }, name) + } + return obj.(*v1beta2.Deployment), nil +} + +type deploymentController struct { + controller.GenericController +} + +func (c *deploymentController) Lister() DeploymentLister { + return &deploymentLister{ + controller: c, + } +} + +func (c *deploymentController) AddHandler(handler DeploymentHandlerFunc) { + c.GenericController.AddHandler(func(key string) error { + obj, exists, err := c.Informer().GetStore().GetByKey(key) + if err != nil { + return err + } + if !exists { + return handler(key, nil) + } + return handler(key, obj.(*v1beta2.Deployment)) + }) +} + +type deploymentFactory struct { +} + +func (c deploymentFactory) Object() runtime.Object { + return &v1beta2.Deployment{} +} + +func (c deploymentFactory) List() runtime.Object { + return &DeploymentList{} +} + +func (s *deploymentClient) Controller() DeploymentController { + s.client.Lock() + defer s.client.Unlock() + + c, ok := s.client.deploymentControllers[s.ns] + if ok { + return c + } + + genericController := controller.NewGenericController(DeploymentGroupVersionKind.Kind+"Controller", + s.objectClient) + + c = &deploymentController{ + GenericController: genericController, + } + + s.client.deploymentControllers[s.ns] = c + s.client.starters = append(s.client.starters, c) + + return c +} + +type deploymentClient struct { + client *Client + ns string + objectClient *clientbase.ObjectClient + controller DeploymentController +} + +func (s *deploymentClient) ObjectClient() *clientbase.ObjectClient { + return s.objectClient +} + +func (s *deploymentClient) Create(o *v1beta2.Deployment) (*v1beta2.Deployment, error) { + obj, err := s.objectClient.Create(o) + return obj.(*v1beta2.Deployment), err +} + +func (s *deploymentClient) Get(name string, opts metav1.GetOptions) (*v1beta2.Deployment, error) { + obj, err := s.objectClient.Get(name, opts) + return obj.(*v1beta2.Deployment), err +} + +func (s *deploymentClient) Update(o *v1beta2.Deployment) (*v1beta2.Deployment, error) { + obj, err := s.objectClient.Update(o.Name, o) + return obj.(*v1beta2.Deployment), err +} + +func (s *deploymentClient) Delete(name string, options *metav1.DeleteOptions) error { + return s.objectClient.Delete(name, options) +} + +func (s *deploymentClient) List(opts metav1.ListOptions) (*v1beta2.DeploymentList, error) { + obj, err := s.objectClient.List(opts) + return obj.(*v1beta2.DeploymentList), err +} + +func (s *deploymentClient) Watch(opts metav1.ListOptions) (watch.Interface, error) { + return s.objectClient.Watch(opts) +} + +func (s *deploymentClient) DeleteCollection(deleteOpts *metav1.DeleteOptions, listOpts metav1.ListOptions) error { + return s.objectClient.DeleteCollection(deleteOpts, listOpts) +} diff --git a/apis/apps/v1beta2/zz_generated_k8s_client.go b/apis/apps/v1beta2/zz_generated_k8s_client.go new file mode 100644 index 00000000..3f1711fd --- /dev/null +++ b/apis/apps/v1beta2/zz_generated_k8s_client.go @@ -0,0 +1,69 @@ +package v1beta2 + +import ( + "context" + "sync" + + "github.com/rancher/norman/clientbase" + "github.com/rancher/norman/controller" + "k8s.io/client-go/dynamic" + "k8s.io/client-go/rest" +) + +type Interface interface { + RESTClient() rest.Interface + controller.Starter + + DeploymentsGetter +} + +type Client struct { + sync.Mutex + restClient rest.Interface + starters []controller.Starter + + deploymentControllers map[string]DeploymentController +} + +func NewForConfig(config rest.Config) (Interface, error) { + if config.NegotiatedSerializer == nil { + configConfig := dynamic.ContentConfig() + config.NegotiatedSerializer = configConfig.NegotiatedSerializer + } + + restClient, err := rest.UnversionedRESTClientFor(&config) + if err != nil { + return nil, err + } + + return &Client{ + restClient: restClient, + + deploymentControllers: map[string]DeploymentController{}, + }, nil +} + +func (c *Client) RESTClient() rest.Interface { + return c.restClient +} + +func (c *Client) Sync(ctx context.Context) error { + return controller.Sync(ctx, c.starters...) +} + +func (c *Client) Start(ctx context.Context, threadiness int) error { + return controller.Start(ctx, threadiness, c.starters...) +} + +type DeploymentsGetter interface { + Deployments(namespace string) DeploymentInterface +} + +func (c *Client) Deployments(namespace string) DeploymentInterface { + objectClient := clientbase.NewObjectClient(namespace, c.restClient, &DeploymentResource, DeploymentGroupVersionKind, deploymentFactory{}) + return &deploymentClient{ + ns: namespace, + client: c, + objectClient: objectClient, + } +} diff --git a/apis/authorization.cattle.io/v1/zz_generated_cluster_role_template_binding_controller.go b/apis/authorization.cattle.io/v1/zz_generated_cluster_role_template_binding_controller.go index ec2bb400..08f59e38 100644 --- a/apis/authorization.cattle.io/v1/zz_generated_cluster_role_template_binding_controller.go +++ b/apis/authorization.cattle.io/v1/zz_generated_cluster_role_template_binding_controller.go @@ -5,7 +5,9 @@ import ( "github.com/rancher/norman/clientbase" "github.com/rancher/norman/controller" + "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/watch" @@ -34,14 +36,22 @@ type ClusterRoleTemplateBindingList struct { type ClusterRoleTemplateBindingHandlerFunc func(key string, obj *ClusterRoleTemplateBinding) error +type ClusterRoleTemplateBindingLister interface { + List(namespace string, selector labels.Selector) (ret []*ClusterRoleTemplateBinding, err error) + Get(namespace, name string) (*ClusterRoleTemplateBinding, error) +} + type ClusterRoleTemplateBindingController interface { Informer() cache.SharedIndexInformer + Lister() ClusterRoleTemplateBindingLister AddHandler(handler ClusterRoleTemplateBindingHandlerFunc) Enqueue(namespace, name string) + Sync(ctx context.Context) error Start(ctx context.Context, threadiness int) error } type ClusterRoleTemplateBindingInterface interface { + ObjectClient() *clientbase.ObjectClient Create(*ClusterRoleTemplateBinding) (*ClusterRoleTemplateBinding, error) Get(name string, opts metav1.GetOptions) (*ClusterRoleTemplateBinding, error) Update(*ClusterRoleTemplateBinding) (*ClusterRoleTemplateBinding, error) @@ -52,10 +62,41 @@ type ClusterRoleTemplateBindingInterface interface { Controller() ClusterRoleTemplateBindingController } +type clusterRoleTemplateBindingLister struct { + controller *clusterRoleTemplateBindingController +} + +func (l *clusterRoleTemplateBindingLister) List(namespace string, selector labels.Selector) (ret []*ClusterRoleTemplateBinding, err error) { + err = cache.ListAllByNamespace(l.controller.Informer().GetIndexer(), namespace, selector, func(obj interface{}) { + ret = append(ret, obj.(*ClusterRoleTemplateBinding)) + }) + return +} + +func (l *clusterRoleTemplateBindingLister) Get(namespace, name string) (*ClusterRoleTemplateBinding, error) { + obj, exists, err := l.controller.Informer().GetIndexer().GetByKey(namespace + "/" + name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(schema.GroupResource{ + Group: ClusterRoleTemplateBindingGroupVersionKind.Group, + Resource: "clusterRoleTemplateBinding", + }, name) + } + return obj.(*ClusterRoleTemplateBinding), nil +} + type clusterRoleTemplateBindingController struct { controller.GenericController } +func (c *clusterRoleTemplateBindingController) Lister() ClusterRoleTemplateBindingLister { + return &clusterRoleTemplateBindingLister{ + controller: c, + } +} + func (c *clusterRoleTemplateBindingController) AddHandler(handler ClusterRoleTemplateBindingHandlerFunc) { c.GenericController.AddHandler(func(key string) error { obj, exists, err := c.Informer().GetStore().GetByKey(key) @@ -97,6 +138,7 @@ func (s *clusterRoleTemplateBindingClient) Controller() ClusterRoleTemplateBindi } s.client.clusterRoleTemplateBindingControllers[s.ns] = c + s.client.starters = append(s.client.starters, c) return c } @@ -108,6 +150,10 @@ type clusterRoleTemplateBindingClient struct { controller ClusterRoleTemplateBindingController } +func (s *clusterRoleTemplateBindingClient) ObjectClient() *clientbase.ObjectClient { + return s.objectClient +} + func (s *clusterRoleTemplateBindingClient) Create(o *ClusterRoleTemplateBinding) (*ClusterRoleTemplateBinding, error) { obj, err := s.objectClient.Create(o) return obj.(*ClusterRoleTemplateBinding), err diff --git a/apis/authorization.cattle.io/v1/zz_generated_cluster_role_template_controller.go b/apis/authorization.cattle.io/v1/zz_generated_cluster_role_template_controller.go index c43d5060..af9a4215 100644 --- a/apis/authorization.cattle.io/v1/zz_generated_cluster_role_template_controller.go +++ b/apis/authorization.cattle.io/v1/zz_generated_cluster_role_template_controller.go @@ -5,7 +5,9 @@ import ( "github.com/rancher/norman/clientbase" "github.com/rancher/norman/controller" + "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/watch" @@ -34,14 +36,22 @@ type ClusterRoleTemplateList struct { type ClusterRoleTemplateHandlerFunc func(key string, obj *ClusterRoleTemplate) error +type ClusterRoleTemplateLister interface { + List(namespace string, selector labels.Selector) (ret []*ClusterRoleTemplate, err error) + Get(namespace, name string) (*ClusterRoleTemplate, error) +} + type ClusterRoleTemplateController interface { Informer() cache.SharedIndexInformer + Lister() ClusterRoleTemplateLister AddHandler(handler ClusterRoleTemplateHandlerFunc) Enqueue(namespace, name string) + Sync(ctx context.Context) error Start(ctx context.Context, threadiness int) error } type ClusterRoleTemplateInterface interface { + ObjectClient() *clientbase.ObjectClient Create(*ClusterRoleTemplate) (*ClusterRoleTemplate, error) Get(name string, opts metav1.GetOptions) (*ClusterRoleTemplate, error) Update(*ClusterRoleTemplate) (*ClusterRoleTemplate, error) @@ -52,10 +62,41 @@ type ClusterRoleTemplateInterface interface { Controller() ClusterRoleTemplateController } +type clusterRoleTemplateLister struct { + controller *clusterRoleTemplateController +} + +func (l *clusterRoleTemplateLister) List(namespace string, selector labels.Selector) (ret []*ClusterRoleTemplate, err error) { + err = cache.ListAllByNamespace(l.controller.Informer().GetIndexer(), namespace, selector, func(obj interface{}) { + ret = append(ret, obj.(*ClusterRoleTemplate)) + }) + return +} + +func (l *clusterRoleTemplateLister) Get(namespace, name string) (*ClusterRoleTemplate, error) { + obj, exists, err := l.controller.Informer().GetIndexer().GetByKey(namespace + "/" + name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(schema.GroupResource{ + Group: ClusterRoleTemplateGroupVersionKind.Group, + Resource: "clusterRoleTemplate", + }, name) + } + return obj.(*ClusterRoleTemplate), nil +} + type clusterRoleTemplateController struct { controller.GenericController } +func (c *clusterRoleTemplateController) Lister() ClusterRoleTemplateLister { + return &clusterRoleTemplateLister{ + controller: c, + } +} + func (c *clusterRoleTemplateController) AddHandler(handler ClusterRoleTemplateHandlerFunc) { c.GenericController.AddHandler(func(key string) error { obj, exists, err := c.Informer().GetStore().GetByKey(key) @@ -97,6 +138,7 @@ func (s *clusterRoleTemplateClient) Controller() ClusterRoleTemplateController { } s.client.clusterRoleTemplateControllers[s.ns] = c + s.client.starters = append(s.client.starters, c) return c } @@ -108,6 +150,10 @@ type clusterRoleTemplateClient struct { controller ClusterRoleTemplateController } +func (s *clusterRoleTemplateClient) ObjectClient() *clientbase.ObjectClient { + return s.objectClient +} + func (s *clusterRoleTemplateClient) Create(o *ClusterRoleTemplate) (*ClusterRoleTemplate, error) { obj, err := s.objectClient.Create(o) return obj.(*ClusterRoleTemplate), err diff --git a/apis/authorization.cattle.io/v1/zz_generated_k8s_client.go b/apis/authorization.cattle.io/v1/zz_generated_k8s_client.go index 69e1371b..597dd680 100644 --- a/apis/authorization.cattle.io/v1/zz_generated_k8s_client.go +++ b/apis/authorization.cattle.io/v1/zz_generated_k8s_client.go @@ -1,15 +1,18 @@ package v1 import ( + "context" "sync" "github.com/rancher/norman/clientbase" + "github.com/rancher/norman/controller" "k8s.io/client-go/dynamic" "k8s.io/client-go/rest" ) type Interface interface { RESTClient() rest.Interface + controller.Starter ProjectsGetter ProjectRoleTemplatesGetter @@ -22,6 +25,7 @@ type Interface interface { type Client struct { sync.Mutex restClient rest.Interface + starters []controller.Starter projectControllers map[string]ProjectController projectRoleTemplateControllers map[string]ProjectRoleTemplateController @@ -58,6 +62,14 @@ func (c *Client) RESTClient() rest.Interface { return c.restClient } +func (c *Client) Sync(ctx context.Context) error { + return controller.Sync(ctx, c.starters...) +} + +func (c *Client) Start(ctx context.Context, threadiness int) error { + return controller.Start(ctx, threadiness, c.starters...) +} + type ProjectsGetter interface { Projects(namespace string) ProjectInterface } diff --git a/apis/authorization.cattle.io/v1/zz_generated_pod_security_policy_template_controller.go b/apis/authorization.cattle.io/v1/zz_generated_pod_security_policy_template_controller.go index e92030d7..65c9391e 100644 --- a/apis/authorization.cattle.io/v1/zz_generated_pod_security_policy_template_controller.go +++ b/apis/authorization.cattle.io/v1/zz_generated_pod_security_policy_template_controller.go @@ -5,7 +5,9 @@ import ( "github.com/rancher/norman/clientbase" "github.com/rancher/norman/controller" + "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/watch" @@ -34,14 +36,22 @@ type PodSecurityPolicyTemplateList struct { type PodSecurityPolicyTemplateHandlerFunc func(key string, obj *PodSecurityPolicyTemplate) error +type PodSecurityPolicyTemplateLister interface { + List(namespace string, selector labels.Selector) (ret []*PodSecurityPolicyTemplate, err error) + Get(namespace, name string) (*PodSecurityPolicyTemplate, error) +} + type PodSecurityPolicyTemplateController interface { Informer() cache.SharedIndexInformer + Lister() PodSecurityPolicyTemplateLister AddHandler(handler PodSecurityPolicyTemplateHandlerFunc) Enqueue(namespace, name string) + Sync(ctx context.Context) error Start(ctx context.Context, threadiness int) error } type PodSecurityPolicyTemplateInterface interface { + ObjectClient() *clientbase.ObjectClient Create(*PodSecurityPolicyTemplate) (*PodSecurityPolicyTemplate, error) Get(name string, opts metav1.GetOptions) (*PodSecurityPolicyTemplate, error) Update(*PodSecurityPolicyTemplate) (*PodSecurityPolicyTemplate, error) @@ -52,10 +62,41 @@ type PodSecurityPolicyTemplateInterface interface { Controller() PodSecurityPolicyTemplateController } +type podSecurityPolicyTemplateLister struct { + controller *podSecurityPolicyTemplateController +} + +func (l *podSecurityPolicyTemplateLister) List(namespace string, selector labels.Selector) (ret []*PodSecurityPolicyTemplate, err error) { + err = cache.ListAllByNamespace(l.controller.Informer().GetIndexer(), namespace, selector, func(obj interface{}) { + ret = append(ret, obj.(*PodSecurityPolicyTemplate)) + }) + return +} + +func (l *podSecurityPolicyTemplateLister) Get(namespace, name string) (*PodSecurityPolicyTemplate, error) { + obj, exists, err := l.controller.Informer().GetIndexer().GetByKey(namespace + "/" + name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(schema.GroupResource{ + Group: PodSecurityPolicyTemplateGroupVersionKind.Group, + Resource: "podSecurityPolicyTemplate", + }, name) + } + return obj.(*PodSecurityPolicyTemplate), nil +} + type podSecurityPolicyTemplateController struct { controller.GenericController } +func (c *podSecurityPolicyTemplateController) Lister() PodSecurityPolicyTemplateLister { + return &podSecurityPolicyTemplateLister{ + controller: c, + } +} + func (c *podSecurityPolicyTemplateController) AddHandler(handler PodSecurityPolicyTemplateHandlerFunc) { c.GenericController.AddHandler(func(key string) error { obj, exists, err := c.Informer().GetStore().GetByKey(key) @@ -97,6 +138,7 @@ func (s *podSecurityPolicyTemplateClient) Controller() PodSecurityPolicyTemplate } s.client.podSecurityPolicyTemplateControllers[s.ns] = c + s.client.starters = append(s.client.starters, c) return c } @@ -108,6 +150,10 @@ type podSecurityPolicyTemplateClient struct { controller PodSecurityPolicyTemplateController } +func (s *podSecurityPolicyTemplateClient) ObjectClient() *clientbase.ObjectClient { + return s.objectClient +} + func (s *podSecurityPolicyTemplateClient) Create(o *PodSecurityPolicyTemplate) (*PodSecurityPolicyTemplate, error) { obj, err := s.objectClient.Create(o) return obj.(*PodSecurityPolicyTemplate), err diff --git a/apis/authorization.cattle.io/v1/zz_generated_project_controller.go b/apis/authorization.cattle.io/v1/zz_generated_project_controller.go index 6aec1b14..2ff22e65 100644 --- a/apis/authorization.cattle.io/v1/zz_generated_project_controller.go +++ b/apis/authorization.cattle.io/v1/zz_generated_project_controller.go @@ -5,7 +5,9 @@ import ( "github.com/rancher/norman/clientbase" "github.com/rancher/norman/controller" + "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/watch" @@ -34,14 +36,22 @@ type ProjectList struct { type ProjectHandlerFunc func(key string, obj *Project) error +type ProjectLister interface { + List(namespace string, selector labels.Selector) (ret []*Project, err error) + Get(namespace, name string) (*Project, error) +} + type ProjectController interface { Informer() cache.SharedIndexInformer + Lister() ProjectLister AddHandler(handler ProjectHandlerFunc) Enqueue(namespace, name string) + Sync(ctx context.Context) error Start(ctx context.Context, threadiness int) error } type ProjectInterface interface { + ObjectClient() *clientbase.ObjectClient Create(*Project) (*Project, error) Get(name string, opts metav1.GetOptions) (*Project, error) Update(*Project) (*Project, error) @@ -52,10 +62,41 @@ type ProjectInterface interface { Controller() ProjectController } +type projectLister struct { + controller *projectController +} + +func (l *projectLister) List(namespace string, selector labels.Selector) (ret []*Project, err error) { + err = cache.ListAllByNamespace(l.controller.Informer().GetIndexer(), namespace, selector, func(obj interface{}) { + ret = append(ret, obj.(*Project)) + }) + return +} + +func (l *projectLister) Get(namespace, name string) (*Project, error) { + obj, exists, err := l.controller.Informer().GetIndexer().GetByKey(namespace + "/" + name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(schema.GroupResource{ + Group: ProjectGroupVersionKind.Group, + Resource: "project", + }, name) + } + return obj.(*Project), nil +} + type projectController struct { controller.GenericController } +func (c *projectController) Lister() ProjectLister { + return &projectLister{ + controller: c, + } +} + func (c *projectController) AddHandler(handler ProjectHandlerFunc) { c.GenericController.AddHandler(func(key string) error { obj, exists, err := c.Informer().GetStore().GetByKey(key) @@ -97,6 +138,7 @@ func (s *projectClient) Controller() ProjectController { } s.client.projectControllers[s.ns] = c + s.client.starters = append(s.client.starters, c) return c } @@ -108,6 +150,10 @@ type projectClient struct { controller ProjectController } +func (s *projectClient) ObjectClient() *clientbase.ObjectClient { + return s.objectClient +} + func (s *projectClient) Create(o *Project) (*Project, error) { obj, err := s.objectClient.Create(o) return obj.(*Project), err diff --git a/apis/authorization.cattle.io/v1/zz_generated_project_role_template_binding_controller.go b/apis/authorization.cattle.io/v1/zz_generated_project_role_template_binding_controller.go index 83c327ca..6b44a4cd 100644 --- a/apis/authorization.cattle.io/v1/zz_generated_project_role_template_binding_controller.go +++ b/apis/authorization.cattle.io/v1/zz_generated_project_role_template_binding_controller.go @@ -5,7 +5,9 @@ import ( "github.com/rancher/norman/clientbase" "github.com/rancher/norman/controller" + "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/watch" @@ -34,14 +36,22 @@ type ProjectRoleTemplateBindingList struct { type ProjectRoleTemplateBindingHandlerFunc func(key string, obj *ProjectRoleTemplateBinding) error +type ProjectRoleTemplateBindingLister interface { + List(namespace string, selector labels.Selector) (ret []*ProjectRoleTemplateBinding, err error) + Get(namespace, name string) (*ProjectRoleTemplateBinding, error) +} + type ProjectRoleTemplateBindingController interface { Informer() cache.SharedIndexInformer + Lister() ProjectRoleTemplateBindingLister AddHandler(handler ProjectRoleTemplateBindingHandlerFunc) Enqueue(namespace, name string) + Sync(ctx context.Context) error Start(ctx context.Context, threadiness int) error } type ProjectRoleTemplateBindingInterface interface { + ObjectClient() *clientbase.ObjectClient Create(*ProjectRoleTemplateBinding) (*ProjectRoleTemplateBinding, error) Get(name string, opts metav1.GetOptions) (*ProjectRoleTemplateBinding, error) Update(*ProjectRoleTemplateBinding) (*ProjectRoleTemplateBinding, error) @@ -52,10 +62,41 @@ type ProjectRoleTemplateBindingInterface interface { Controller() ProjectRoleTemplateBindingController } +type projectRoleTemplateBindingLister struct { + controller *projectRoleTemplateBindingController +} + +func (l *projectRoleTemplateBindingLister) List(namespace string, selector labels.Selector) (ret []*ProjectRoleTemplateBinding, err error) { + err = cache.ListAllByNamespace(l.controller.Informer().GetIndexer(), namespace, selector, func(obj interface{}) { + ret = append(ret, obj.(*ProjectRoleTemplateBinding)) + }) + return +} + +func (l *projectRoleTemplateBindingLister) Get(namespace, name string) (*ProjectRoleTemplateBinding, error) { + obj, exists, err := l.controller.Informer().GetIndexer().GetByKey(namespace + "/" + name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(schema.GroupResource{ + Group: ProjectRoleTemplateBindingGroupVersionKind.Group, + Resource: "projectRoleTemplateBinding", + }, name) + } + return obj.(*ProjectRoleTemplateBinding), nil +} + type projectRoleTemplateBindingController struct { controller.GenericController } +func (c *projectRoleTemplateBindingController) Lister() ProjectRoleTemplateBindingLister { + return &projectRoleTemplateBindingLister{ + controller: c, + } +} + func (c *projectRoleTemplateBindingController) AddHandler(handler ProjectRoleTemplateBindingHandlerFunc) { c.GenericController.AddHandler(func(key string) error { obj, exists, err := c.Informer().GetStore().GetByKey(key) @@ -97,6 +138,7 @@ func (s *projectRoleTemplateBindingClient) Controller() ProjectRoleTemplateBindi } s.client.projectRoleTemplateBindingControllers[s.ns] = c + s.client.starters = append(s.client.starters, c) return c } @@ -108,6 +150,10 @@ type projectRoleTemplateBindingClient struct { controller ProjectRoleTemplateBindingController } +func (s *projectRoleTemplateBindingClient) ObjectClient() *clientbase.ObjectClient { + return s.objectClient +} + func (s *projectRoleTemplateBindingClient) Create(o *ProjectRoleTemplateBinding) (*ProjectRoleTemplateBinding, error) { obj, err := s.objectClient.Create(o) return obj.(*ProjectRoleTemplateBinding), err diff --git a/apis/authorization.cattle.io/v1/zz_generated_project_role_template_controller.go b/apis/authorization.cattle.io/v1/zz_generated_project_role_template_controller.go index 028d47c5..f113a0b0 100644 --- a/apis/authorization.cattle.io/v1/zz_generated_project_role_template_controller.go +++ b/apis/authorization.cattle.io/v1/zz_generated_project_role_template_controller.go @@ -5,7 +5,9 @@ import ( "github.com/rancher/norman/clientbase" "github.com/rancher/norman/controller" + "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/watch" @@ -34,14 +36,22 @@ type ProjectRoleTemplateList struct { type ProjectRoleTemplateHandlerFunc func(key string, obj *ProjectRoleTemplate) error +type ProjectRoleTemplateLister interface { + List(namespace string, selector labels.Selector) (ret []*ProjectRoleTemplate, err error) + Get(namespace, name string) (*ProjectRoleTemplate, error) +} + type ProjectRoleTemplateController interface { Informer() cache.SharedIndexInformer + Lister() ProjectRoleTemplateLister AddHandler(handler ProjectRoleTemplateHandlerFunc) Enqueue(namespace, name string) + Sync(ctx context.Context) error Start(ctx context.Context, threadiness int) error } type ProjectRoleTemplateInterface interface { + ObjectClient() *clientbase.ObjectClient Create(*ProjectRoleTemplate) (*ProjectRoleTemplate, error) Get(name string, opts metav1.GetOptions) (*ProjectRoleTemplate, error) Update(*ProjectRoleTemplate) (*ProjectRoleTemplate, error) @@ -52,10 +62,41 @@ type ProjectRoleTemplateInterface interface { Controller() ProjectRoleTemplateController } +type projectRoleTemplateLister struct { + controller *projectRoleTemplateController +} + +func (l *projectRoleTemplateLister) List(namespace string, selector labels.Selector) (ret []*ProjectRoleTemplate, err error) { + err = cache.ListAllByNamespace(l.controller.Informer().GetIndexer(), namespace, selector, func(obj interface{}) { + ret = append(ret, obj.(*ProjectRoleTemplate)) + }) + return +} + +func (l *projectRoleTemplateLister) Get(namespace, name string) (*ProjectRoleTemplate, error) { + obj, exists, err := l.controller.Informer().GetIndexer().GetByKey(namespace + "/" + name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(schema.GroupResource{ + Group: ProjectRoleTemplateGroupVersionKind.Group, + Resource: "projectRoleTemplate", + }, name) + } + return obj.(*ProjectRoleTemplate), nil +} + type projectRoleTemplateController struct { controller.GenericController } +func (c *projectRoleTemplateController) Lister() ProjectRoleTemplateLister { + return &projectRoleTemplateLister{ + controller: c, + } +} + func (c *projectRoleTemplateController) AddHandler(handler ProjectRoleTemplateHandlerFunc) { c.GenericController.AddHandler(func(key string) error { obj, exists, err := c.Informer().GetStore().GetByKey(key) @@ -97,6 +138,7 @@ func (s *projectRoleTemplateClient) Controller() ProjectRoleTemplateController { } s.client.projectRoleTemplateControllers[s.ns] = c + s.client.starters = append(s.client.starters, c) return c } @@ -108,6 +150,10 @@ type projectRoleTemplateClient struct { controller ProjectRoleTemplateController } +func (s *projectRoleTemplateClient) ObjectClient() *clientbase.ObjectClient { + return s.objectClient +} + func (s *projectRoleTemplateClient) Create(o *ProjectRoleTemplate) (*ProjectRoleTemplate, error) { obj, err := s.objectClient.Create(o) return obj.(*ProjectRoleTemplate), err diff --git a/apis/cluster.cattle.io/v1/zz_generated_cluster_controller.go b/apis/cluster.cattle.io/v1/zz_generated_cluster_controller.go index c8579f86..1d0e7f9f 100644 --- a/apis/cluster.cattle.io/v1/zz_generated_cluster_controller.go +++ b/apis/cluster.cattle.io/v1/zz_generated_cluster_controller.go @@ -5,7 +5,9 @@ import ( "github.com/rancher/norman/clientbase" "github.com/rancher/norman/controller" + "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/watch" @@ -34,14 +36,22 @@ type ClusterList struct { type ClusterHandlerFunc func(key string, obj *Cluster) error +type ClusterLister interface { + List(namespace string, selector labels.Selector) (ret []*Cluster, err error) + Get(namespace, name string) (*Cluster, error) +} + type ClusterController interface { Informer() cache.SharedIndexInformer + Lister() ClusterLister AddHandler(handler ClusterHandlerFunc) Enqueue(namespace, name string) + Sync(ctx context.Context) error Start(ctx context.Context, threadiness int) error } type ClusterInterface interface { + ObjectClient() *clientbase.ObjectClient Create(*Cluster) (*Cluster, error) Get(name string, opts metav1.GetOptions) (*Cluster, error) Update(*Cluster) (*Cluster, error) @@ -52,10 +62,41 @@ type ClusterInterface interface { Controller() ClusterController } +type clusterLister struct { + controller *clusterController +} + +func (l *clusterLister) List(namespace string, selector labels.Selector) (ret []*Cluster, err error) { + err = cache.ListAllByNamespace(l.controller.Informer().GetIndexer(), namespace, selector, func(obj interface{}) { + ret = append(ret, obj.(*Cluster)) + }) + return +} + +func (l *clusterLister) Get(namespace, name string) (*Cluster, error) { + obj, exists, err := l.controller.Informer().GetIndexer().GetByKey(namespace + "/" + name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(schema.GroupResource{ + Group: ClusterGroupVersionKind.Group, + Resource: "cluster", + }, name) + } + return obj.(*Cluster), nil +} + type clusterController struct { controller.GenericController } +func (c *clusterController) Lister() ClusterLister { + return &clusterLister{ + controller: c, + } +} + func (c *clusterController) AddHandler(handler ClusterHandlerFunc) { c.GenericController.AddHandler(func(key string) error { obj, exists, err := c.Informer().GetStore().GetByKey(key) @@ -97,6 +138,7 @@ func (s *clusterClient) Controller() ClusterController { } s.client.clusterControllers[s.ns] = c + s.client.starters = append(s.client.starters, c) return c } @@ -108,6 +150,10 @@ type clusterClient struct { controller ClusterController } +func (s *clusterClient) ObjectClient() *clientbase.ObjectClient { + return s.objectClient +} + func (s *clusterClient) Create(o *Cluster) (*Cluster, error) { obj, err := s.objectClient.Create(o) return obj.(*Cluster), err diff --git a/apis/cluster.cattle.io/v1/zz_generated_cluster_node_controller.go b/apis/cluster.cattle.io/v1/zz_generated_cluster_node_controller.go index d51a2685..56550f6b 100644 --- a/apis/cluster.cattle.io/v1/zz_generated_cluster_node_controller.go +++ b/apis/cluster.cattle.io/v1/zz_generated_cluster_node_controller.go @@ -5,7 +5,9 @@ import ( "github.com/rancher/norman/clientbase" "github.com/rancher/norman/controller" + "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/watch" @@ -34,14 +36,22 @@ type ClusterNodeList struct { type ClusterNodeHandlerFunc func(key string, obj *ClusterNode) error +type ClusterNodeLister interface { + List(namespace string, selector labels.Selector) (ret []*ClusterNode, err error) + Get(namespace, name string) (*ClusterNode, error) +} + type ClusterNodeController interface { Informer() cache.SharedIndexInformer + Lister() ClusterNodeLister AddHandler(handler ClusterNodeHandlerFunc) Enqueue(namespace, name string) + Sync(ctx context.Context) error Start(ctx context.Context, threadiness int) error } type ClusterNodeInterface interface { + ObjectClient() *clientbase.ObjectClient Create(*ClusterNode) (*ClusterNode, error) Get(name string, opts metav1.GetOptions) (*ClusterNode, error) Update(*ClusterNode) (*ClusterNode, error) @@ -52,10 +62,41 @@ type ClusterNodeInterface interface { Controller() ClusterNodeController } +type clusterNodeLister struct { + controller *clusterNodeController +} + +func (l *clusterNodeLister) List(namespace string, selector labels.Selector) (ret []*ClusterNode, err error) { + err = cache.ListAllByNamespace(l.controller.Informer().GetIndexer(), namespace, selector, func(obj interface{}) { + ret = append(ret, obj.(*ClusterNode)) + }) + return +} + +func (l *clusterNodeLister) Get(namespace, name string) (*ClusterNode, error) { + obj, exists, err := l.controller.Informer().GetIndexer().GetByKey(namespace + "/" + name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(schema.GroupResource{ + Group: ClusterNodeGroupVersionKind.Group, + Resource: "clusterNode", + }, name) + } + return obj.(*ClusterNode), nil +} + type clusterNodeController struct { controller.GenericController } +func (c *clusterNodeController) Lister() ClusterNodeLister { + return &clusterNodeLister{ + controller: c, + } +} + func (c *clusterNodeController) AddHandler(handler ClusterNodeHandlerFunc) { c.GenericController.AddHandler(func(key string) error { obj, exists, err := c.Informer().GetStore().GetByKey(key) @@ -97,6 +138,7 @@ func (s *clusterNodeClient) Controller() ClusterNodeController { } s.client.clusterNodeControllers[s.ns] = c + s.client.starters = append(s.client.starters, c) return c } @@ -108,6 +150,10 @@ type clusterNodeClient struct { controller ClusterNodeController } +func (s *clusterNodeClient) ObjectClient() *clientbase.ObjectClient { + return s.objectClient +} + func (s *clusterNodeClient) Create(o *ClusterNode) (*ClusterNode, error) { obj, err := s.objectClient.Create(o) return obj.(*ClusterNode), err diff --git a/apis/cluster.cattle.io/v1/zz_generated_k8s_client.go b/apis/cluster.cattle.io/v1/zz_generated_k8s_client.go index 0b6ce9ed..f0b4bde0 100644 --- a/apis/cluster.cattle.io/v1/zz_generated_k8s_client.go +++ b/apis/cluster.cattle.io/v1/zz_generated_k8s_client.go @@ -1,15 +1,18 @@ package v1 import ( + "context" "sync" "github.com/rancher/norman/clientbase" + "github.com/rancher/norman/controller" "k8s.io/client-go/dynamic" "k8s.io/client-go/rest" ) type Interface interface { RESTClient() rest.Interface + controller.Starter ClustersGetter ClusterNodesGetter @@ -18,6 +21,7 @@ type Interface interface { type Client struct { sync.Mutex restClient rest.Interface + starters []controller.Starter clusterControllers map[string]ClusterController clusterNodeControllers map[string]ClusterNodeController @@ -46,6 +50,14 @@ func (c *Client) RESTClient() rest.Interface { return c.restClient } +func (c *Client) Sync(ctx context.Context) error { + return controller.Sync(ctx, c.starters...) +} + +func (c *Client) Start(ctx context.Context, threadiness int) error { + return controller.Start(ctx, threadiness, c.starters...) +} + type ClustersGetter interface { Clusters(namespace string) ClusterInterface } diff --git a/apis/core/v1/zz_generated_deepcopy.go b/apis/core/v1/zz_generated_deepcopy.go new file mode 100644 index 00000000..9344ebbc --- /dev/null +++ b/apis/core/v1/zz_generated_deepcopy.go @@ -0,0 +1,40 @@ +package v1 + +import ( + core_v1 "k8s.io/api/core/v1" + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PodList) DeepCopyInto(out *PodList) { + *out = *in + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]core_v1.Pod, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodList. +func (in *PodList) DeepCopy() *PodList { + if in == nil { + return nil + } + out := new(PodList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *PodList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } else { + return nil + } +} diff --git a/apis/core/v1/zz_generated_k8s_client.go b/apis/core/v1/zz_generated_k8s_client.go new file mode 100644 index 00000000..a371f0df --- /dev/null +++ b/apis/core/v1/zz_generated_k8s_client.go @@ -0,0 +1,69 @@ +package v1 + +import ( + "context" + "sync" + + "github.com/rancher/norman/clientbase" + "github.com/rancher/norman/controller" + "k8s.io/client-go/dynamic" + "k8s.io/client-go/rest" +) + +type Interface interface { + RESTClient() rest.Interface + controller.Starter + + PodsGetter +} + +type Client struct { + sync.Mutex + restClient rest.Interface + starters []controller.Starter + + podControllers map[string]PodController +} + +func NewForConfig(config rest.Config) (Interface, error) { + if config.NegotiatedSerializer == nil { + configConfig := dynamic.ContentConfig() + config.NegotiatedSerializer = configConfig.NegotiatedSerializer + } + + restClient, err := rest.UnversionedRESTClientFor(&config) + if err != nil { + return nil, err + } + + return &Client{ + restClient: restClient, + + podControllers: map[string]PodController{}, + }, nil +} + +func (c *Client) RESTClient() rest.Interface { + return c.restClient +} + +func (c *Client) Sync(ctx context.Context) error { + return controller.Sync(ctx, c.starters...) +} + +func (c *Client) Start(ctx context.Context, threadiness int) error { + return controller.Start(ctx, threadiness, c.starters...) +} + +type PodsGetter interface { + Pods(namespace string) PodInterface +} + +func (c *Client) Pods(namespace string) PodInterface { + objectClient := clientbase.NewObjectClient(namespace, c.restClient, &PodResource, PodGroupVersionKind, podFactory{}) + return &podClient{ + ns: namespace, + client: c, + objectClient: objectClient, + } +} diff --git a/apis/core/v1/zz_generated_pod_controller.go b/apis/core/v1/zz_generated_pod_controller.go new file mode 100644 index 00000000..e47ce038 --- /dev/null +++ b/apis/core/v1/zz_generated_pod_controller.go @@ -0,0 +1,188 @@ +package v1 + +import ( + "context" + + "github.com/rancher/norman/clientbase" + "github.com/rancher/norman/controller" + "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/watch" + "k8s.io/client-go/tools/cache" +) + +var ( + PodGroupVersionKind = schema.GroupVersionKind{ + Version: "v1", + Group: "", + Kind: "Pod", + } + PodResource = metav1.APIResource{ + Name: "pods", + SingularName: "pod", + Namespaced: false, + Kind: PodGroupVersionKind.Kind, + } +) + +type PodList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []v1.Pod +} + +type PodHandlerFunc func(key string, obj *v1.Pod) error + +type PodLister interface { + List(namespace string, selector labels.Selector) (ret []*v1.Pod, err error) + Get(namespace, name string) (*v1.Pod, error) +} + +type PodController interface { + Informer() cache.SharedIndexInformer + Lister() PodLister + AddHandler(handler PodHandlerFunc) + Enqueue(namespace, name string) + Sync(ctx context.Context) error + Start(ctx context.Context, threadiness int) error +} + +type PodInterface interface { + ObjectClient() *clientbase.ObjectClient + Create(*v1.Pod) (*v1.Pod, error) + Get(name string, opts metav1.GetOptions) (*v1.Pod, error) + Update(*v1.Pod) (*v1.Pod, error) + Delete(name string, options *metav1.DeleteOptions) error + List(opts metav1.ListOptions) (*v1.PodList, error) + Watch(opts metav1.ListOptions) (watch.Interface, error) + DeleteCollection(deleteOpts *metav1.DeleteOptions, listOpts metav1.ListOptions) error + Controller() PodController +} + +type podLister struct { + controller *podController +} + +func (l *podLister) List(namespace string, selector labels.Selector) (ret []*v1.Pod, err error) { + err = cache.ListAllByNamespace(l.controller.Informer().GetIndexer(), namespace, selector, func(obj interface{}) { + ret = append(ret, obj.(*v1.Pod)) + }) + return +} + +func (l *podLister) Get(namespace, name string) (*v1.Pod, error) { + obj, exists, err := l.controller.Informer().GetIndexer().GetByKey(namespace + "/" + name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(schema.GroupResource{ + Group: PodGroupVersionKind.Group, + Resource: "pod", + }, name) + } + return obj.(*v1.Pod), nil +} + +type podController struct { + controller.GenericController +} + +func (c *podController) Lister() PodLister { + return &podLister{ + controller: c, + } +} + +func (c *podController) AddHandler(handler PodHandlerFunc) { + c.GenericController.AddHandler(func(key string) error { + obj, exists, err := c.Informer().GetStore().GetByKey(key) + if err != nil { + return err + } + if !exists { + return handler(key, nil) + } + return handler(key, obj.(*v1.Pod)) + }) +} + +type podFactory struct { +} + +func (c podFactory) Object() runtime.Object { + return &v1.Pod{} +} + +func (c podFactory) List() runtime.Object { + return &PodList{} +} + +func (s *podClient) Controller() PodController { + s.client.Lock() + defer s.client.Unlock() + + c, ok := s.client.podControllers[s.ns] + if ok { + return c + } + + genericController := controller.NewGenericController(PodGroupVersionKind.Kind+"Controller", + s.objectClient) + + c = &podController{ + GenericController: genericController, + } + + s.client.podControllers[s.ns] = c + s.client.starters = append(s.client.starters, c) + + return c +} + +type podClient struct { + client *Client + ns string + objectClient *clientbase.ObjectClient + controller PodController +} + +func (s *podClient) ObjectClient() *clientbase.ObjectClient { + return s.objectClient +} + +func (s *podClient) Create(o *v1.Pod) (*v1.Pod, error) { + obj, err := s.objectClient.Create(o) + return obj.(*v1.Pod), err +} + +func (s *podClient) Get(name string, opts metav1.GetOptions) (*v1.Pod, error) { + obj, err := s.objectClient.Get(name, opts) + return obj.(*v1.Pod), err +} + +func (s *podClient) Update(o *v1.Pod) (*v1.Pod, error) { + obj, err := s.objectClient.Update(o.Name, o) + return obj.(*v1.Pod), err +} + +func (s *podClient) Delete(name string, options *metav1.DeleteOptions) error { + return s.objectClient.Delete(name, options) +} + +func (s *podClient) List(opts metav1.ListOptions) (*v1.PodList, error) { + obj, err := s.objectClient.List(opts) + return obj.(*v1.PodList), err +} + +func (s *podClient) Watch(opts metav1.ListOptions) (watch.Interface, error) { + return s.objectClient.Watch(opts) +} + +func (s *podClient) DeleteCollection(deleteOpts *metav1.DeleteOptions, listOpts metav1.ListOptions) error { + return s.objectClient.DeleteCollection(deleteOpts, listOpts) +} diff --git a/apis/workload.cattle.io/v1/zz_generated_k8s_client.go b/apis/workload.cattle.io/v1/zz_generated_k8s_client.go index d90ea1ae..713a5a7e 100644 --- a/apis/workload.cattle.io/v1/zz_generated_k8s_client.go +++ b/apis/workload.cattle.io/v1/zz_generated_k8s_client.go @@ -1,15 +1,18 @@ package v1 import ( + "context" "sync" "github.com/rancher/norman/clientbase" + "github.com/rancher/norman/controller" "k8s.io/client-go/dynamic" "k8s.io/client-go/rest" ) type Interface interface { RESTClient() rest.Interface + controller.Starter WorkloadsGetter } @@ -17,6 +20,7 @@ type Interface interface { type Client struct { sync.Mutex restClient rest.Interface + starters []controller.Starter workloadControllers map[string]WorkloadController } @@ -43,6 +47,14 @@ func (c *Client) RESTClient() rest.Interface { return c.restClient } +func (c *Client) Sync(ctx context.Context) error { + return controller.Sync(ctx, c.starters...) +} + +func (c *Client) Start(ctx context.Context, threadiness int) error { + return controller.Start(ctx, threadiness, c.starters...) +} + type WorkloadsGetter interface { Workloads(namespace string) WorkloadInterface } diff --git a/apis/workload.cattle.io/v1/zz_generated_workload_controller.go b/apis/workload.cattle.io/v1/zz_generated_workload_controller.go index 994ed389..7192aea2 100644 --- a/apis/workload.cattle.io/v1/zz_generated_workload_controller.go +++ b/apis/workload.cattle.io/v1/zz_generated_workload_controller.go @@ -5,7 +5,9 @@ import ( "github.com/rancher/norman/clientbase" "github.com/rancher/norman/controller" + "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/watch" @@ -21,8 +23,9 @@ var ( WorkloadResource = metav1.APIResource{ Name: "workloads", SingularName: "workload", - Namespaced: false, - Kind: WorkloadGroupVersionKind.Kind, + Namespaced: true, + + Kind: WorkloadGroupVersionKind.Kind, } ) @@ -34,14 +37,22 @@ type WorkloadList struct { type WorkloadHandlerFunc func(key string, obj *Workload) error +type WorkloadLister interface { + List(namespace string, selector labels.Selector) (ret []*Workload, err error) + Get(namespace, name string) (*Workload, error) +} + type WorkloadController interface { Informer() cache.SharedIndexInformer + Lister() WorkloadLister AddHandler(handler WorkloadHandlerFunc) Enqueue(namespace, name string) + Sync(ctx context.Context) error Start(ctx context.Context, threadiness int) error } type WorkloadInterface interface { + ObjectClient() *clientbase.ObjectClient Create(*Workload) (*Workload, error) Get(name string, opts metav1.GetOptions) (*Workload, error) Update(*Workload) (*Workload, error) @@ -52,10 +63,41 @@ type WorkloadInterface interface { Controller() WorkloadController } +type workloadLister struct { + controller *workloadController +} + +func (l *workloadLister) List(namespace string, selector labels.Selector) (ret []*Workload, err error) { + err = cache.ListAllByNamespace(l.controller.Informer().GetIndexer(), namespace, selector, func(obj interface{}) { + ret = append(ret, obj.(*Workload)) + }) + return +} + +func (l *workloadLister) Get(namespace, name string) (*Workload, error) { + obj, exists, err := l.controller.Informer().GetIndexer().GetByKey(namespace + "/" + name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(schema.GroupResource{ + Group: WorkloadGroupVersionKind.Group, + Resource: "workload", + }, name) + } + return obj.(*Workload), nil +} + type workloadController struct { controller.GenericController } +func (c *workloadController) Lister() WorkloadLister { + return &workloadLister{ + controller: c, + } +} + func (c *workloadController) AddHandler(handler WorkloadHandlerFunc) { c.GenericController.AddHandler(func(key string) error { obj, exists, err := c.Informer().GetStore().GetByKey(key) @@ -97,6 +139,7 @@ func (s *workloadClient) Controller() WorkloadController { } s.client.workloadControllers[s.ns] = c + s.client.starters = append(s.client.starters, c) return c } @@ -108,6 +151,10 @@ type workloadClient struct { controller WorkloadController } +func (s *workloadClient) ObjectClient() *clientbase.ObjectClient { + return s.objectClient +} + func (s *workloadClient) Create(o *Workload) (*Workload, error) { obj, err := s.objectClient.Create(o) return obj.(*Workload), err diff --git a/client/workload/v1/zz_generated_attached_volume.go b/client/workload/v1/zz_generated_attached_volume.go index 93599337..a13d1ac3 100644 --- a/client/workload/v1/zz_generated_attached_volume.go +++ b/client/workload/v1/zz_generated_attached_volume.go @@ -1,12 +1,10 @@ package client const ( - AttachedVolumeType = "attachedVolume" - AttachedVolumeFieldDevicePath = "devicePath" - AttachedVolumeFieldName = "name" + AttachedVolumeType = "attachedVolume" + AttachedVolumeFieldName = "name" ) type AttachedVolume struct { - DevicePath string `json:"devicePath,omitempty"` - Name string `json:"name,omitempty"` + Name string `json:"name,omitempty"` } diff --git a/client/workload/v1/zz_generated_client.go b/client/workload/v1/zz_generated_client.go index 6a14e2ea..9129c0b5 100644 --- a/client/workload/v1/zz_generated_client.go +++ b/client/workload/v1/zz_generated_client.go @@ -7,8 +7,8 @@ import ( type Client struct { clientbase.APIBaseClient - Pod PodOperations Namespace NamespaceOperations + Pod PodOperations Node NodeOperations Deployment DeploymentOperations PersistentVolumeClaim PersistentVolumeClaimOperations @@ -29,8 +29,8 @@ func NewClient(opts *clientbase.ClientOpts) (*Client, error) { APIBaseClient: baseClient, } - client.Pod = newPodClient(client) client.Namespace = newNamespaceClient(client) + client.Pod = newPodClient(client) client.Node = newNodeClient(client) client.Deployment = newDeploymentClient(client) client.PersistentVolumeClaim = newPersistentVolumeClaimClient(client) diff --git a/client/workload/v1/zz_generated_container.go b/client/workload/v1/zz_generated_container.go index 428dc067..f8f58bf2 100644 --- a/client/workload/v1/zz_generated_container.go +++ b/client/workload/v1/zz_generated_container.go @@ -12,7 +12,6 @@ const ( ContainerFieldHealthcheck = "healthcheck" ContainerFieldImage = "image" ContainerFieldInitContainer = "initContainer" - ContainerFieldName = "name" ContainerFieldPorts = "ports" ContainerFieldPostStart = "postStart" ContainerFieldPreStop = "preStop" @@ -44,7 +43,6 @@ type Container struct { Healthcheck *Probe `json:"healthcheck,omitempty"` Image string `json:"image,omitempty"` InitContainer *bool `json:"initContainer,omitempty"` - Name string `json:"name,omitempty"` Ports []ContainerPort `json:"ports,omitempty"` PostStart *Handler `json:"postStart,omitempty"` PreStop *Handler `json:"preStop,omitempty"` diff --git a/client/workload/v1/zz_generated_daemon_set.go b/client/workload/v1/zz_generated_daemon_set.go index 058d2289..edcc792b 100644 --- a/client/workload/v1/zz_generated_daemon_set.go +++ b/client/workload/v1/zz_generated_daemon_set.go @@ -21,7 +21,7 @@ const ( DaemonSetFieldIPC = "ipc" DaemonSetFieldLabels = "labels" DaemonSetFieldName = "name" - DaemonSetFieldNamespace = "namespace" + DaemonSetFieldNamespaceId = "namespaceId" DaemonSetFieldNet = "net" DaemonSetFieldNodeId = "nodeId" DaemonSetFieldOwnerReferences = "ownerReferences" @@ -67,7 +67,7 @@ type DaemonSet struct { IPC string `json:"ipc,omitempty"` Labels map[string]string `json:"labels,omitempty"` Name string `json:"name,omitempty"` - Namespace string `json:"namespace,omitempty"` + NamespaceId string `json:"namespaceId,omitempty"` Net string `json:"net,omitempty"` NodeId string `json:"nodeId,omitempty"` OwnerReferences []OwnerReference `json:"ownerReferences,omitempty"` diff --git a/client/workload/v1/zz_generated_deployment.go b/client/workload/v1/zz_generated_deployment.go index 92178abb..b503701e 100644 --- a/client/workload/v1/zz_generated_deployment.go +++ b/client/workload/v1/zz_generated_deployment.go @@ -21,7 +21,7 @@ const ( DeploymentFieldIPC = "ipc" DeploymentFieldLabels = "labels" DeploymentFieldName = "name" - DeploymentFieldNamespace = "namespace" + DeploymentFieldNamespaceId = "namespaceId" DeploymentFieldNet = "net" DeploymentFieldNodeId = "nodeId" DeploymentFieldOwnerReferences = "ownerReferences" @@ -67,7 +67,7 @@ type Deployment struct { IPC string `json:"ipc,omitempty"` Labels map[string]string `json:"labels,omitempty"` Name string `json:"name,omitempty"` - Namespace string `json:"namespace,omitempty"` + NamespaceId string `json:"namespaceId,omitempty"` Net string `json:"net,omitempty"` NodeId string `json:"nodeId,omitempty"` OwnerReferences []OwnerReference `json:"ownerReferences,omitempty"` diff --git a/client/workload/v1/zz_generated_host_alias.go b/client/workload/v1/zz_generated_host_alias.go index 197dc08f..d044af44 100644 --- a/client/workload/v1/zz_generated_host_alias.go +++ b/client/workload/v1/zz_generated_host_alias.go @@ -3,10 +3,8 @@ package client const ( HostAliasType = "hostAlias" HostAliasFieldHostnames = "hostnames" - HostAliasFieldIP = "ip" ) type HostAlias struct { Hostnames []string `json:"hostnames,omitempty"` - IP string `json:"ip,omitempty"` } diff --git a/client/workload/v1/zz_generated_pod.go b/client/workload/v1/zz_generated_pod.go index a79a55c1..153ff02c 100644 --- a/client/workload/v1/zz_generated_pod.go +++ b/client/workload/v1/zz_generated_pod.go @@ -19,7 +19,7 @@ const ( PodFieldIPC = "ipc" PodFieldLabels = "labels" PodFieldName = "name" - PodFieldNamespace = "namespace" + PodFieldNamespaceId = "namespaceId" PodFieldNet = "net" PodFieldNodeId = "nodeId" PodFieldOwnerReferences = "ownerReferences" @@ -62,7 +62,7 @@ type Pod struct { IPC string `json:"ipc,omitempty"` Labels map[string]string `json:"labels,omitempty"` Name string `json:"name,omitempty"` - Namespace string `json:"namespace,omitempty"` + NamespaceId string `json:"namespaceId,omitempty"` Net string `json:"net,omitempty"` NodeId string `json:"nodeId,omitempty"` OwnerReferences []OwnerReference `json:"ownerReferences,omitempty"` diff --git a/client/workload/v1/zz_generated_replica_set.go b/client/workload/v1/zz_generated_replica_set.go index 2301fe7c..e67b1424 100644 --- a/client/workload/v1/zz_generated_replica_set.go +++ b/client/workload/v1/zz_generated_replica_set.go @@ -21,7 +21,7 @@ const ( ReplicaSetFieldIPC = "ipc" ReplicaSetFieldLabels = "labels" ReplicaSetFieldName = "name" - ReplicaSetFieldNamespace = "namespace" + ReplicaSetFieldNamespaceId = "namespaceId" ReplicaSetFieldNet = "net" ReplicaSetFieldNodeId = "nodeId" ReplicaSetFieldOwnerReferences = "ownerReferences" @@ -65,7 +65,7 @@ type ReplicaSet struct { IPC string `json:"ipc,omitempty"` Labels map[string]string `json:"labels,omitempty"` Name string `json:"name,omitempty"` - Namespace string `json:"namespace,omitempty"` + NamespaceId string `json:"namespaceId,omitempty"` Net string `json:"net,omitempty"` NodeId string `json:"nodeId,omitempty"` OwnerReferences []OwnerReference `json:"ownerReferences,omitempty"` diff --git a/client/workload/v1/zz_generated_replication_controller.go b/client/workload/v1/zz_generated_replication_controller.go index 62748b9d..87e363d3 100644 --- a/client/workload/v1/zz_generated_replication_controller.go +++ b/client/workload/v1/zz_generated_replication_controller.go @@ -21,7 +21,7 @@ const ( ReplicationControllerFieldIPC = "ipc" ReplicationControllerFieldLabels = "labels" ReplicationControllerFieldName = "name" - ReplicationControllerFieldNamespace = "namespace" + ReplicationControllerFieldNamespaceId = "namespaceId" ReplicationControllerFieldNet = "net" ReplicationControllerFieldNodeId = "nodeId" ReplicationControllerFieldOwnerReferences = "ownerReferences" @@ -65,7 +65,7 @@ type ReplicationController struct { IPC string `json:"ipc,omitempty"` Labels map[string]string `json:"labels,omitempty"` Name string `json:"name,omitempty"` - Namespace string `json:"namespace,omitempty"` + NamespaceId string `json:"namespaceId,omitempty"` Net string `json:"net,omitempty"` NodeId string `json:"nodeId,omitempty"` OwnerReferences []OwnerReference `json:"ownerReferences,omitempty"` diff --git a/client/workload/v1/zz_generated_stateful_set.go b/client/workload/v1/zz_generated_stateful_set.go index 2ff89a45..c6767af1 100644 --- a/client/workload/v1/zz_generated_stateful_set.go +++ b/client/workload/v1/zz_generated_stateful_set.go @@ -21,7 +21,7 @@ const ( StatefulSetFieldIPC = "ipc" StatefulSetFieldLabels = "labels" StatefulSetFieldName = "name" - StatefulSetFieldNamespace = "namespace" + StatefulSetFieldNamespaceId = "namespaceId" StatefulSetFieldNet = "net" StatefulSetFieldNodeId = "nodeId" StatefulSetFieldOwnerReferences = "ownerReferences" @@ -70,7 +70,7 @@ type StatefulSet struct { IPC string `json:"ipc,omitempty"` Labels map[string]string `json:"labels,omitempty"` Name string `json:"name,omitempty"` - Namespace string `json:"namespace,omitempty"` + NamespaceId string `json:"namespaceId,omitempty"` Net string `json:"net,omitempty"` NodeId string `json:"nodeId,omitempty"` OwnerReferences []OwnerReference `json:"ownerReferences,omitempty"` diff --git a/client/workload/v1/zz_generated_volume.go b/client/workload/v1/zz_generated_volume.go index ed080780..7aa4f9b4 100644 --- a/client/workload/v1/zz_generated_volume.go +++ b/client/workload/v1/zz_generated_volume.go @@ -19,7 +19,6 @@ const ( VolumeFieldHostPath = "hostPath" VolumeFieldISCSI = "iscsi" VolumeFieldNFS = "nfs" - VolumeFieldName = "name" VolumeFieldPersistentVolumeClaim = "persistentVolumeClaim" VolumeFieldPhotonPersistentDisk = "photonPersistentDisk" VolumeFieldPortworxVolume = "portworxVolume" @@ -50,7 +49,6 @@ type Volume struct { HostPath *HostPathVolumeSource `json:"hostPath,omitempty"` ISCSI *ISCSIVolumeSource `json:"iscsi,omitempty"` NFS *NFSVolumeSource `json:"nfs,omitempty"` - Name string `json:"name,omitempty"` PersistentVolumeClaim *PersistentVolumeClaimVolumeSource `json:"persistentVolumeClaim,omitempty"` PhotonPersistentDisk *PhotonPersistentDiskVolumeSource `json:"photonPersistentDisk,omitempty"` PortworxVolume *PortworxVolumeSource `json:"portworxVolume,omitempty"` diff --git a/client/workload/v1/zz_generated_workload.go b/client/workload/v1/zz_generated_workload.go index a67fef37..0729a757 100644 --- a/client/workload/v1/zz_generated_workload.go +++ b/client/workload/v1/zz_generated_workload.go @@ -21,7 +21,7 @@ const ( WorkloadFieldIPC = "ipc" WorkloadFieldLabels = "labels" WorkloadFieldName = "name" - WorkloadFieldNamespace = "namespace" + WorkloadFieldNamespaceId = "namespaceId" WorkloadFieldNet = "net" WorkloadFieldNodeId = "nodeId" WorkloadFieldOwnerReferences = "ownerReferences" @@ -65,7 +65,7 @@ type Workload struct { IPC string `json:"ipc,omitempty"` Labels map[string]string `json:"labels,omitempty"` Name string `json:"name,omitempty"` - Namespace string `json:"namespace,omitempty"` + NamespaceId string `json:"namespaceId,omitempty"` Net string `json:"net,omitempty"` NodeId string `json:"nodeId,omitempty"` OwnerReferences []OwnerReference `json:"ownerReferences,omitempty"`