diff --git a/apis/core/v1/zz_generated_deepcopy.go b/apis/core/v1/zz_generated_deepcopy.go index 80e22a46..5131fc42 100644 --- a/apis/core/v1/zz_generated_deepcopy.go +++ b/apis/core/v1/zz_generated_deepcopy.go @@ -22,6 +22,10 @@ func RegisterDeepCopies(scheme *runtime.Scheme) error { in.(*ComponentStatusList).DeepCopyInto(out.(*ComponentStatusList)) return nil }, InType: reflect.TypeOf(&ComponentStatusList{})}, + conversion.GeneratedDeepCopyFunc{Fn: func(in interface{}, out interface{}, c *conversion.Cloner) error { + in.(*EndpointsList).DeepCopyInto(out.(*EndpointsList)) + return nil + }, InType: reflect.TypeOf(&EndpointsList{})}, conversion.GeneratedDeepCopyFunc{Fn: func(in interface{}, out interface{}, c *conversion.Cloner) error { in.(*EventList).DeepCopyInto(out.(*EventList)) return nil @@ -83,6 +87,40 @@ func (in *ComponentStatusList) DeepCopyObject() runtime.Object { } } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *EndpointsList) DeepCopyInto(out *EndpointsList) { + *out = *in + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]core_v1.Endpoints, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EndpointsList. +func (in *EndpointsList) DeepCopy() *EndpointsList { + if in == nil { + return nil + } + out := new(EndpointsList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *EndpointsList) 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 *EventList) DeepCopyInto(out *EventList) { *out = *in diff --git a/apis/core/v1/zz_generated_endpoints_controller.go b/apis/core/v1/zz_generated_endpoints_controller.go new file mode 100644 index 00000000..e4dc7475 --- /dev/null +++ b/apis/core/v1/zz_generated_endpoints_controller.go @@ -0,0 +1,223 @@ +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 ( + EndpointsGroupVersionKind = schema.GroupVersionKind{ + Version: Version, + Group: GroupName, + Kind: "Endpoints", + } + EndpointsResource = metav1.APIResource{ + Name: "endpoints", + SingularName: "endpoints", + Namespaced: true, + + Kind: EndpointsGroupVersionKind.Kind, + } +) + +type EndpointsList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []v1.Endpoints +} + +type EndpointsHandlerFunc func(key string, obj *v1.Endpoints) error + +type EndpointsLister interface { + List(namespace string, selector labels.Selector) (ret []*v1.Endpoints, err error) + Get(namespace, name string) (*v1.Endpoints, error) +} + +type EndpointsController interface { + Informer() cache.SharedIndexInformer + Lister() EndpointsLister + AddHandler(handler EndpointsHandlerFunc) + Enqueue(namespace, name string) + Sync(ctx context.Context) error + Start(ctx context.Context, threadiness int) error +} + +type EndpointsInterface interface { + ObjectClient() *clientbase.ObjectClient + Create(*v1.Endpoints) (*v1.Endpoints, error) + GetNamespace(name, namespace string, opts metav1.GetOptions) (*v1.Endpoints, error) + Get(name string, opts metav1.GetOptions) (*v1.Endpoints, error) + Update(*v1.Endpoints) (*v1.Endpoints, error) + Delete(name string, options *metav1.DeleteOptions) error + DeleteNamespace(name, namespace string, options *metav1.DeleteOptions) error + List(opts metav1.ListOptions) (*EndpointsList, error) + Watch(opts metav1.ListOptions) (watch.Interface, error) + DeleteCollection(deleteOpts *metav1.DeleteOptions, listOpts metav1.ListOptions) error + Controller() EndpointsController + AddSyncHandler(sync EndpointsHandlerFunc) + AddLifecycle(name string, lifecycle EndpointsLifecycle) +} + +type endpointsLister struct { + controller *endpointsController +} + +func (l *endpointsLister) List(namespace string, selector labels.Selector) (ret []*v1.Endpoints, err error) { + err = cache.ListAllByNamespace(l.controller.Informer().GetIndexer(), namespace, selector, func(obj interface{}) { + ret = append(ret, obj.(*v1.Endpoints)) + }) + return +} + +func (l *endpointsLister) Get(namespace, name string) (*v1.Endpoints, error) { + var key string + if namespace != "" { + key = namespace + "/" + name + } else { + key = name + } + obj, exists, err := l.controller.Informer().GetIndexer().GetByKey(key) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(schema.GroupResource{ + Group: EndpointsGroupVersionKind.Group, + Resource: "endpoints", + }, name) + } + return obj.(*v1.Endpoints), nil +} + +type endpointsController struct { + controller.GenericController +} + +func (c *endpointsController) Lister() EndpointsLister { + return &endpointsLister{ + controller: c, + } +} + +func (c *endpointsController) AddHandler(handler EndpointsHandlerFunc) { + 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.Endpoints)) + }) +} + +type endpointsFactory struct { +} + +func (c endpointsFactory) Object() runtime.Object { + return &v1.Endpoints{} +} + +func (c endpointsFactory) List() runtime.Object { + return &EndpointsList{} +} + +func (s *endpointsClient) Controller() EndpointsController { + s.client.Lock() + defer s.client.Unlock() + + c, ok := s.client.endpointsControllers[s.ns] + if ok { + return c + } + + genericController := controller.NewGenericController(EndpointsGroupVersionKind.Kind+"Controller", + s.objectClient) + + c = &endpointsController{ + GenericController: genericController, + } + + s.client.endpointsControllers[s.ns] = c + s.client.starters = append(s.client.starters, c) + + return c +} + +type endpointsClient struct { + client *Client + ns string + objectClient *clientbase.ObjectClient + controller EndpointsController +} + +func (s *endpointsClient) ObjectClient() *clientbase.ObjectClient { + return s.objectClient +} + +func (s *endpointsClient) Create(o *v1.Endpoints) (*v1.Endpoints, error) { + obj, err := s.objectClient.Create(o) + return obj.(*v1.Endpoints), err +} + +func (s *endpointsClient) Get(name string, opts metav1.GetOptions) (*v1.Endpoints, error) { + obj, err := s.objectClient.Get(name, opts) + return obj.(*v1.Endpoints), err +} + +func (s *endpointsClient) GetNamespace(name, namespace string, opts metav1.GetOptions) (*v1.Endpoints, error) { + obj, err := s.objectClient.GetNamespace(name, namespace, opts) + return obj.(*v1.Endpoints), err +} + +func (s *endpointsClient) Update(o *v1.Endpoints) (*v1.Endpoints, error) { + obj, err := s.objectClient.Update(o.Name, o) + return obj.(*v1.Endpoints), err +} + +func (s *endpointsClient) Delete(name string, options *metav1.DeleteOptions) error { + return s.objectClient.Delete(name, options) +} + +func (s *endpointsClient) DeleteNamespace(name, namespace string, options *metav1.DeleteOptions) error { + return s.objectClient.DeleteNamespace(name, namespace, options) +} + +func (s *endpointsClient) List(opts metav1.ListOptions) (*EndpointsList, error) { + obj, err := s.objectClient.List(opts) + return obj.(*EndpointsList), err +} + +func (s *endpointsClient) Watch(opts metav1.ListOptions) (watch.Interface, error) { + return s.objectClient.Watch(opts) +} + +// Patch applies the patch and returns the patched deployment. +func (s *endpointsClient) Patch(o *v1.Endpoints, data []byte, subresources ...string) (*v1.Endpoints, error) { + obj, err := s.objectClient.Patch(o.Name, o, data, subresources...) + return obj.(*v1.Endpoints), err +} + +func (s *endpointsClient) DeleteCollection(deleteOpts *metav1.DeleteOptions, listOpts metav1.ListOptions) error { + return s.objectClient.DeleteCollection(deleteOpts, listOpts) +} + +func (s *endpointsClient) AddSyncHandler(sync EndpointsHandlerFunc) { + s.Controller().AddHandler(sync) +} + +func (s *endpointsClient) AddLifecycle(name string, lifecycle EndpointsLifecycle) { + sync := NewEndpointsLifecycleAdapter(name, s, lifecycle) + s.AddSyncHandler(sync) +} diff --git a/apis/core/v1/zz_generated_endpoints_lifecycle_adapter.go b/apis/core/v1/zz_generated_endpoints_lifecycle_adapter.go new file mode 100644 index 00000000..28d15739 --- /dev/null +++ b/apis/core/v1/zz_generated_endpoints_lifecycle_adapter.go @@ -0,0 +1,52 @@ +package v1 + +import ( + "github.com/rancher/norman/lifecycle" + "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/runtime" +) + +type EndpointsLifecycle interface { + Create(obj *v1.Endpoints) (*v1.Endpoints, error) + Remove(obj *v1.Endpoints) (*v1.Endpoints, error) + Updated(obj *v1.Endpoints) (*v1.Endpoints, error) +} + +type endpointsLifecycleAdapter struct { + lifecycle EndpointsLifecycle +} + +func (w *endpointsLifecycleAdapter) Create(obj runtime.Object) (runtime.Object, error) { + o, err := w.lifecycle.Create(obj.(*v1.Endpoints)) + if o == nil { + return nil, err + } + return o, err +} + +func (w *endpointsLifecycleAdapter) Finalize(obj runtime.Object) (runtime.Object, error) { + o, err := w.lifecycle.Remove(obj.(*v1.Endpoints)) + if o == nil { + return nil, err + } + return o, err +} + +func (w *endpointsLifecycleAdapter) Updated(obj runtime.Object) (runtime.Object, error) { + o, err := w.lifecycle.Updated(obj.(*v1.Endpoints)) + if o == nil { + return nil, err + } + return o, err +} + +func NewEndpointsLifecycleAdapter(name string, client EndpointsInterface, l EndpointsLifecycle) EndpointsHandlerFunc { + adapter := &endpointsLifecycleAdapter{lifecycle: l} + syncFn := lifecycle.NewObjectLifecycleAdapter(name, adapter, client.ObjectClient()) + return func(key string, obj *v1.Endpoints) error { + if obj == nil { + return syncFn(key, nil) + } + return syncFn(key, obj) + } +} diff --git a/apis/core/v1/zz_generated_k8s_client.go b/apis/core/v1/zz_generated_k8s_client.go index d938c173..adca1d35 100644 --- a/apis/core/v1/zz_generated_k8s_client.go +++ b/apis/core/v1/zz_generated_k8s_client.go @@ -18,6 +18,7 @@ type Interface interface { ComponentStatusesGetter NamespacesGetter EventsGetter + EndpointsGetter PodsGetter ServicesGetter SecretsGetter @@ -32,6 +33,7 @@ type Client struct { componentStatusControllers map[string]ComponentStatusController namespaceControllers map[string]NamespaceController eventControllers map[string]EventController + endpointsControllers map[string]EndpointsController podControllers map[string]PodController serviceControllers map[string]ServiceController secretControllers map[string]SecretController @@ -55,6 +57,7 @@ func NewForConfig(config rest.Config) (Interface, error) { componentStatusControllers: map[string]ComponentStatusController{}, namespaceControllers: map[string]NamespaceController{}, eventControllers: map[string]EventController{}, + endpointsControllers: map[string]EndpointsController{}, podControllers: map[string]PodController{}, serviceControllers: map[string]ServiceController{}, secretControllers: map[string]SecretController{}, @@ -125,6 +128,19 @@ func (c *Client) Events(namespace string) EventInterface { } } +type EndpointsGetter interface { + Endpoints(namespace string) EndpointsInterface +} + +func (c *Client) Endpoints(namespace string) EndpointsInterface { + objectClient := clientbase.NewObjectClient(namespace, c.restClient, &EndpointsResource, EndpointsGroupVersionKind, endpointsFactory{}) + return &endpointsClient{ + ns: namespace, + client: c, + objectClient: objectClient, + } +} + type PodsGetter interface { Pods(namespace string) PodInterface } diff --git a/apis/core/v1/zz_generated_scheme.go b/apis/core/v1/zz_generated_scheme.go index 7cff4b16..3cdf121c 100644 --- a/apis/core/v1/zz_generated_scheme.go +++ b/apis/core/v1/zz_generated_scheme.go @@ -37,6 +37,7 @@ func addKnownTypes(scheme *runtime.Scheme) error { &ComponentStatusList{}, &NamespaceList{}, &EventList{}, + &EndpointsList{}, &PodList{}, &ServiceList{}, &SecretList{}, diff --git a/apis/management.cattle.io/v3/zz_generated_deepcopy.go b/apis/management.cattle.io/v3/zz_generated_deepcopy.go index ebbd0d53..7352de8c 100644 --- a/apis/management.cattle.io/v3/zz_generated_deepcopy.go +++ b/apis/management.cattle.io/v3/zz_generated_deepcopy.go @@ -347,6 +347,10 @@ func RegisterDeepCopies(scheme *runtime.Scheme) error { in.(*RancherKubernetesEngineConfig).DeepCopyInto(out.(*RancherKubernetesEngineConfig)) return nil }, InType: reflect.TypeOf(&RancherKubernetesEngineConfig{})}, + conversion.GeneratedDeepCopyFunc{Fn: func(in interface{}, out interface{}, c *conversion.Cloner) error { + in.(*ReleaseInfo).DeepCopyInto(out.(*ReleaseInfo)) + return nil + }, InType: reflect.TypeOf(&ReleaseInfo{})}, conversion.GeneratedDeepCopyFunc{Fn: func(in interface{}, out interface{}, c *conversion.Cloner) error { in.(*RoleTemplate).DeepCopyInto(out.(*RoleTemplate)) return nil @@ -359,6 +363,22 @@ func RegisterDeepCopies(scheme *runtime.Scheme) error { in.(*SchedulerService).DeepCopyInto(out.(*SchedulerService)) return nil }, InType: reflect.TypeOf(&SchedulerService{})}, + conversion.GeneratedDeepCopyFunc{Fn: func(in interface{}, out interface{}, c *conversion.Cloner) error { + in.(*Stack).DeepCopyInto(out.(*Stack)) + return nil + }, InType: reflect.TypeOf(&Stack{})}, + conversion.GeneratedDeepCopyFunc{Fn: func(in interface{}, out interface{}, c *conversion.Cloner) error { + in.(*StackList).DeepCopyInto(out.(*StackList)) + return nil + }, InType: reflect.TypeOf(&StackList{})}, + conversion.GeneratedDeepCopyFunc{Fn: func(in interface{}, out interface{}, c *conversion.Cloner) error { + in.(*StackSpec).DeepCopyInto(out.(*StackSpec)) + return nil + }, InType: reflect.TypeOf(&StackSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: func(in interface{}, out interface{}, c *conversion.Cloner) error { + in.(*StackStatus).DeepCopyInto(out.(*StackStatus)) + return nil + }, InType: reflect.TypeOf(&StackStatus{})}, conversion.GeneratedDeepCopyFunc{Fn: func(in interface{}, out interface{}, c *conversion.Cloner) error { in.(*Template).DeepCopyInto(out.(*Template)) return nil @@ -2592,6 +2612,22 @@ func (in *RancherKubernetesEngineConfig) DeepCopy() *RancherKubernetesEngineConf return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ReleaseInfo) DeepCopyInto(out *ReleaseInfo) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ReleaseInfo. +func (in *ReleaseInfo) DeepCopy() *ReleaseInfo { + if in == nil { + return nil + } + out := new(ReleaseInfo) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *RoleTemplate) DeepCopyInto(out *RoleTemplate) { *out = *in @@ -2682,6 +2718,133 @@ func (in *SchedulerService) DeepCopy() *SchedulerService { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Stack) DeepCopyInto(out *Stack) { + *out = *in + out.Namespaced = in.Namespaced + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Stack. +func (in *Stack) DeepCopy() *Stack { + if in == nil { + return nil + } + out := new(Stack) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Stack) 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 *StackList) DeepCopyInto(out *StackList) { + *out = *in + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Stack, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StackList. +func (in *StackList) DeepCopy() *StackList { + if in == nil { + return nil + } + out := new(StackList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *StackList) 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 *StackSpec) DeepCopyInto(out *StackSpec) { + *out = *in + if in.Templates != nil { + in, out := &in.Templates, &out.Templates + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + if in.Answers != nil { + in, out := &in.Answers, &out.Answers + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + if in.Tag != nil { + in, out := &in.Tag, &out.Tag + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + if in.Groups != nil { + in, out := &in.Groups, &out.Groups + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StackSpec. +func (in *StackSpec) DeepCopy() *StackSpec { + if in == nil { + return nil + } + out := new(StackSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *StackStatus) DeepCopyInto(out *StackStatus) { + *out = *in + if in.Releases != nil { + in, out := &in.Releases, &out.Releases + *out = make([]ReleaseInfo, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StackStatus. +func (in *StackStatus) DeepCopy() *StackStatus { + if in == nil { + return nil + } + out := new(StackStatus) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Template) DeepCopyInto(out *Template) { *out = *in 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 f9b2f499..6ab6f392 100644 --- a/apis/management.cattle.io/v3/zz_generated_k8s_client.go +++ b/apis/management.cattle.io/v3/zz_generated_k8s_client.go @@ -36,6 +36,7 @@ type Interface interface { TokensGetter UsersGetter DynamicSchemasGetter + StacksGetter } type Client struct { @@ -65,6 +66,7 @@ type Client struct { tokenControllers map[string]TokenController userControllers map[string]UserController dynamicSchemaControllers map[string]DynamicSchemaController + stackControllers map[string]StackController } func NewForConfig(config rest.Config) (Interface, error) { @@ -103,6 +105,7 @@ func NewForConfig(config rest.Config) (Interface, error) { tokenControllers: map[string]TokenController{}, userControllers: map[string]UserController{}, dynamicSchemaControllers: map[string]DynamicSchemaController{}, + stackControllers: map[string]StackController{}, }, nil } @@ -403,3 +406,16 @@ func (c *Client) DynamicSchemas(namespace string) DynamicSchemaInterface { objectClient: objectClient, } } + +type StacksGetter interface { + Stacks(namespace string) StackInterface +} + +func (c *Client) Stacks(namespace string) StackInterface { + objectClient := clientbase.NewObjectClient(namespace, c.restClient, &StackResource, StackGroupVersionKind, stackFactory{}) + return &stackClient{ + ns: namespace, + client: c, + objectClient: objectClient, + } +} diff --git a/apis/management.cattle.io/v3/zz_generated_scheme.go b/apis/management.cattle.io/v3/zz_generated_scheme.go index ceb741de..5fb065fa 100644 --- a/apis/management.cattle.io/v3/zz_generated_scheme.go +++ b/apis/management.cattle.io/v3/zz_generated_scheme.go @@ -77,6 +77,8 @@ func addKnownTypes(scheme *runtime.Scheme) error { &UserList{}, &DynamicSchema{}, &DynamicSchemaList{}, + &Stack{}, + &StackList{}, ) return nil } diff --git a/apis/management.cattle.io/v3/zz_generated_stack_controller.go b/apis/management.cattle.io/v3/zz_generated_stack_controller.go new file mode 100644 index 00000000..2bcc0148 --- /dev/null +++ b/apis/management.cattle.io/v3/zz_generated_stack_controller.go @@ -0,0 +1,222 @@ +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 ( + StackGroupVersionKind = schema.GroupVersionKind{ + Version: Version, + Group: GroupName, + Kind: "Stack", + } + StackResource = metav1.APIResource{ + Name: "stacks", + SingularName: "stack", + Namespaced: true, + + Kind: StackGroupVersionKind.Kind, + } +) + +type StackList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []Stack +} + +type StackHandlerFunc func(key string, obj *Stack) error + +type StackLister interface { + List(namespace string, selector labels.Selector) (ret []*Stack, err error) + Get(namespace, name string) (*Stack, error) +} + +type StackController interface { + Informer() cache.SharedIndexInformer + Lister() StackLister + AddHandler(handler StackHandlerFunc) + Enqueue(namespace, name string) + Sync(ctx context.Context) error + Start(ctx context.Context, threadiness int) error +} + +type StackInterface interface { + ObjectClient() *clientbase.ObjectClient + Create(*Stack) (*Stack, error) + GetNamespace(name, namespace string, opts metav1.GetOptions) (*Stack, error) + Get(name string, opts metav1.GetOptions) (*Stack, error) + Update(*Stack) (*Stack, error) + Delete(name string, options *metav1.DeleteOptions) error + DeleteNamespace(name, namespace string, options *metav1.DeleteOptions) error + List(opts metav1.ListOptions) (*StackList, error) + Watch(opts metav1.ListOptions) (watch.Interface, error) + DeleteCollection(deleteOpts *metav1.DeleteOptions, listOpts metav1.ListOptions) error + Controller() StackController + AddSyncHandler(sync StackHandlerFunc) + AddLifecycle(name string, lifecycle StackLifecycle) +} + +type stackLister struct { + controller *stackController +} + +func (l *stackLister) List(namespace string, selector labels.Selector) (ret []*Stack, err error) { + err = cache.ListAllByNamespace(l.controller.Informer().GetIndexer(), namespace, selector, func(obj interface{}) { + ret = append(ret, obj.(*Stack)) + }) + return +} + +func (l *stackLister) Get(namespace, name string) (*Stack, error) { + var key string + if namespace != "" { + key = namespace + "/" + name + } else { + key = name + } + obj, exists, err := l.controller.Informer().GetIndexer().GetByKey(key) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(schema.GroupResource{ + Group: StackGroupVersionKind.Group, + Resource: "stack", + }, name) + } + return obj.(*Stack), nil +} + +type stackController struct { + controller.GenericController +} + +func (c *stackController) Lister() StackLister { + return &stackLister{ + controller: c, + } +} + +func (c *stackController) AddHandler(handler StackHandlerFunc) { + 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.(*Stack)) + }) +} + +type stackFactory struct { +} + +func (c stackFactory) Object() runtime.Object { + return &Stack{} +} + +func (c stackFactory) List() runtime.Object { + return &StackList{} +} + +func (s *stackClient) Controller() StackController { + s.client.Lock() + defer s.client.Unlock() + + c, ok := s.client.stackControllers[s.ns] + if ok { + return c + } + + genericController := controller.NewGenericController(StackGroupVersionKind.Kind+"Controller", + s.objectClient) + + c = &stackController{ + GenericController: genericController, + } + + s.client.stackControllers[s.ns] = c + s.client.starters = append(s.client.starters, c) + + return c +} + +type stackClient struct { + client *Client + ns string + objectClient *clientbase.ObjectClient + controller StackController +} + +func (s *stackClient) ObjectClient() *clientbase.ObjectClient { + return s.objectClient +} + +func (s *stackClient) Create(o *Stack) (*Stack, error) { + obj, err := s.objectClient.Create(o) + return obj.(*Stack), err +} + +func (s *stackClient) Get(name string, opts metav1.GetOptions) (*Stack, error) { + obj, err := s.objectClient.Get(name, opts) + return obj.(*Stack), err +} + +func (s *stackClient) GetNamespace(name, namespace string, opts metav1.GetOptions) (*Stack, error) { + obj, err := s.objectClient.GetNamespace(name, namespace, opts) + return obj.(*Stack), err +} + +func (s *stackClient) Update(o *Stack) (*Stack, error) { + obj, err := s.objectClient.Update(o.Name, o) + return obj.(*Stack), err +} + +func (s *stackClient) Delete(name string, options *metav1.DeleteOptions) error { + return s.objectClient.Delete(name, options) +} + +func (s *stackClient) DeleteNamespace(name, namespace string, options *metav1.DeleteOptions) error { + return s.objectClient.DeleteNamespace(name, namespace, options) +} + +func (s *stackClient) List(opts metav1.ListOptions) (*StackList, error) { + obj, err := s.objectClient.List(opts) + return obj.(*StackList), err +} + +func (s *stackClient) Watch(opts metav1.ListOptions) (watch.Interface, error) { + return s.objectClient.Watch(opts) +} + +// Patch applies the patch and returns the patched deployment. +func (s *stackClient) Patch(o *Stack, data []byte, subresources ...string) (*Stack, error) { + obj, err := s.objectClient.Patch(o.Name, o, data, subresources...) + return obj.(*Stack), err +} + +func (s *stackClient) DeleteCollection(deleteOpts *metav1.DeleteOptions, listOpts metav1.ListOptions) error { + return s.objectClient.DeleteCollection(deleteOpts, listOpts) +} + +func (s *stackClient) AddSyncHandler(sync StackHandlerFunc) { + s.Controller().AddHandler(sync) +} + +func (s *stackClient) AddLifecycle(name string, lifecycle StackLifecycle) { + sync := NewStackLifecycleAdapter(name, s, lifecycle) + s.AddSyncHandler(sync) +} diff --git a/apis/management.cattle.io/v3/zz_generated_stack_lifecycle_adapter.go b/apis/management.cattle.io/v3/zz_generated_stack_lifecycle_adapter.go new file mode 100644 index 00000000..d1fe6ff3 --- /dev/null +++ b/apis/management.cattle.io/v3/zz_generated_stack_lifecycle_adapter.go @@ -0,0 +1,51 @@ +package v3 + +import ( + "github.com/rancher/norman/lifecycle" + "k8s.io/apimachinery/pkg/runtime" +) + +type StackLifecycle interface { + Create(obj *Stack) (*Stack, error) + Remove(obj *Stack) (*Stack, error) + Updated(obj *Stack) (*Stack, error) +} + +type stackLifecycleAdapter struct { + lifecycle StackLifecycle +} + +func (w *stackLifecycleAdapter) Create(obj runtime.Object) (runtime.Object, error) { + o, err := w.lifecycle.Create(obj.(*Stack)) + if o == nil { + return nil, err + } + return o, err +} + +func (w *stackLifecycleAdapter) Finalize(obj runtime.Object) (runtime.Object, error) { + o, err := w.lifecycle.Remove(obj.(*Stack)) + if o == nil { + return nil, err + } + return o, err +} + +func (w *stackLifecycleAdapter) Updated(obj runtime.Object) (runtime.Object, error) { + o, err := w.lifecycle.Updated(obj.(*Stack)) + if o == nil { + return nil, err + } + return o, err +} + +func NewStackLifecycleAdapter(name string, client StackInterface, l StackLifecycle) StackHandlerFunc { + adapter := &stackLifecycleAdapter{lifecycle: l} + syncFn := lifecycle.NewObjectLifecycleAdapter(name, adapter, client.ObjectClient()) + return func(key string, obj *Stack) 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 5d9a45ec..3df5504b 100644 --- a/client/management/v3/zz_generated_client.go +++ b/client/management/v3/zz_generated_client.go @@ -30,6 +30,7 @@ type Client struct { Token TokenOperations User UserOperations DynamicSchema DynamicSchemaOperations + Stack StackOperations } func NewClient(opts *clientbase.ClientOpts) (*Client, error) { @@ -65,6 +66,7 @@ func NewClient(opts *clientbase.ClientOpts) (*Client, error) { client.Token = newTokenClient(client) client.User = newUserClient(client) client.DynamicSchema = newDynamicSchemaClient(client) + client.Stack = newStackClient(client) return client, nil } diff --git a/client/management/v3/zz_generated_release_info.go b/client/management/v3/zz_generated_release_info.go new file mode 100644 index 00000000..69d80d79 --- /dev/null +++ b/client/management/v3/zz_generated_release_info.go @@ -0,0 +1,18 @@ +package client + +const ( + ReleaseInfoType = "releaseInfo" + ReleaseInfoFieldCreateTimestamp = "createTimestamp" + ReleaseInfoFieldModifiedAt = "modifiedAt" + ReleaseInfoFieldName = "name" + ReleaseInfoFieldTemplateVersionID = "templateVersionId" + ReleaseInfoFieldVersion = "version" +) + +type ReleaseInfo struct { + CreateTimestamp string `json:"createTimestamp,omitempty"` + ModifiedAt string `json:"modifiedAt,omitempty"` + Name string `json:"name,omitempty"` + TemplateVersionID string `json:"templateVersionId,omitempty"` + Version string `json:"version,omitempty"` +} diff --git a/client/management/v3/zz_generated_stack.go b/client/management/v3/zz_generated_stack.go new file mode 100644 index 00000000..a0cf0af7 --- /dev/null +++ b/client/management/v3/zz_generated_stack.go @@ -0,0 +1,121 @@ +package client + +import ( + "github.com/rancher/norman/types" +) + +const ( + StackType = "stack" + StackFieldAnnotations = "annotations" + StackFieldAnswers = "answers" + StackFieldCreated = "created" + StackFieldCreatorID = "creatorId" + StackFieldDescription = "description" + StackFieldExternalID = "externalId" + StackFieldGroups = "groups" + StackFieldInstallNamespace = "installNamespace" + StackFieldLabels = "labels" + StackFieldName = "name" + StackFieldNamespaceId = "namespaceId" + StackFieldOwnerReferences = "ownerReferences" + StackFieldProjectId = "projectId" + StackFieldPrune = "prune" + StackFieldRemoved = "removed" + StackFieldState = "state" + StackFieldStatus = "status" + StackFieldTag = "tag" + StackFieldTemplates = "templates" + StackFieldTransitioning = "transitioning" + StackFieldTransitioningMessage = "transitioningMessage" + StackFieldUser = "user" + StackFieldUuid = "uuid" +) + +type Stack struct { + types.Resource + Annotations map[string]string `json:"annotations,omitempty"` + Answers map[string]string `json:"answers,omitempty"` + Created string `json:"created,omitempty"` + CreatorID string `json:"creatorId,omitempty"` + Description string `json:"description,omitempty"` + ExternalID string `json:"externalId,omitempty"` + Groups []string `json:"groups,omitempty"` + InstallNamespace string `json:"installNamespace,omitempty"` + Labels map[string]string `json:"labels,omitempty"` + Name string `json:"name,omitempty"` + NamespaceId string `json:"namespaceId,omitempty"` + OwnerReferences []OwnerReference `json:"ownerReferences,omitempty"` + ProjectId string `json:"projectId,omitempty"` + Prune *bool `json:"prune,omitempty"` + Removed string `json:"removed,omitempty"` + State string `json:"state,omitempty"` + Status *StackStatus `json:"status,omitempty"` + Tag map[string]string `json:"tag,omitempty"` + Templates map[string]string `json:"templates,omitempty"` + Transitioning string `json:"transitioning,omitempty"` + TransitioningMessage string `json:"transitioningMessage,omitempty"` + User string `json:"user,omitempty"` + Uuid string `json:"uuid,omitempty"` +} +type StackCollection struct { + types.Collection + Data []Stack `json:"data,omitempty"` + client *StackClient +} + +type StackClient struct { + apiClient *Client +} + +type StackOperations interface { + List(opts *types.ListOpts) (*StackCollection, error) + Create(opts *Stack) (*Stack, error) + Update(existing *Stack, updates interface{}) (*Stack, error) + ByID(id string) (*Stack, error) + Delete(container *Stack) error +} + +func newStackClient(apiClient *Client) *StackClient { + return &StackClient{ + apiClient: apiClient, + } +} + +func (c *StackClient) Create(container *Stack) (*Stack, error) { + resp := &Stack{} + err := c.apiClient.Ops.DoCreate(StackType, container, resp) + return resp, err +} + +func (c *StackClient) Update(existing *Stack, updates interface{}) (*Stack, error) { + resp := &Stack{} + err := c.apiClient.Ops.DoUpdate(StackType, &existing.Resource, updates, resp) + return resp, err +} + +func (c *StackClient) List(opts *types.ListOpts) (*StackCollection, error) { + resp := &StackCollection{} + err := c.apiClient.Ops.DoList(StackType, opts, resp) + resp.client = c + return resp, err +} + +func (cc *StackCollection) Next() (*StackCollection, error) { + if cc != nil && cc.Pagination != nil && cc.Pagination.Next != "" { + resp := &StackCollection{} + err := cc.client.apiClient.Ops.DoNext(cc.Pagination.Next, resp) + resp.client = cc.client + return resp, err + } + return nil, nil +} + +func (c *StackClient) ByID(id string) (*Stack, error) { + resp := &Stack{} + err := c.apiClient.Ops.DoByID(StackType, id, resp) + return resp, err +} + +func (c *StackClient) Delete(container *Stack) error { + return c.apiClient.Ops.DoResourceDelete(StackType, &container.Resource) +} diff --git a/client/management/v3/zz_generated_stack_spec.go b/client/management/v3/zz_generated_stack_spec.go new file mode 100644 index 00000000..523ea76d --- /dev/null +++ b/client/management/v3/zz_generated_stack_spec.go @@ -0,0 +1,28 @@ +package client + +const ( + StackSpecType = "stackSpec" + StackSpecFieldAnswers = "answers" + StackSpecFieldDescription = "description" + StackSpecFieldExternalID = "externalId" + StackSpecFieldGroups = "groups" + StackSpecFieldInstallNamespace = "installNamespace" + StackSpecFieldProjectId = "projectId" + StackSpecFieldPrune = "prune" + StackSpecFieldTag = "tag" + StackSpecFieldTemplates = "templates" + StackSpecFieldUser = "user" +) + +type StackSpec struct { + Answers map[string]string `json:"answers,omitempty"` + Description string `json:"description,omitempty"` + ExternalID string `json:"externalId,omitempty"` + Groups []string `json:"groups,omitempty"` + InstallNamespace string `json:"installNamespace,omitempty"` + ProjectId string `json:"projectId,omitempty"` + Prune *bool `json:"prune,omitempty"` + Tag map[string]string `json:"tag,omitempty"` + Templates map[string]string `json:"templates,omitempty"` + User string `json:"user,omitempty"` +} diff --git a/client/management/v3/zz_generated_stack_status.go b/client/management/v3/zz_generated_stack_status.go new file mode 100644 index 00000000..47908948 --- /dev/null +++ b/client/management/v3/zz_generated_stack_status.go @@ -0,0 +1,10 @@ +package client + +const ( + StackStatusType = "stackStatus" + StackStatusFieldReleases = "releases" +) + +type StackStatus struct { + Releases []ReleaseInfo `json:"releases,omitempty"` +} diff --git a/client/project/v3/zz_generated_client.go b/client/project/v3/zz_generated_client.go index 317f43e7..ada63ffa 100644 --- a/client/project/v3/zz_generated_client.go +++ b/client/project/v3/zz_generated_client.go @@ -31,6 +31,7 @@ type Client struct { ReplicationController ReplicationControllerOperations DaemonSet DaemonSetOperations Workload WorkloadOperations + ConfigMap ConfigMapOperations } func NewClient(opts *clientbase.ClientOpts) (*Client, error) { @@ -67,6 +68,7 @@ func NewClient(opts *clientbase.ClientOpts) (*Client, error) { client.ReplicationController = newReplicationControllerClient(client) client.DaemonSet = newDaemonSetClient(client) client.Workload = newWorkloadClient(client) + client.ConfigMap = newConfigMapClient(client) return client, nil } diff --git a/client/project/v3/zz_generated_config_map.go b/client/project/v3/zz_generated_config_map.go new file mode 100644 index 00000000..d6cbe273 --- /dev/null +++ b/client/project/v3/zz_generated_config_map.go @@ -0,0 +1,93 @@ +package client + +import ( + "github.com/rancher/norman/types" +) + +const ( + ConfigMapType = "configMap" + ConfigMapFieldAnnotations = "annotations" + ConfigMapFieldCreated = "created" + ConfigMapFieldCreatorID = "creatorId" + ConfigMapFieldData = "data" + ConfigMapFieldLabels = "labels" + ConfigMapFieldName = "name" + ConfigMapFieldOwnerReferences = "ownerReferences" + ConfigMapFieldRemoved = "removed" + ConfigMapFieldUuid = "uuid" +) + +type ConfigMap struct { + types.Resource + Annotations map[string]string `json:"annotations,omitempty"` + Created string `json:"created,omitempty"` + CreatorID string `json:"creatorId,omitempty"` + Data map[string]string `json:"data,omitempty"` + Labels map[string]string `json:"labels,omitempty"` + Name string `json:"name,omitempty"` + OwnerReferences []OwnerReference `json:"ownerReferences,omitempty"` + Removed string `json:"removed,omitempty"` + Uuid string `json:"uuid,omitempty"` +} +type ConfigMapCollection struct { + types.Collection + Data []ConfigMap `json:"data,omitempty"` + client *ConfigMapClient +} + +type ConfigMapClient struct { + apiClient *Client +} + +type ConfigMapOperations interface { + List(opts *types.ListOpts) (*ConfigMapCollection, error) + Create(opts *ConfigMap) (*ConfigMap, error) + Update(existing *ConfigMap, updates interface{}) (*ConfigMap, error) + ByID(id string) (*ConfigMap, error) + Delete(container *ConfigMap) error +} + +func newConfigMapClient(apiClient *Client) *ConfigMapClient { + return &ConfigMapClient{ + apiClient: apiClient, + } +} + +func (c *ConfigMapClient) Create(container *ConfigMap) (*ConfigMap, error) { + resp := &ConfigMap{} + err := c.apiClient.Ops.DoCreate(ConfigMapType, container, resp) + return resp, err +} + +func (c *ConfigMapClient) Update(existing *ConfigMap, updates interface{}) (*ConfigMap, error) { + resp := &ConfigMap{} + err := c.apiClient.Ops.DoUpdate(ConfigMapType, &existing.Resource, updates, resp) + return resp, err +} + +func (c *ConfigMapClient) List(opts *types.ListOpts) (*ConfigMapCollection, error) { + resp := &ConfigMapCollection{} + err := c.apiClient.Ops.DoList(ConfigMapType, opts, resp) + resp.client = c + return resp, err +} + +func (cc *ConfigMapCollection) Next() (*ConfigMapCollection, error) { + if cc != nil && cc.Pagination != nil && cc.Pagination.Next != "" { + resp := &ConfigMapCollection{} + err := cc.client.apiClient.Ops.DoNext(cc.Pagination.Next, resp) + resp.client = cc.client + return resp, err + } + return nil, nil +} + +func (c *ConfigMapClient) ByID(id string) (*ConfigMap, error) { + resp := &ConfigMap{} + err := c.apiClient.Ops.DoByID(ConfigMapType, id, resp) + return resp, err +} + +func (c *ConfigMapClient) Delete(container *ConfigMap) error { + return c.apiClient.Ops.DoResourceDelete(ConfigMapType, &container.Resource) +}