diff --git a/apis/management.cattle.io/v3/authn_types.go b/apis/management.cattle.io/v3/authn_types.go new file mode 100644 index 00000000..fafcbab3 --- /dev/null +++ b/apis/management.cattle.io/v3/authn_types.go @@ -0,0 +1,63 @@ +package v3 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +type Token struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + TokenID string `json:"tokenID,omitempty"` + TokenValue string `json:"tokenValue,omitempty"` + User string `json:"user,omitempty"` + ExternalID string `json:"externalID,omitempty"` + AuthProvider string `json:"authProvider,omitempty"` + TTLMillis string `json:"ttl,omitempty"` + RefreshTTLMillis string `json:"refreshTTL,omitempty"` + LastUpdateTime string `json:"lastUpdateTime,omitempty"` + IsDerived bool `json:"isDerived,omitempty"` + Description string `json:"description,omitempty"` +} + +type User struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + UserName string `json:"userName,omitempty"` + Secret string `json:"secret,omitempty"` + DisplayName string `json:"displayName,omitempty"` + ExternalID string `json:"externalID,omitempty"` +} + +type Group struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + GroupName string `json:"groupName,omitempty"` + DisplayName string `json:"displayName,omitempty"` + ExternalID string `json:"externalID,omitempty"` +} + +type GroupMember struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + GroupExternalID string `json:"groupExternalID,omitempty"` + MemberExternalID string `json:"memberExternalID,omitempty"` +} + +type Identity struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + ExternalID string `json:"externalID,omitempty"` + DisplayName string `json:"displayName,omitempty"` + IdentityName string `json:"identityName,omitempty"` + ProfilePicture string `json:"profilePicture,omitempty"` + ProfileURL string `json:"profileURL,omitempty"` + Kind string `json:"kind,omitempty"` + Me bool `json:"me,omitempty"` + MemberOf bool `json:"memberOf,omitempty"` + ExtraInfo map[string]string `json:"extraInfo,omitempty"` +} diff --git a/apis/management.cattle.io/v3/auth_types.go b/apis/management.cattle.io/v3/authz_types.go similarity index 100% rename from apis/management.cattle.io/v3/auth_types.go rename to apis/management.cattle.io/v3/authz_types.go diff --git a/apis/management.cattle.io/v3/schema/schema.go b/apis/management.cattle.io/v3/schema/schema.go index 584021ea..05697664 100644 --- a/apis/management.cattle.io/v3/schema/schema.go +++ b/apis/management.cattle.io/v3/schema/schema.go @@ -19,9 +19,10 @@ var ( Schemas = factory.Schemas(&Version). Init(nodeTypes). Init(machineTypes). - Init(authTypes). + Init(authzTypes). Init(clusterTypes). - Init(catalogTypes) + Init(catalogTypes). + Init(authnTypes) ) func catalogTypes(schemas *types.Schemas) *types.Schemas { @@ -68,7 +69,7 @@ func clusterTypes(schemas *types.Schemas) *types.Schemas { MustImport(&Version, v3.Cluster{}) } -func authTypes(schemas *types.Schemas) *types.Schemas { +func authzTypes(schemas *types.Schemas) *types.Schemas { return schemas. AddMapperForType(&Version, v3.Project{}, m.DisplayName{}, @@ -111,3 +112,12 @@ func machineTypes(schemas *types.Schemas) *types.Schemas { MustImport(&Version, v3.MachineDriver{}). MustImport(&Version, v3.MachineTemplate{}) } + +func authnTypes(schemas *types.Schemas) *types.Schemas { + return schemas. + MustImport(&Version, v3.Token{}). + MustImport(&Version, v3.User{}). + MustImport(&Version, v3.Group{}). + MustImport(&Version, v3.GroupMember{}). + MustImport(&Version, v3.Identity{}) +} diff --git a/apis/management.cattle.io/v3/zz_generated_deepcopy.go b/apis/management.cattle.io/v3/zz_generated_deepcopy.go index 275fb3a6..48b62df2 100644 --- a/apis/management.cattle.io/v3/zz_generated_deepcopy.go +++ b/apis/management.cattle.io/v3/zz_generated_deepcopy.go @@ -534,6 +534,196 @@ func (in *GoogleKubernetesEngineConfig) DeepCopy() *GoogleKubernetesEngineConfig return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Group) DeepCopyInto(out *Group) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Group. +func (in *Group) DeepCopy() *Group { + if in == nil { + return nil + } + out := new(Group) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Group) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } else { + return nil + } +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *GroupList) DeepCopyInto(out *GroupList) { + *out = *in + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Group, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GroupList. +func (in *GroupList) DeepCopy() *GroupList { + if in == nil { + return nil + } + out := new(GroupList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *GroupList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } else { + return nil + } +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *GroupMember) DeepCopyInto(out *GroupMember) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GroupMember. +func (in *GroupMember) DeepCopy() *GroupMember { + if in == nil { + return nil + } + out := new(GroupMember) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *GroupMember) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } else { + return nil + } +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *GroupMemberList) DeepCopyInto(out *GroupMemberList) { + *out = *in + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]GroupMember, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GroupMemberList. +func (in *GroupMemberList) DeepCopy() *GroupMemberList { + if in == nil { + return nil + } + out := new(GroupMemberList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *GroupMemberList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } else { + return nil + } +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Identity) DeepCopyInto(out *Identity) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + if in.ExtraInfo != nil { + in, out := &in.ExtraInfo, &out.ExtraInfo + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Identity. +func (in *Identity) DeepCopy() *Identity { + if in == nil { + return nil + } + out := new(Identity) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Identity) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } else { + return nil + } +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IdentityList) DeepCopyInto(out *IdentityList) { + *out = *in + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Identity, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IdentityList. +func (in *IdentityList) DeepCopy() *IdentityList { + if in == nil { + return nil + } + out := new(IdentityList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *IdentityList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } else { + return nil + } +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *KubeAPIService) DeepCopyInto(out *KubeAPIService) { *out = *in @@ -1670,3 +1860,125 @@ func (in *TemplateVersionStatus) DeepCopy() *TemplateVersionStatus { in.DeepCopyInto(out) return out } + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Token) DeepCopyInto(out *Token) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Token. +func (in *Token) DeepCopy() *Token { + if in == nil { + return nil + } + out := new(Token) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Token) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } else { + return nil + } +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *TokenList) DeepCopyInto(out *TokenList) { + *out = *in + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Token, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TokenList. +func (in *TokenList) DeepCopy() *TokenList { + if in == nil { + return nil + } + out := new(TokenList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *TokenList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } else { + return nil + } +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *User) DeepCopyInto(out *User) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new User. +func (in *User) DeepCopy() *User { + if in == nil { + return nil + } + out := new(User) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *User) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } else { + return nil + } +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *UserList) DeepCopyInto(out *UserList) { + *out = *in + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]User, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new UserList. +func (in *UserList) DeepCopy() *UserList { + if in == nil { + return nil + } + out := new(UserList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *UserList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } else { + return nil + } +} diff --git a/apis/management.cattle.io/v3/zz_generated_group_controller.go b/apis/management.cattle.io/v3/zz_generated_group_controller.go new file mode 100644 index 00000000..686b1777 --- /dev/null +++ b/apis/management.cattle.io/v3/zz_generated_group_controller.go @@ -0,0 +1,187 @@ +package v3 + +import ( + "context" + + "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" + "k8s.io/client-go/tools/cache" +) + +var ( + GroupGroupVersionKind = schema.GroupVersionKind{ + Version: "v3", + Group: "management.cattle.io", + Kind: "Group", + } + GroupResource = metav1.APIResource{ + Name: "groups", + SingularName: "group", + Namespaced: false, + Kind: GroupGroupVersionKind.Kind, + } +) + +type GroupList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []Group +} + +type GroupHandlerFunc func(key string, obj *Group) error + +type GroupLister interface { + List(namespace string, selector labels.Selector) (ret []*Group, err error) + Get(namespace, name string) (*Group, error) +} + +type GroupController interface { + Informer() cache.SharedIndexInformer + Lister() GroupLister + AddHandler(handler GroupHandlerFunc) + Enqueue(namespace, name string) + Sync(ctx context.Context) error + Start(ctx context.Context, threadiness int) error +} + +type GroupInterface interface { + ObjectClient() *clientbase.ObjectClient + Create(*Group) (*Group, error) + Get(name string, opts metav1.GetOptions) (*Group, error) + Update(*Group) (*Group, error) + Delete(name string, options *metav1.DeleteOptions) error + List(opts metav1.ListOptions) (*GroupList, error) + Watch(opts metav1.ListOptions) (watch.Interface, error) + DeleteCollection(deleteOpts *metav1.DeleteOptions, listOpts metav1.ListOptions) error + Controller() GroupController +} + +type groupLister struct { + controller *groupController +} + +func (l *groupLister) List(namespace string, selector labels.Selector) (ret []*Group, err error) { + err = cache.ListAllByNamespace(l.controller.Informer().GetIndexer(), namespace, selector, func(obj interface{}) { + ret = append(ret, obj.(*Group)) + }) + return +} + +func (l *groupLister) Get(namespace, name string) (*Group, 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: GroupGroupVersionKind.Group, + Resource: "group", + }, name) + } + return obj.(*Group), nil +} + +type groupController struct { + controller.GenericController +} + +func (c *groupController) Lister() GroupLister { + return &groupLister{ + controller: c, + } +} + +func (c *groupController) AddHandler(handler GroupHandlerFunc) { + 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.(*Group)) + }) +} + +type groupFactory struct { +} + +func (c groupFactory) Object() runtime.Object { + return &Group{} +} + +func (c groupFactory) List() runtime.Object { + return &GroupList{} +} + +func (s *groupClient) Controller() GroupController { + s.client.Lock() + defer s.client.Unlock() + + c, ok := s.client.groupControllers[s.ns] + if ok { + return c + } + + genericController := controller.NewGenericController(GroupGroupVersionKind.Kind+"Controller", + s.objectClient) + + c = &groupController{ + GenericController: genericController, + } + + s.client.groupControllers[s.ns] = c + s.client.starters = append(s.client.starters, c) + + return c +} + +type groupClient struct { + client *Client + ns string + objectClient *clientbase.ObjectClient + controller GroupController +} + +func (s *groupClient) ObjectClient() *clientbase.ObjectClient { + return s.objectClient +} + +func (s *groupClient) Create(o *Group) (*Group, error) { + obj, err := s.objectClient.Create(o) + return obj.(*Group), err +} + +func (s *groupClient) Get(name string, opts metav1.GetOptions) (*Group, error) { + obj, err := s.objectClient.Get(name, opts) + return obj.(*Group), err +} + +func (s *groupClient) Update(o *Group) (*Group, error) { + obj, err := s.objectClient.Update(o.Name, o) + return obj.(*Group), err +} + +func (s *groupClient) Delete(name string, options *metav1.DeleteOptions) error { + return s.objectClient.Delete(name, options) +} + +func (s *groupClient) List(opts metav1.ListOptions) (*GroupList, error) { + obj, err := s.objectClient.List(opts) + return obj.(*GroupList), err +} + +func (s *groupClient) Watch(opts metav1.ListOptions) (watch.Interface, error) { + return s.objectClient.Watch(opts) +} + +func (s *groupClient) DeleteCollection(deleteOpts *metav1.DeleteOptions, listOpts metav1.ListOptions) error { + return s.objectClient.DeleteCollection(deleteOpts, listOpts) +} diff --git a/apis/management.cattle.io/v3/zz_generated_group_lifecycle_adapter.go b/apis/management.cattle.io/v3/zz_generated_group_lifecycle_adapter.go new file mode 100644 index 00000000..96da15c1 --- /dev/null +++ b/apis/management.cattle.io/v3/zz_generated_group_lifecycle_adapter.go @@ -0,0 +1,39 @@ +package v3 + +import ( + "github.com/rancher/norman/lifecycle" + "k8s.io/apimachinery/pkg/runtime" +) + +type GroupLifecycle interface { + Create(obj *Group) error + Remove(obj *Group) error + Updated(obj *Group) error +} + +type groupLifecycleAdapter struct { + lifecycle GroupLifecycle +} + +func (w *groupLifecycleAdapter) Create(obj runtime.Object) error { + return w.lifecycle.Create(obj.(*Group)) +} + +func (w *groupLifecycleAdapter) Finalize(obj runtime.Object) error { + return w.lifecycle.Remove(obj.(*Group)) +} + +func (w *groupLifecycleAdapter) Updated(obj runtime.Object) error { + return w.lifecycle.Updated(obj.(*Group)) +} + +func NewGroupLifecycleAdapter(name string, client GroupInterface, l GroupLifecycle) GroupHandlerFunc { + adapter := &groupLifecycleAdapter{lifecycle: l} + syncFn := lifecycle.NewObjectLifecycleAdapter(name, adapter, client.ObjectClient()) + return func(key string, obj *Group) error { + if obj == nil { + return syncFn(key, nil) + } + return syncFn(key, obj) + } +} diff --git a/apis/management.cattle.io/v3/zz_generated_group_member_controller.go b/apis/management.cattle.io/v3/zz_generated_group_member_controller.go new file mode 100644 index 00000000..17e013bf --- /dev/null +++ b/apis/management.cattle.io/v3/zz_generated_group_member_controller.go @@ -0,0 +1,187 @@ +package v3 + +import ( + "context" + + "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" + "k8s.io/client-go/tools/cache" +) + +var ( + GroupMemberGroupVersionKind = schema.GroupVersionKind{ + Version: "v3", + Group: "management.cattle.io", + Kind: "GroupMember", + } + GroupMemberResource = metav1.APIResource{ + Name: "groupmembers", + SingularName: "groupmember", + Namespaced: false, + Kind: GroupMemberGroupVersionKind.Kind, + } +) + +type GroupMemberList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []GroupMember +} + +type GroupMemberHandlerFunc func(key string, obj *GroupMember) error + +type GroupMemberLister interface { + List(namespace string, selector labels.Selector) (ret []*GroupMember, err error) + Get(namespace, name string) (*GroupMember, error) +} + +type GroupMemberController interface { + Informer() cache.SharedIndexInformer + Lister() GroupMemberLister + AddHandler(handler GroupMemberHandlerFunc) + Enqueue(namespace, name string) + Sync(ctx context.Context) error + Start(ctx context.Context, threadiness int) error +} + +type GroupMemberInterface interface { + ObjectClient() *clientbase.ObjectClient + Create(*GroupMember) (*GroupMember, error) + Get(name string, opts metav1.GetOptions) (*GroupMember, error) + Update(*GroupMember) (*GroupMember, error) + Delete(name string, options *metav1.DeleteOptions) error + List(opts metav1.ListOptions) (*GroupMemberList, error) + Watch(opts metav1.ListOptions) (watch.Interface, error) + DeleteCollection(deleteOpts *metav1.DeleteOptions, listOpts metav1.ListOptions) error + Controller() GroupMemberController +} + +type groupMemberLister struct { + controller *groupMemberController +} + +func (l *groupMemberLister) List(namespace string, selector labels.Selector) (ret []*GroupMember, err error) { + err = cache.ListAllByNamespace(l.controller.Informer().GetIndexer(), namespace, selector, func(obj interface{}) { + ret = append(ret, obj.(*GroupMember)) + }) + return +} + +func (l *groupMemberLister) Get(namespace, name string) (*GroupMember, 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: GroupMemberGroupVersionKind.Group, + Resource: "groupMember", + }, name) + } + return obj.(*GroupMember), nil +} + +type groupMemberController struct { + controller.GenericController +} + +func (c *groupMemberController) Lister() GroupMemberLister { + return &groupMemberLister{ + controller: c, + } +} + +func (c *groupMemberController) AddHandler(handler GroupMemberHandlerFunc) { + 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.(*GroupMember)) + }) +} + +type groupMemberFactory struct { +} + +func (c groupMemberFactory) Object() runtime.Object { + return &GroupMember{} +} + +func (c groupMemberFactory) List() runtime.Object { + return &GroupMemberList{} +} + +func (s *groupMemberClient) Controller() GroupMemberController { + s.client.Lock() + defer s.client.Unlock() + + c, ok := s.client.groupMemberControllers[s.ns] + if ok { + return c + } + + genericController := controller.NewGenericController(GroupMemberGroupVersionKind.Kind+"Controller", + s.objectClient) + + c = &groupMemberController{ + GenericController: genericController, + } + + s.client.groupMemberControllers[s.ns] = c + s.client.starters = append(s.client.starters, c) + + return c +} + +type groupMemberClient struct { + client *Client + ns string + objectClient *clientbase.ObjectClient + controller GroupMemberController +} + +func (s *groupMemberClient) ObjectClient() *clientbase.ObjectClient { + return s.objectClient +} + +func (s *groupMemberClient) Create(o *GroupMember) (*GroupMember, error) { + obj, err := s.objectClient.Create(o) + return obj.(*GroupMember), err +} + +func (s *groupMemberClient) Get(name string, opts metav1.GetOptions) (*GroupMember, error) { + obj, err := s.objectClient.Get(name, opts) + return obj.(*GroupMember), err +} + +func (s *groupMemberClient) Update(o *GroupMember) (*GroupMember, error) { + obj, err := s.objectClient.Update(o.Name, o) + return obj.(*GroupMember), err +} + +func (s *groupMemberClient) Delete(name string, options *metav1.DeleteOptions) error { + return s.objectClient.Delete(name, options) +} + +func (s *groupMemberClient) List(opts metav1.ListOptions) (*GroupMemberList, error) { + obj, err := s.objectClient.List(opts) + return obj.(*GroupMemberList), err +} + +func (s *groupMemberClient) Watch(opts metav1.ListOptions) (watch.Interface, error) { + return s.objectClient.Watch(opts) +} + +func (s *groupMemberClient) DeleteCollection(deleteOpts *metav1.DeleteOptions, listOpts metav1.ListOptions) error { + return s.objectClient.DeleteCollection(deleteOpts, listOpts) +} diff --git a/apis/management.cattle.io/v3/zz_generated_group_member_lifecycle_adapter.go b/apis/management.cattle.io/v3/zz_generated_group_member_lifecycle_adapter.go new file mode 100644 index 00000000..f5001b54 --- /dev/null +++ b/apis/management.cattle.io/v3/zz_generated_group_member_lifecycle_adapter.go @@ -0,0 +1,39 @@ +package v3 + +import ( + "github.com/rancher/norman/lifecycle" + "k8s.io/apimachinery/pkg/runtime" +) + +type GroupMemberLifecycle interface { + Create(obj *GroupMember) error + Remove(obj *GroupMember) error + Updated(obj *GroupMember) error +} + +type groupMemberLifecycleAdapter struct { + lifecycle GroupMemberLifecycle +} + +func (w *groupMemberLifecycleAdapter) Create(obj runtime.Object) error { + return w.lifecycle.Create(obj.(*GroupMember)) +} + +func (w *groupMemberLifecycleAdapter) Finalize(obj runtime.Object) error { + return w.lifecycle.Remove(obj.(*GroupMember)) +} + +func (w *groupMemberLifecycleAdapter) Updated(obj runtime.Object) error { + return w.lifecycle.Updated(obj.(*GroupMember)) +} + +func NewGroupMemberLifecycleAdapter(name string, client GroupMemberInterface, l GroupMemberLifecycle) GroupMemberHandlerFunc { + adapter := &groupMemberLifecycleAdapter{lifecycle: l} + syncFn := lifecycle.NewObjectLifecycleAdapter(name, adapter, client.ObjectClient()) + return func(key string, obj *GroupMember) error { + if obj == nil { + return syncFn(key, nil) + } + return syncFn(key, obj) + } +} diff --git a/apis/management.cattle.io/v3/zz_generated_identity_controller.go b/apis/management.cattle.io/v3/zz_generated_identity_controller.go new file mode 100644 index 00000000..b21886f7 --- /dev/null +++ b/apis/management.cattle.io/v3/zz_generated_identity_controller.go @@ -0,0 +1,187 @@ +package v3 + +import ( + "context" + + "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" + "k8s.io/client-go/tools/cache" +) + +var ( + IdentityGroupVersionKind = schema.GroupVersionKind{ + Version: "v3", + Group: "management.cattle.io", + Kind: "Identity", + } + IdentityResource = metav1.APIResource{ + Name: "identities", + SingularName: "identity", + Namespaced: false, + Kind: IdentityGroupVersionKind.Kind, + } +) + +type IdentityList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []Identity +} + +type IdentityHandlerFunc func(key string, obj *Identity) error + +type IdentityLister interface { + List(namespace string, selector labels.Selector) (ret []*Identity, err error) + Get(namespace, name string) (*Identity, error) +} + +type IdentityController interface { + Informer() cache.SharedIndexInformer + Lister() IdentityLister + AddHandler(handler IdentityHandlerFunc) + Enqueue(namespace, name string) + Sync(ctx context.Context) error + Start(ctx context.Context, threadiness int) error +} + +type IdentityInterface interface { + ObjectClient() *clientbase.ObjectClient + Create(*Identity) (*Identity, error) + Get(name string, opts metav1.GetOptions) (*Identity, error) + Update(*Identity) (*Identity, error) + Delete(name string, options *metav1.DeleteOptions) error + List(opts metav1.ListOptions) (*IdentityList, error) + Watch(opts metav1.ListOptions) (watch.Interface, error) + DeleteCollection(deleteOpts *metav1.DeleteOptions, listOpts metav1.ListOptions) error + Controller() IdentityController +} + +type identityLister struct { + controller *identityController +} + +func (l *identityLister) List(namespace string, selector labels.Selector) (ret []*Identity, err error) { + err = cache.ListAllByNamespace(l.controller.Informer().GetIndexer(), namespace, selector, func(obj interface{}) { + ret = append(ret, obj.(*Identity)) + }) + return +} + +func (l *identityLister) Get(namespace, name string) (*Identity, 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: IdentityGroupVersionKind.Group, + Resource: "identity", + }, name) + } + return obj.(*Identity), nil +} + +type identityController struct { + controller.GenericController +} + +func (c *identityController) Lister() IdentityLister { + return &identityLister{ + controller: c, + } +} + +func (c *identityController) AddHandler(handler IdentityHandlerFunc) { + 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.(*Identity)) + }) +} + +type identityFactory struct { +} + +func (c identityFactory) Object() runtime.Object { + return &Identity{} +} + +func (c identityFactory) List() runtime.Object { + return &IdentityList{} +} + +func (s *identityClient) Controller() IdentityController { + s.client.Lock() + defer s.client.Unlock() + + c, ok := s.client.identityControllers[s.ns] + if ok { + return c + } + + genericController := controller.NewGenericController(IdentityGroupVersionKind.Kind+"Controller", + s.objectClient) + + c = &identityController{ + GenericController: genericController, + } + + s.client.identityControllers[s.ns] = c + s.client.starters = append(s.client.starters, c) + + return c +} + +type identityClient struct { + client *Client + ns string + objectClient *clientbase.ObjectClient + controller IdentityController +} + +func (s *identityClient) ObjectClient() *clientbase.ObjectClient { + return s.objectClient +} + +func (s *identityClient) Create(o *Identity) (*Identity, error) { + obj, err := s.objectClient.Create(o) + return obj.(*Identity), err +} + +func (s *identityClient) Get(name string, opts metav1.GetOptions) (*Identity, error) { + obj, err := s.objectClient.Get(name, opts) + return obj.(*Identity), err +} + +func (s *identityClient) Update(o *Identity) (*Identity, error) { + obj, err := s.objectClient.Update(o.Name, o) + return obj.(*Identity), err +} + +func (s *identityClient) Delete(name string, options *metav1.DeleteOptions) error { + return s.objectClient.Delete(name, options) +} + +func (s *identityClient) List(opts metav1.ListOptions) (*IdentityList, error) { + obj, err := s.objectClient.List(opts) + return obj.(*IdentityList), err +} + +func (s *identityClient) Watch(opts metav1.ListOptions) (watch.Interface, error) { + return s.objectClient.Watch(opts) +} + +func (s *identityClient) DeleteCollection(deleteOpts *metav1.DeleteOptions, listOpts metav1.ListOptions) error { + return s.objectClient.DeleteCollection(deleteOpts, listOpts) +} diff --git a/apis/management.cattle.io/v3/zz_generated_identity_lifecycle_adapter.go b/apis/management.cattle.io/v3/zz_generated_identity_lifecycle_adapter.go new file mode 100644 index 00000000..735844a5 --- /dev/null +++ b/apis/management.cattle.io/v3/zz_generated_identity_lifecycle_adapter.go @@ -0,0 +1,39 @@ +package v3 + +import ( + "github.com/rancher/norman/lifecycle" + "k8s.io/apimachinery/pkg/runtime" +) + +type IdentityLifecycle interface { + Create(obj *Identity) error + Remove(obj *Identity) error + Updated(obj *Identity) error +} + +type identityLifecycleAdapter struct { + lifecycle IdentityLifecycle +} + +func (w *identityLifecycleAdapter) Create(obj runtime.Object) error { + return w.lifecycle.Create(obj.(*Identity)) +} + +func (w *identityLifecycleAdapter) Finalize(obj runtime.Object) error { + return w.lifecycle.Remove(obj.(*Identity)) +} + +func (w *identityLifecycleAdapter) Updated(obj runtime.Object) error { + return w.lifecycle.Updated(obj.(*Identity)) +} + +func NewIdentityLifecycleAdapter(name string, client IdentityInterface, l IdentityLifecycle) IdentityHandlerFunc { + adapter := &identityLifecycleAdapter{lifecycle: l} + syncFn := lifecycle.NewObjectLifecycleAdapter(name, adapter, client.ObjectClient()) + return func(key string, obj *Identity) error { + if obj == nil { + return syncFn(key, nil) + } + return syncFn(key, obj) + } +} diff --git a/apis/management.cattle.io/v3/zz_generated_k8s_client.go b/apis/management.cattle.io/v3/zz_generated_k8s_client.go index 01f586e1..a07a28f9 100644 --- a/apis/management.cattle.io/v3/zz_generated_k8s_client.go +++ b/apis/management.cattle.io/v3/zz_generated_k8s_client.go @@ -26,6 +26,11 @@ type Interface interface { CatalogsGetter TemplatesGetter TemplateVersionsGetter + TokensGetter + UsersGetter + GroupsGetter + GroupMembersGetter + IdentitiesGetter } type Client struct { @@ -45,6 +50,11 @@ type Client struct { catalogControllers map[string]CatalogController templateControllers map[string]TemplateController templateVersionControllers map[string]TemplateVersionController + tokenControllers map[string]TokenController + userControllers map[string]UserController + groupControllers map[string]GroupController + groupMemberControllers map[string]GroupMemberController + identityControllers map[string]IdentityController } func NewForConfig(config rest.Config) (Interface, error) { @@ -73,6 +83,11 @@ func NewForConfig(config rest.Config) (Interface, error) { catalogControllers: map[string]CatalogController{}, templateControllers: map[string]TemplateController{}, templateVersionControllers: map[string]TemplateVersionController{}, + tokenControllers: map[string]TokenController{}, + userControllers: map[string]UserController{}, + groupControllers: map[string]GroupController{}, + groupMemberControllers: map[string]GroupMemberController{}, + identityControllers: map[string]IdentityController{}, }, nil } @@ -243,3 +258,68 @@ func (c *Client) TemplateVersions(namespace string) TemplateVersionInterface { objectClient: objectClient, } } + +type TokensGetter interface { + Tokens(namespace string) TokenInterface +} + +func (c *Client) Tokens(namespace string) TokenInterface { + objectClient := clientbase.NewObjectClient(namespace, c.restClient, &TokenResource, TokenGroupVersionKind, tokenFactory{}) + return &tokenClient{ + ns: namespace, + client: c, + objectClient: objectClient, + } +} + +type UsersGetter interface { + Users(namespace string) UserInterface +} + +func (c *Client) Users(namespace string) UserInterface { + objectClient := clientbase.NewObjectClient(namespace, c.restClient, &UserResource, UserGroupVersionKind, userFactory{}) + return &userClient{ + ns: namespace, + client: c, + objectClient: objectClient, + } +} + +type GroupsGetter interface { + Groups(namespace string) GroupInterface +} + +func (c *Client) Groups(namespace string) GroupInterface { + objectClient := clientbase.NewObjectClient(namespace, c.restClient, &GroupResource, GroupGroupVersionKind, groupFactory{}) + return &groupClient{ + ns: namespace, + client: c, + objectClient: objectClient, + } +} + +type GroupMembersGetter interface { + GroupMembers(namespace string) GroupMemberInterface +} + +func (c *Client) GroupMembers(namespace string) GroupMemberInterface { + objectClient := clientbase.NewObjectClient(namespace, c.restClient, &GroupMemberResource, GroupMemberGroupVersionKind, groupMemberFactory{}) + return &groupMemberClient{ + ns: namespace, + client: c, + objectClient: objectClient, + } +} + +type IdentitiesGetter interface { + Identities(namespace string) IdentityInterface +} + +func (c *Client) Identities(namespace string) IdentityInterface { + objectClient := clientbase.NewObjectClient(namespace, c.restClient, &IdentityResource, IdentityGroupVersionKind, identityFactory{}) + return &identityClient{ + ns: namespace, + client: c, + objectClient: objectClient, + } +} diff --git a/apis/management.cattle.io/v3/zz_generated_token_controller.go b/apis/management.cattle.io/v3/zz_generated_token_controller.go new file mode 100644 index 00000000..954e189e --- /dev/null +++ b/apis/management.cattle.io/v3/zz_generated_token_controller.go @@ -0,0 +1,187 @@ +package v3 + +import ( + "context" + + "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" + "k8s.io/client-go/tools/cache" +) + +var ( + TokenGroupVersionKind = schema.GroupVersionKind{ + Version: "v3", + Group: "management.cattle.io", + Kind: "Token", + } + TokenResource = metav1.APIResource{ + Name: "tokens", + SingularName: "token", + Namespaced: false, + Kind: TokenGroupVersionKind.Kind, + } +) + +type TokenList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []Token +} + +type TokenHandlerFunc func(key string, obj *Token) error + +type TokenLister interface { + List(namespace string, selector labels.Selector) (ret []*Token, err error) + Get(namespace, name string) (*Token, error) +} + +type TokenController interface { + Informer() cache.SharedIndexInformer + Lister() TokenLister + AddHandler(handler TokenHandlerFunc) + Enqueue(namespace, name string) + Sync(ctx context.Context) error + Start(ctx context.Context, threadiness int) error +} + +type TokenInterface interface { + ObjectClient() *clientbase.ObjectClient + Create(*Token) (*Token, error) + Get(name string, opts metav1.GetOptions) (*Token, error) + Update(*Token) (*Token, error) + Delete(name string, options *metav1.DeleteOptions) error + List(opts metav1.ListOptions) (*TokenList, error) + Watch(opts metav1.ListOptions) (watch.Interface, error) + DeleteCollection(deleteOpts *metav1.DeleteOptions, listOpts metav1.ListOptions) error + Controller() TokenController +} + +type tokenLister struct { + controller *tokenController +} + +func (l *tokenLister) List(namespace string, selector labels.Selector) (ret []*Token, err error) { + err = cache.ListAllByNamespace(l.controller.Informer().GetIndexer(), namespace, selector, func(obj interface{}) { + ret = append(ret, obj.(*Token)) + }) + return +} + +func (l *tokenLister) Get(namespace, name string) (*Token, 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: TokenGroupVersionKind.Group, + Resource: "token", + }, name) + } + return obj.(*Token), nil +} + +type tokenController struct { + controller.GenericController +} + +func (c *tokenController) Lister() TokenLister { + return &tokenLister{ + controller: c, + } +} + +func (c *tokenController) AddHandler(handler TokenHandlerFunc) { + 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.(*Token)) + }) +} + +type tokenFactory struct { +} + +func (c tokenFactory) Object() runtime.Object { + return &Token{} +} + +func (c tokenFactory) List() runtime.Object { + return &TokenList{} +} + +func (s *tokenClient) Controller() TokenController { + s.client.Lock() + defer s.client.Unlock() + + c, ok := s.client.tokenControllers[s.ns] + if ok { + return c + } + + genericController := controller.NewGenericController(TokenGroupVersionKind.Kind+"Controller", + s.objectClient) + + c = &tokenController{ + GenericController: genericController, + } + + s.client.tokenControllers[s.ns] = c + s.client.starters = append(s.client.starters, c) + + return c +} + +type tokenClient struct { + client *Client + ns string + objectClient *clientbase.ObjectClient + controller TokenController +} + +func (s *tokenClient) ObjectClient() *clientbase.ObjectClient { + return s.objectClient +} + +func (s *tokenClient) Create(o *Token) (*Token, error) { + obj, err := s.objectClient.Create(o) + return obj.(*Token), err +} + +func (s *tokenClient) Get(name string, opts metav1.GetOptions) (*Token, error) { + obj, err := s.objectClient.Get(name, opts) + return obj.(*Token), err +} + +func (s *tokenClient) Update(o *Token) (*Token, error) { + obj, err := s.objectClient.Update(o.Name, o) + return obj.(*Token), err +} + +func (s *tokenClient) Delete(name string, options *metav1.DeleteOptions) error { + return s.objectClient.Delete(name, options) +} + +func (s *tokenClient) List(opts metav1.ListOptions) (*TokenList, error) { + obj, err := s.objectClient.List(opts) + return obj.(*TokenList), err +} + +func (s *tokenClient) Watch(opts metav1.ListOptions) (watch.Interface, error) { + return s.objectClient.Watch(opts) +} + +func (s *tokenClient) DeleteCollection(deleteOpts *metav1.DeleteOptions, listOpts metav1.ListOptions) error { + return s.objectClient.DeleteCollection(deleteOpts, listOpts) +} diff --git a/apis/management.cattle.io/v3/zz_generated_token_lifecycle_adapter.go b/apis/management.cattle.io/v3/zz_generated_token_lifecycle_adapter.go new file mode 100644 index 00000000..9e37487f --- /dev/null +++ b/apis/management.cattle.io/v3/zz_generated_token_lifecycle_adapter.go @@ -0,0 +1,39 @@ +package v3 + +import ( + "github.com/rancher/norman/lifecycle" + "k8s.io/apimachinery/pkg/runtime" +) + +type TokenLifecycle interface { + Create(obj *Token) error + Remove(obj *Token) error + Updated(obj *Token) error +} + +type tokenLifecycleAdapter struct { + lifecycle TokenLifecycle +} + +func (w *tokenLifecycleAdapter) Create(obj runtime.Object) error { + return w.lifecycle.Create(obj.(*Token)) +} + +func (w *tokenLifecycleAdapter) Finalize(obj runtime.Object) error { + return w.lifecycle.Remove(obj.(*Token)) +} + +func (w *tokenLifecycleAdapter) Updated(obj runtime.Object) error { + return w.lifecycle.Updated(obj.(*Token)) +} + +func NewTokenLifecycleAdapter(name string, client TokenInterface, l TokenLifecycle) TokenHandlerFunc { + adapter := &tokenLifecycleAdapter{lifecycle: l} + syncFn := lifecycle.NewObjectLifecycleAdapter(name, adapter, client.ObjectClient()) + return func(key string, obj *Token) error { + if obj == nil { + return syncFn(key, nil) + } + return syncFn(key, obj) + } +} diff --git a/apis/management.cattle.io/v3/zz_generated_user_controller.go b/apis/management.cattle.io/v3/zz_generated_user_controller.go new file mode 100644 index 00000000..d3b08c2b --- /dev/null +++ b/apis/management.cattle.io/v3/zz_generated_user_controller.go @@ -0,0 +1,187 @@ +package v3 + +import ( + "context" + + "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" + "k8s.io/client-go/tools/cache" +) + +var ( + UserGroupVersionKind = schema.GroupVersionKind{ + Version: "v3", + Group: "management.cattle.io", + Kind: "User", + } + UserResource = metav1.APIResource{ + Name: "users", + SingularName: "user", + Namespaced: false, + Kind: UserGroupVersionKind.Kind, + } +) + +type UserList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []User +} + +type UserHandlerFunc func(key string, obj *User) error + +type UserLister interface { + List(namespace string, selector labels.Selector) (ret []*User, err error) + Get(namespace, name string) (*User, error) +} + +type UserController interface { + Informer() cache.SharedIndexInformer + Lister() UserLister + AddHandler(handler UserHandlerFunc) + Enqueue(namespace, name string) + Sync(ctx context.Context) error + Start(ctx context.Context, threadiness int) error +} + +type UserInterface interface { + ObjectClient() *clientbase.ObjectClient + Create(*User) (*User, error) + Get(name string, opts metav1.GetOptions) (*User, error) + Update(*User) (*User, error) + Delete(name string, options *metav1.DeleteOptions) error + List(opts metav1.ListOptions) (*UserList, error) + Watch(opts metav1.ListOptions) (watch.Interface, error) + DeleteCollection(deleteOpts *metav1.DeleteOptions, listOpts metav1.ListOptions) error + Controller() UserController +} + +type userLister struct { + controller *userController +} + +func (l *userLister) List(namespace string, selector labels.Selector) (ret []*User, err error) { + err = cache.ListAllByNamespace(l.controller.Informer().GetIndexer(), namespace, selector, func(obj interface{}) { + ret = append(ret, obj.(*User)) + }) + return +} + +func (l *userLister) Get(namespace, name string) (*User, 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: UserGroupVersionKind.Group, + Resource: "user", + }, name) + } + return obj.(*User), nil +} + +type userController struct { + controller.GenericController +} + +func (c *userController) Lister() UserLister { + return &userLister{ + controller: c, + } +} + +func (c *userController) AddHandler(handler UserHandlerFunc) { + 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.(*User)) + }) +} + +type userFactory struct { +} + +func (c userFactory) Object() runtime.Object { + return &User{} +} + +func (c userFactory) List() runtime.Object { + return &UserList{} +} + +func (s *userClient) Controller() UserController { + s.client.Lock() + defer s.client.Unlock() + + c, ok := s.client.userControllers[s.ns] + if ok { + return c + } + + genericController := controller.NewGenericController(UserGroupVersionKind.Kind+"Controller", + s.objectClient) + + c = &userController{ + GenericController: genericController, + } + + s.client.userControllers[s.ns] = c + s.client.starters = append(s.client.starters, c) + + return c +} + +type userClient struct { + client *Client + ns string + objectClient *clientbase.ObjectClient + controller UserController +} + +func (s *userClient) ObjectClient() *clientbase.ObjectClient { + return s.objectClient +} + +func (s *userClient) Create(o *User) (*User, error) { + obj, err := s.objectClient.Create(o) + return obj.(*User), err +} + +func (s *userClient) Get(name string, opts metav1.GetOptions) (*User, error) { + obj, err := s.objectClient.Get(name, opts) + return obj.(*User), err +} + +func (s *userClient) Update(o *User) (*User, error) { + obj, err := s.objectClient.Update(o.Name, o) + return obj.(*User), err +} + +func (s *userClient) Delete(name string, options *metav1.DeleteOptions) error { + return s.objectClient.Delete(name, options) +} + +func (s *userClient) List(opts metav1.ListOptions) (*UserList, error) { + obj, err := s.objectClient.List(opts) + return obj.(*UserList), err +} + +func (s *userClient) Watch(opts metav1.ListOptions) (watch.Interface, error) { + return s.objectClient.Watch(opts) +} + +func (s *userClient) DeleteCollection(deleteOpts *metav1.DeleteOptions, listOpts metav1.ListOptions) error { + return s.objectClient.DeleteCollection(deleteOpts, listOpts) +} diff --git a/apis/management.cattle.io/v3/zz_generated_user_lifecycle_adapter.go b/apis/management.cattle.io/v3/zz_generated_user_lifecycle_adapter.go new file mode 100644 index 00000000..9cc352d6 --- /dev/null +++ b/apis/management.cattle.io/v3/zz_generated_user_lifecycle_adapter.go @@ -0,0 +1,39 @@ +package v3 + +import ( + "github.com/rancher/norman/lifecycle" + "k8s.io/apimachinery/pkg/runtime" +) + +type UserLifecycle interface { + Create(obj *User) error + Remove(obj *User) error + Updated(obj *User) error +} + +type userLifecycleAdapter struct { + lifecycle UserLifecycle +} + +func (w *userLifecycleAdapter) Create(obj runtime.Object) error { + return w.lifecycle.Create(obj.(*User)) +} + +func (w *userLifecycleAdapter) Finalize(obj runtime.Object) error { + return w.lifecycle.Remove(obj.(*User)) +} + +func (w *userLifecycleAdapter) Updated(obj runtime.Object) error { + return w.lifecycle.Updated(obj.(*User)) +} + +func NewUserLifecycleAdapter(name string, client UserInterface, l UserLifecycle) UserHandlerFunc { + adapter := &userLifecycleAdapter{lifecycle: l} + syncFn := lifecycle.NewObjectLifecycleAdapter(name, adapter, client.ObjectClient()) + return func(key string, obj *User) error { + if obj == nil { + return syncFn(key, nil) + } + return syncFn(key, obj) + } +} diff --git a/client/management/v3/zz_generated_client.go b/client/management/v3/zz_generated_client.go index 9e8ac3ce..1d46d467 100644 --- a/client/management/v3/zz_generated_client.go +++ b/client/management/v3/zz_generated_client.go @@ -20,6 +20,11 @@ type Client struct { Catalog CatalogOperations Template TemplateOperations TemplateVersion TemplateVersionOperations + Token TokenOperations + User UserOperations + Group GroupOperations + GroupMember GroupMemberOperations + Identity IdentityOperations } func NewClient(opts *clientbase.ClientOpts) (*Client, error) { @@ -45,6 +50,11 @@ func NewClient(opts *clientbase.ClientOpts) (*Client, error) { client.Catalog = newCatalogClient(client) client.Template = newTemplateClient(client) client.TemplateVersion = newTemplateVersionClient(client) + client.Token = newTokenClient(client) + client.User = newUserClient(client) + client.Group = newGroupClient(client) + client.GroupMember = newGroupMemberClient(client) + client.Identity = newIdentityClient(client) return client, nil } diff --git a/client/management/v3/zz_generated_group.go b/client/management/v3/zz_generated_group.go new file mode 100644 index 00000000..d36ce62b --- /dev/null +++ b/client/management/v3/zz_generated_group.go @@ -0,0 +1,99 @@ +package client + +import ( + "github.com/rancher/norman/types" +) + +const ( + GroupType = "group" + GroupFieldAnnotations = "annotations" + GroupFieldCreated = "created" + GroupFieldDisplayName = "displayName" + GroupFieldExternalID = "externalID" + GroupFieldFinalizers = "finalizers" + GroupFieldGroupName = "groupName" + GroupFieldLabels = "labels" + GroupFieldName = "name" + GroupFieldOwnerReferences = "ownerReferences" + GroupFieldRemoved = "removed" + GroupFieldResourcePath = "resourcePath" + GroupFieldUuid = "uuid" +) + +type Group struct { + types.Resource + Annotations map[string]string `json:"annotations,omitempty"` + Created string `json:"created,omitempty"` + DisplayName string `json:"displayName,omitempty"` + ExternalID string `json:"externalID,omitempty"` + Finalizers []string `json:"finalizers,omitempty"` + GroupName string `json:"groupName,omitempty"` + Labels map[string]string `json:"labels,omitempty"` + Name string `json:"name,omitempty"` + OwnerReferences []OwnerReference `json:"ownerReferences,omitempty"` + Removed string `json:"removed,omitempty"` + ResourcePath string `json:"resourcePath,omitempty"` + Uuid string `json:"uuid,omitempty"` +} +type GroupCollection struct { + types.Collection + Data []Group `json:"data,omitempty"` + client *GroupClient +} + +type GroupClient struct { + apiClient *Client +} + +type GroupOperations interface { + List(opts *types.ListOpts) (*GroupCollection, error) + Create(opts *Group) (*Group, error) + Update(existing *Group, updates interface{}) (*Group, error) + ByID(id string) (*Group, error) + Delete(container *Group) error +} + +func newGroupClient(apiClient *Client) *GroupClient { + return &GroupClient{ + apiClient: apiClient, + } +} + +func (c *GroupClient) Create(container *Group) (*Group, error) { + resp := &Group{} + err := c.apiClient.Ops.DoCreate(GroupType, container, resp) + return resp, err +} + +func (c *GroupClient) Update(existing *Group, updates interface{}) (*Group, error) { + resp := &Group{} + err := c.apiClient.Ops.DoUpdate(GroupType, &existing.Resource, updates, resp) + return resp, err +} + +func (c *GroupClient) List(opts *types.ListOpts) (*GroupCollection, error) { + resp := &GroupCollection{} + err := c.apiClient.Ops.DoList(GroupType, opts, resp) + resp.client = c + return resp, err +} + +func (cc *GroupCollection) Next() (*GroupCollection, error) { + if cc != nil && cc.Pagination != nil && cc.Pagination.Next != "" { + resp := &GroupCollection{} + err := cc.client.apiClient.Ops.DoNext(cc.Pagination.Next, resp) + resp.client = cc.client + return resp, err + } + return nil, nil +} + +func (c *GroupClient) ByID(id string) (*Group, error) { + resp := &Group{} + err := c.apiClient.Ops.DoByID(GroupType, id, resp) + return resp, err +} + +func (c *GroupClient) Delete(container *Group) error { + return c.apiClient.Ops.DoResourceDelete(GroupType, &container.Resource) +} diff --git a/client/management/v3/zz_generated_group_member.go b/client/management/v3/zz_generated_group_member.go new file mode 100644 index 00000000..692993a8 --- /dev/null +++ b/client/management/v3/zz_generated_group_member.go @@ -0,0 +1,97 @@ +package client + +import ( + "github.com/rancher/norman/types" +) + +const ( + GroupMemberType = "groupMember" + GroupMemberFieldAnnotations = "annotations" + GroupMemberFieldCreated = "created" + GroupMemberFieldFinalizers = "finalizers" + GroupMemberFieldGroupExternalID = "groupExternalID" + GroupMemberFieldLabels = "labels" + GroupMemberFieldMemberExternalID = "memberExternalID" + GroupMemberFieldName = "name" + GroupMemberFieldOwnerReferences = "ownerReferences" + GroupMemberFieldRemoved = "removed" + GroupMemberFieldResourcePath = "resourcePath" + GroupMemberFieldUuid = "uuid" +) + +type GroupMember struct { + types.Resource + Annotations map[string]string `json:"annotations,omitempty"` + Created string `json:"created,omitempty"` + Finalizers []string `json:"finalizers,omitempty"` + GroupExternalID string `json:"groupExternalID,omitempty"` + Labels map[string]string `json:"labels,omitempty"` + MemberExternalID string `json:"memberExternalID,omitempty"` + Name string `json:"name,omitempty"` + OwnerReferences []OwnerReference `json:"ownerReferences,omitempty"` + Removed string `json:"removed,omitempty"` + ResourcePath string `json:"resourcePath,omitempty"` + Uuid string `json:"uuid,omitempty"` +} +type GroupMemberCollection struct { + types.Collection + Data []GroupMember `json:"data,omitempty"` + client *GroupMemberClient +} + +type GroupMemberClient struct { + apiClient *Client +} + +type GroupMemberOperations interface { + List(opts *types.ListOpts) (*GroupMemberCollection, error) + Create(opts *GroupMember) (*GroupMember, error) + Update(existing *GroupMember, updates interface{}) (*GroupMember, error) + ByID(id string) (*GroupMember, error) + Delete(container *GroupMember) error +} + +func newGroupMemberClient(apiClient *Client) *GroupMemberClient { + return &GroupMemberClient{ + apiClient: apiClient, + } +} + +func (c *GroupMemberClient) Create(container *GroupMember) (*GroupMember, error) { + resp := &GroupMember{} + err := c.apiClient.Ops.DoCreate(GroupMemberType, container, resp) + return resp, err +} + +func (c *GroupMemberClient) Update(existing *GroupMember, updates interface{}) (*GroupMember, error) { + resp := &GroupMember{} + err := c.apiClient.Ops.DoUpdate(GroupMemberType, &existing.Resource, updates, resp) + return resp, err +} + +func (c *GroupMemberClient) List(opts *types.ListOpts) (*GroupMemberCollection, error) { + resp := &GroupMemberCollection{} + err := c.apiClient.Ops.DoList(GroupMemberType, opts, resp) + resp.client = c + return resp, err +} + +func (cc *GroupMemberCollection) Next() (*GroupMemberCollection, error) { + if cc != nil && cc.Pagination != nil && cc.Pagination.Next != "" { + resp := &GroupMemberCollection{} + err := cc.client.apiClient.Ops.DoNext(cc.Pagination.Next, resp) + resp.client = cc.client + return resp, err + } + return nil, nil +} + +func (c *GroupMemberClient) ByID(id string) (*GroupMember, error) { + resp := &GroupMember{} + err := c.apiClient.Ops.DoByID(GroupMemberType, id, resp) + return resp, err +} + +func (c *GroupMemberClient) Delete(container *GroupMember) error { + return c.apiClient.Ops.DoResourceDelete(GroupMemberType, &container.Resource) +} diff --git a/client/management/v3/zz_generated_identity.go b/client/management/v3/zz_generated_identity.go new file mode 100644 index 00000000..ff4b5062 --- /dev/null +++ b/client/management/v3/zz_generated_identity.go @@ -0,0 +1,109 @@ +package client + +import ( + "github.com/rancher/norman/types" +) + +const ( + IdentityType = "identity" + IdentityFieldAnnotations = "annotations" + IdentityFieldCreated = "created" + IdentityFieldDisplayName = "displayName" + IdentityFieldExternalID = "externalID" + IdentityFieldExtraInfo = "extraInfo" + IdentityFieldFinalizers = "finalizers" + IdentityFieldIdentityName = "identityName" + IdentityFieldLabels = "labels" + IdentityFieldMe = "me" + IdentityFieldMemberOf = "memberOf" + IdentityFieldName = "name" + IdentityFieldOwnerReferences = "ownerReferences" + IdentityFieldProfilePicture = "profilePicture" + IdentityFieldProfileURL = "profileURL" + IdentityFieldRemoved = "removed" + IdentityFieldResourcePath = "resourcePath" + IdentityFieldUuid = "uuid" +) + +type Identity struct { + types.Resource + Annotations map[string]string `json:"annotations,omitempty"` + Created string `json:"created,omitempty"` + DisplayName string `json:"displayName,omitempty"` + ExternalID string `json:"externalID,omitempty"` + ExtraInfo map[string]string `json:"extraInfo,omitempty"` + Finalizers []string `json:"finalizers,omitempty"` + IdentityName string `json:"identityName,omitempty"` + Labels map[string]string `json:"labels,omitempty"` + Me *bool `json:"me,omitempty"` + MemberOf *bool `json:"memberOf,omitempty"` + Name string `json:"name,omitempty"` + OwnerReferences []OwnerReference `json:"ownerReferences,omitempty"` + ProfilePicture string `json:"profilePicture,omitempty"` + ProfileURL string `json:"profileURL,omitempty"` + Removed string `json:"removed,omitempty"` + ResourcePath string `json:"resourcePath,omitempty"` + Uuid string `json:"uuid,omitempty"` +} +type IdentityCollection struct { + types.Collection + Data []Identity `json:"data,omitempty"` + client *IdentityClient +} + +type IdentityClient struct { + apiClient *Client +} + +type IdentityOperations interface { + List(opts *types.ListOpts) (*IdentityCollection, error) + Create(opts *Identity) (*Identity, error) + Update(existing *Identity, updates interface{}) (*Identity, error) + ByID(id string) (*Identity, error) + Delete(container *Identity) error +} + +func newIdentityClient(apiClient *Client) *IdentityClient { + return &IdentityClient{ + apiClient: apiClient, + } +} + +func (c *IdentityClient) Create(container *Identity) (*Identity, error) { + resp := &Identity{} + err := c.apiClient.Ops.DoCreate(IdentityType, container, resp) + return resp, err +} + +func (c *IdentityClient) Update(existing *Identity, updates interface{}) (*Identity, error) { + resp := &Identity{} + err := c.apiClient.Ops.DoUpdate(IdentityType, &existing.Resource, updates, resp) + return resp, err +} + +func (c *IdentityClient) List(opts *types.ListOpts) (*IdentityCollection, error) { + resp := &IdentityCollection{} + err := c.apiClient.Ops.DoList(IdentityType, opts, resp) + resp.client = c + return resp, err +} + +func (cc *IdentityCollection) Next() (*IdentityCollection, error) { + if cc != nil && cc.Pagination != nil && cc.Pagination.Next != "" { + resp := &IdentityCollection{} + err := cc.client.apiClient.Ops.DoNext(cc.Pagination.Next, resp) + resp.client = cc.client + return resp, err + } + return nil, nil +} + +func (c *IdentityClient) ByID(id string) (*Identity, error) { + resp := &Identity{} + err := c.apiClient.Ops.DoByID(IdentityType, id, resp) + return resp, err +} + +func (c *IdentityClient) Delete(container *Identity) error { + return c.apiClient.Ops.DoResourceDelete(IdentityType, &container.Resource) +} diff --git a/client/management/v3/zz_generated_token.go b/client/management/v3/zz_generated_token.go new file mode 100644 index 00000000..f82e5080 --- /dev/null +++ b/client/management/v3/zz_generated_token.go @@ -0,0 +1,113 @@ +package client + +import ( + "github.com/rancher/norman/types" +) + +const ( + TokenType = "token" + TokenFieldAnnotations = "annotations" + TokenFieldAuthProvider = "authProvider" + TokenFieldCreated = "created" + TokenFieldDescription = "description" + TokenFieldExternalID = "externalID" + TokenFieldFinalizers = "finalizers" + TokenFieldIsDerived = "isDerived" + TokenFieldLabels = "labels" + TokenFieldLastUpdateTime = "lastUpdateTime" + TokenFieldName = "name" + TokenFieldOwnerReferences = "ownerReferences" + TokenFieldRefreshTTLMillis = "refreshTTL" + TokenFieldRemoved = "removed" + TokenFieldResourcePath = "resourcePath" + TokenFieldTTLMillis = "ttl" + TokenFieldTokenID = "tokenID" + TokenFieldTokenValue = "tokenValue" + TokenFieldUser = "user" + TokenFieldUuid = "uuid" +) + +type Token struct { + types.Resource + Annotations map[string]string `json:"annotations,omitempty"` + AuthProvider string `json:"authProvider,omitempty"` + Created string `json:"created,omitempty"` + Description string `json:"description,omitempty"` + ExternalID string `json:"externalID,omitempty"` + Finalizers []string `json:"finalizers,omitempty"` + IsDerived *bool `json:"isDerived,omitempty"` + Labels map[string]string `json:"labels,omitempty"` + LastUpdateTime string `json:"lastUpdateTime,omitempty"` + Name string `json:"name,omitempty"` + OwnerReferences []OwnerReference `json:"ownerReferences,omitempty"` + RefreshTTLMillis string `json:"refreshTTL,omitempty"` + Removed string `json:"removed,omitempty"` + ResourcePath string `json:"resourcePath,omitempty"` + TTLMillis string `json:"ttl,omitempty"` + TokenID string `json:"tokenID,omitempty"` + TokenValue string `json:"tokenValue,omitempty"` + User string `json:"user,omitempty"` + Uuid string `json:"uuid,omitempty"` +} +type TokenCollection struct { + types.Collection + Data []Token `json:"data,omitempty"` + client *TokenClient +} + +type TokenClient struct { + apiClient *Client +} + +type TokenOperations interface { + List(opts *types.ListOpts) (*TokenCollection, error) + Create(opts *Token) (*Token, error) + Update(existing *Token, updates interface{}) (*Token, error) + ByID(id string) (*Token, error) + Delete(container *Token) error +} + +func newTokenClient(apiClient *Client) *TokenClient { + return &TokenClient{ + apiClient: apiClient, + } +} + +func (c *TokenClient) Create(container *Token) (*Token, error) { + resp := &Token{} + err := c.apiClient.Ops.DoCreate(TokenType, container, resp) + return resp, err +} + +func (c *TokenClient) Update(existing *Token, updates interface{}) (*Token, error) { + resp := &Token{} + err := c.apiClient.Ops.DoUpdate(TokenType, &existing.Resource, updates, resp) + return resp, err +} + +func (c *TokenClient) List(opts *types.ListOpts) (*TokenCollection, error) { + resp := &TokenCollection{} + err := c.apiClient.Ops.DoList(TokenType, opts, resp) + resp.client = c + return resp, err +} + +func (cc *TokenCollection) Next() (*TokenCollection, error) { + if cc != nil && cc.Pagination != nil && cc.Pagination.Next != "" { + resp := &TokenCollection{} + err := cc.client.apiClient.Ops.DoNext(cc.Pagination.Next, resp) + resp.client = cc.client + return resp, err + } + return nil, nil +} + +func (c *TokenClient) ByID(id string) (*Token, error) { + resp := &Token{} + err := c.apiClient.Ops.DoByID(TokenType, id, resp) + return resp, err +} + +func (c *TokenClient) Delete(container *Token) error { + return c.apiClient.Ops.DoResourceDelete(TokenType, &container.Resource) +} diff --git a/client/management/v3/zz_generated_user.go b/client/management/v3/zz_generated_user.go new file mode 100644 index 00000000..00ae87d4 --- /dev/null +++ b/client/management/v3/zz_generated_user.go @@ -0,0 +1,101 @@ +package client + +import ( + "github.com/rancher/norman/types" +) + +const ( + UserType = "user" + UserFieldAnnotations = "annotations" + UserFieldCreated = "created" + UserFieldDisplayName = "displayName" + UserFieldExternalID = "externalID" + UserFieldFinalizers = "finalizers" + UserFieldLabels = "labels" + UserFieldName = "name" + UserFieldOwnerReferences = "ownerReferences" + UserFieldRemoved = "removed" + UserFieldResourcePath = "resourcePath" + UserFieldSecret = "secret" + UserFieldUserName = "userName" + UserFieldUuid = "uuid" +) + +type User struct { + types.Resource + Annotations map[string]string `json:"annotations,omitempty"` + Created string `json:"created,omitempty"` + DisplayName string `json:"displayName,omitempty"` + ExternalID string `json:"externalID,omitempty"` + Finalizers []string `json:"finalizers,omitempty"` + Labels map[string]string `json:"labels,omitempty"` + Name string `json:"name,omitempty"` + OwnerReferences []OwnerReference `json:"ownerReferences,omitempty"` + Removed string `json:"removed,omitempty"` + ResourcePath string `json:"resourcePath,omitempty"` + Secret string `json:"secret,omitempty"` + UserName string `json:"userName,omitempty"` + Uuid string `json:"uuid,omitempty"` +} +type UserCollection struct { + types.Collection + Data []User `json:"data,omitempty"` + client *UserClient +} + +type UserClient struct { + apiClient *Client +} + +type UserOperations interface { + List(opts *types.ListOpts) (*UserCollection, error) + Create(opts *User) (*User, error) + Update(existing *User, updates interface{}) (*User, error) + ByID(id string) (*User, error) + Delete(container *User) error +} + +func newUserClient(apiClient *Client) *UserClient { + return &UserClient{ + apiClient: apiClient, + } +} + +func (c *UserClient) Create(container *User) (*User, error) { + resp := &User{} + err := c.apiClient.Ops.DoCreate(UserType, container, resp) + return resp, err +} + +func (c *UserClient) Update(existing *User, updates interface{}) (*User, error) { + resp := &User{} + err := c.apiClient.Ops.DoUpdate(UserType, &existing.Resource, updates, resp) + return resp, err +} + +func (c *UserClient) List(opts *types.ListOpts) (*UserCollection, error) { + resp := &UserCollection{} + err := c.apiClient.Ops.DoList(UserType, opts, resp) + resp.client = c + return resp, err +} + +func (cc *UserCollection) Next() (*UserCollection, error) { + if cc != nil && cc.Pagination != nil && cc.Pagination.Next != "" { + resp := &UserCollection{} + err := cc.client.apiClient.Ops.DoNext(cc.Pagination.Next, resp) + resp.client = cc.client + return resp, err + } + return nil, nil +} + +func (c *UserClient) ByID(id string) (*User, error) { + resp := &User{} + err := c.apiClient.Ops.DoByID(UserType, id, resp) + return resp, err +} + +func (c *UserClient) Delete(container *User) error { + return c.apiClient.Ops.DoResourceDelete(UserType, &container.Resource) +}