diff --git a/go.mod b/go.mod index 6206b7a..64a372b 100644 --- a/go.mod +++ b/go.mod @@ -12,8 +12,8 @@ require ( github.com/json-iterator/go v1.1.9 // indirect github.com/pkg/errors v0.8.1 github.com/rancher/dynamiclistener v0.2.1-0.20200213165308-111c5b43e932 - github.com/rancher/wrangler v0.5.1-0.20200312201919-371ff2551072 - github.com/rancher/wrangler-api v0.4.1 + github.com/rancher/wrangler v0.5.1 + github.com/rancher/wrangler-api v0.5.0 github.com/sirupsen/logrus v1.4.2 github.com/stretchr/testify v1.4.0 github.com/urfave/cli v1.22.2 diff --git a/go.sum b/go.sum index 6f1fcc9..d2b789f 100644 --- a/go.sum +++ b/go.sum @@ -402,13 +402,12 @@ github.com/rancher/dynamiclistener v0.2.1-0.20200213165308-111c5b43e932 h1:W+guy github.com/rancher/dynamiclistener v0.2.1-0.20200213165308-111c5b43e932/go.mod h1:9WusTANoiRr8cDWCTtf5txieulezHbpv4vhLADPp0zU= github.com/rancher/wrangler v0.1.4 h1:bdzBw4H9JKQhXPBPNp4eHbmrkA24+VII865VLiVWcw8= github.com/rancher/wrangler v0.1.4/go.mod h1:EYP7cqpg42YqElaCm+U9ieSrGQKAXxUH5xsr+XGpWyE= -github.com/rancher/wrangler v0.4.0 h1:iLvuJcZkd38E3RGG74dFMMNEju0PeTzfT1PQiv5okVU= -github.com/rancher/wrangler v0.4.0/go.mod h1:1cR91WLhZgkZ+U4fV9nVuXqKurWbgXcIReU4wnQvTN8= -github.com/rancher/wrangler v0.5.1-0.20200312201919-371ff2551072 h1:QkoQGlzVB9LasBERP+RQ/BC+3ANtjn9Qlc2+PpwFrYc= -github.com/rancher/wrangler v0.5.1-0.20200312201919-371ff2551072/go.mod h1:txHSBkPtVgNH/0pUCvdP0Ak0HptAOc9ffBmFxQnL4z4= +github.com/rancher/wrangler v0.5.0/go.mod h1:txHSBkPtVgNH/0pUCvdP0Ak0HptAOc9ffBmFxQnL4z4= +github.com/rancher/wrangler v0.5.1 h1:1H3jnVjpXzOxzuYPcn7PJ60KXGkaC0iWMhVqHliwfcQ= +github.com/rancher/wrangler v0.5.1/go.mod h1:txHSBkPtVgNH/0pUCvdP0Ak0HptAOc9ffBmFxQnL4z4= github.com/rancher/wrangler-api v0.2.0/go.mod h1:zTPdNLZO07KvRaVOx6XQbKBSV55Fnn4s7nqmrMPJqd8= -github.com/rancher/wrangler-api v0.4.1 h1:bwy6BbdCEq+zQrWmy9L8XXcGEQ/mbeuQ2q1kfk8fo3M= -github.com/rancher/wrangler-api v0.4.1/go.mod h1:X+dwYUrZe9q7u9manPJf2ZF8OvP0L7AQ0CuFaqtZO0s= +github.com/rancher/wrangler-api v0.5.0 h1:ScVozf5SjRLW0UzOka9xzdlTJ99vLR/Gbk4/kIY49GY= +github.com/rancher/wrangler-api v0.5.0/go.mod h1:Ne7fjNRBDdUYPqltLUCW8eiaQwuKXIyAJH6wsuGK80w= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= diff --git a/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/apiextensions.k8s.io/v1beta1/customresourcedefinition.go b/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/apiextensions.k8s.io/v1beta1/customresourcedefinition.go index a4aa554..4ebab5a 100644 --- a/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/apiextensions.k8s.io/v1beta1/customresourcedefinition.go +++ b/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/apiextensions.k8s.io/v1beta1/customresourcedefinition.go @@ -233,6 +233,7 @@ func (c *customResourceDefinitionCache) GetByIndex(indexName, key string) (resul if err != nil { return nil, err } + result = make([]*v1beta1.CustomResourceDefinition, 0, len(objs)) for _, obj := range objs { result = append(result, obj.(*v1beta1.CustomResourceDefinition)) } diff --git a/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/apiregistration.k8s.io/v1/apiservice.go b/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/apiregistration.k8s.io/v1/apiservice.go index 25ee227..a4be043 100644 --- a/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/apiregistration.k8s.io/v1/apiservice.go +++ b/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/apiregistration.k8s.io/v1/apiservice.go @@ -233,6 +233,7 @@ func (c *aPIServiceCache) GetByIndex(indexName, key string) (result []*v1.APISer if err != nil { return nil, err } + result = make([]*v1.APIService, 0, len(objs)) for _, obj := range objs { result = append(result, obj.(*v1.APIService)) } diff --git a/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/core/v1/configmap.go b/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/core/v1/configmap.go index bfaebaf..a74e5ca 100644 --- a/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/core/v1/configmap.go +++ b/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/core/v1/configmap.go @@ -226,6 +226,7 @@ func (c *configMapCache) GetByIndex(indexName, key string) (result []*v1.ConfigM if err != nil { return nil, err } + result = make([]*v1.ConfigMap, 0, len(objs)) for _, obj := range objs { result = append(result, obj.(*v1.ConfigMap)) } diff --git a/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/core/v1/endpoints.go b/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/core/v1/endpoints.go index 64b44ae..e3df83d 100644 --- a/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/core/v1/endpoints.go +++ b/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/core/v1/endpoints.go @@ -226,6 +226,7 @@ func (c *endpointsCache) GetByIndex(indexName, key string) (result []*v1.Endpoin if err != nil { return nil, err } + result = make([]*v1.Endpoints, 0, len(objs)) for _, obj := range objs { result = append(result, obj.(*v1.Endpoints)) } diff --git a/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/core/v1/event.go b/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/core/v1/event.go index ce486e1..69d4754 100644 --- a/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/core/v1/event.go +++ b/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/core/v1/event.go @@ -226,6 +226,7 @@ func (c *eventCache) GetByIndex(indexName, key string) (result []*v1.Event, err if err != nil { return nil, err } + result = make([]*v1.Event, 0, len(objs)) for _, obj := range objs { result = append(result, obj.(*v1.Event)) } diff --git a/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/core/v1/namespace.go b/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/core/v1/namespace.go index d16790d..d5983b6 100644 --- a/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/core/v1/namespace.go +++ b/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/core/v1/namespace.go @@ -233,6 +233,7 @@ func (c *namespaceCache) GetByIndex(indexName, key string) (result []*v1.Namespa if err != nil { return nil, err } + result = make([]*v1.Namespace, 0, len(objs)) for _, obj := range objs { result = append(result, obj.(*v1.Namespace)) } diff --git a/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/core/v1/node.go b/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/core/v1/node.go index 366a99b..2ddfdf4 100644 --- a/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/core/v1/node.go +++ b/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/core/v1/node.go @@ -233,6 +233,7 @@ func (c *nodeCache) GetByIndex(indexName, key string) (result []*v1.Node, err er if err != nil { return nil, err } + result = make([]*v1.Node, 0, len(objs)) for _, obj := range objs { result = append(result, obj.(*v1.Node)) } diff --git a/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/core/v1/persistentvolumeclaim.go b/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/core/v1/persistentvolumeclaim.go index cf383e2..d886031 100644 --- a/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/core/v1/persistentvolumeclaim.go +++ b/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/core/v1/persistentvolumeclaim.go @@ -233,6 +233,7 @@ func (c *persistentVolumeClaimCache) GetByIndex(indexName, key string) (result [ if err != nil { return nil, err } + result = make([]*v1.PersistentVolumeClaim, 0, len(objs)) for _, obj := range objs { result = append(result, obj.(*v1.PersistentVolumeClaim)) } diff --git a/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/core/v1/pod.go b/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/core/v1/pod.go index 30f5b96..6195628 100644 --- a/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/core/v1/pod.go +++ b/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/core/v1/pod.go @@ -233,6 +233,7 @@ func (c *podCache) GetByIndex(indexName, key string) (result []*v1.Pod, err erro if err != nil { return nil, err } + result = make([]*v1.Pod, 0, len(objs)) for _, obj := range objs { result = append(result, obj.(*v1.Pod)) } diff --git a/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/core/v1/secret.go b/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/core/v1/secret.go index 87fa39b..caa477f 100644 --- a/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/core/v1/secret.go +++ b/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/core/v1/secret.go @@ -226,6 +226,7 @@ func (c *secretCache) GetByIndex(indexName, key string) (result []*v1.Secret, er if err != nil { return nil, err } + result = make([]*v1.Secret, 0, len(objs)) for _, obj := range objs { result = append(result, obj.(*v1.Secret)) } diff --git a/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/core/v1/service.go b/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/core/v1/service.go index 2cebaf2..d4e6f10 100644 --- a/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/core/v1/service.go +++ b/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/core/v1/service.go @@ -233,6 +233,7 @@ func (c *serviceCache) GetByIndex(indexName, key string) (result []*v1.Service, if err != nil { return nil, err } + result = make([]*v1.Service, 0, len(objs)) for _, obj := range objs { result = append(result, obj.(*v1.Service)) } diff --git a/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/core/v1/serviceaccount.go b/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/core/v1/serviceaccount.go index 8525c97..bc7036b 100644 --- a/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/core/v1/serviceaccount.go +++ b/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/core/v1/serviceaccount.go @@ -226,6 +226,7 @@ func (c *serviceAccountCache) GetByIndex(indexName, key string) (result []*v1.Se if err != nil { return nil, err } + result = make([]*v1.ServiceAccount, 0, len(objs)) for _, obj := range objs { result = append(result, obj.(*v1.ServiceAccount)) } diff --git a/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/rbac/v1/clusterrole.go b/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/rbac/v1/clusterrole.go index 5fd6b08..cb361fc 100644 --- a/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/rbac/v1/clusterrole.go +++ b/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/rbac/v1/clusterrole.go @@ -226,6 +226,7 @@ func (c *clusterRoleCache) GetByIndex(indexName, key string) (result []*v1.Clust if err != nil { return nil, err } + result = make([]*v1.ClusterRole, 0, len(objs)) for _, obj := range objs { result = append(result, obj.(*v1.ClusterRole)) } diff --git a/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/rbac/v1/clusterrolebinding.go b/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/rbac/v1/clusterrolebinding.go index ae4b7ad..c9b0677 100644 --- a/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/rbac/v1/clusterrolebinding.go +++ b/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/rbac/v1/clusterrolebinding.go @@ -226,6 +226,7 @@ func (c *clusterRoleBindingCache) GetByIndex(indexName, key string) (result []*v if err != nil { return nil, err } + result = make([]*v1.ClusterRoleBinding, 0, len(objs)) for _, obj := range objs { result = append(result, obj.(*v1.ClusterRoleBinding)) } diff --git a/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/rbac/v1/role.go b/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/rbac/v1/role.go index 9962ec7..312eb4f 100644 --- a/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/rbac/v1/role.go +++ b/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/rbac/v1/role.go @@ -226,6 +226,7 @@ func (c *roleCache) GetByIndex(indexName, key string) (result []*v1.Role, err er if err != nil { return nil, err } + result = make([]*v1.Role, 0, len(objs)) for _, obj := range objs { result = append(result, obj.(*v1.Role)) } diff --git a/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/rbac/v1/rolebinding.go b/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/rbac/v1/rolebinding.go index 4f9862d..2c24e50 100644 --- a/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/rbac/v1/rolebinding.go +++ b/vendor/github.com/rancher/wrangler-api/pkg/generated/controllers/rbac/v1/rolebinding.go @@ -226,6 +226,7 @@ func (c *roleBindingCache) GetByIndex(indexName, key string) (result []*v1.RoleB if err != nil { return nil, err } + result = make([]*v1.RoleBinding, 0, len(objs)) for _, obj := range objs { result = append(result, obj.(*v1.RoleBinding)) } diff --git a/vendor/github.com/rancher/wrangler/pkg/summary/client/interface.go b/vendor/github.com/rancher/wrangler/pkg/summary/client/interface.go new file mode 100644 index 0000000..331256a --- /dev/null +++ b/vendor/github.com/rancher/wrangler/pkg/summary/client/interface.go @@ -0,0 +1,22 @@ +package client + +import ( + "github.com/rancher/wrangler/pkg/summary" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/watch" +) + +type Interface interface { + Resource(resource schema.GroupVersionResource) NamespaceableResourceInterface +} + +type ResourceInterface interface { + List(opts metav1.ListOptions) (*summary.SummarizedObjectList, error) + Watch(opts metav1.ListOptions) (watch.Interface, error) +} + +type NamespaceableResourceInterface interface { + Namespace(string) ResourceInterface + ResourceInterface +} diff --git a/vendor/github.com/rancher/wrangler/pkg/summary/client/simple.go b/vendor/github.com/rancher/wrangler/pkg/summary/client/simple.go new file mode 100644 index 0000000..403423a --- /dev/null +++ b/vendor/github.com/rancher/wrangler/pkg/summary/client/simple.go @@ -0,0 +1,109 @@ +package client + +import ( + "github.com/rancher/wrangler/pkg/summary" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/watch" + "k8s.io/client-go/dynamic" +) + +type summaryClient struct { + client dynamic.Interface +} + +var _ Interface = &summaryClient{} + +func NewForDynamicClient(client dynamic.Interface) Interface { + return &summaryClient{client: client} +} + +type summaryResourceClient struct { + client dynamic.Interface + namespace string + resource schema.GroupVersionResource +} + +func (c *summaryClient) Resource(resource schema.GroupVersionResource) NamespaceableResourceInterface { + return &summaryResourceClient{client: c.client, resource: resource} +} + +func (c *summaryResourceClient) Namespace(ns string) ResourceInterface { + ret := *c + ret.namespace = ns + return &ret +} + +func (c *summaryResourceClient) List(opts metav1.ListOptions) (*summary.SummarizedObjectList, error) { + var ( + u *unstructured.UnstructuredList + err error + ) + + if c.namespace == "" { + u, err = c.client.Resource(c.resource).List(opts) + } else { + u, err = c.client.Resource(c.resource).Namespace(c.namespace).List(opts) + } + if err != nil { + return nil, err + } + + list := &summary.SummarizedObjectList{ + TypeMeta: metav1.TypeMeta{ + Kind: u.GetKind(), + APIVersion: u.GetAPIVersion(), + }, + ListMeta: metav1.ListMeta{ + ResourceVersion: u.GetResourceVersion(), + Continue: u.GetContinue(), + RemainingItemCount: u.GetRemainingItemCount(), + }, + } + + for _, obj := range u.Items { + list.Items = append(list.Items, *summary.Summarized(&obj)) + } + + return list, nil +} + +func (c *summaryResourceClient) Watch(opts metav1.ListOptions) (watch.Interface, error) { + var ( + resp watch.Interface + err error + ) + + eventChan := make(chan watch.Event) + + if c.namespace == "" { + resp, err = c.client.Resource(c.resource).Watch(opts) + } else { + resp, err = c.client.Resource(c.resource).Namespace(c.namespace).Watch(opts) + } + if err != nil { + return nil, err + } + + go func() { + for event := range resp.ResultChan() { + event.Object = summary.Summarized(event.Object) + eventChan <- event + } + }() + + return &watcher{ + Interface: resp, + eventChan: eventChan, + }, nil +} + +type watcher struct { + watch.Interface + eventChan chan watch.Event +} + +func (w watcher) ResultChan() <-chan watch.Event { + return w.eventChan +} diff --git a/vendor/k8s.io/client-go/dynamic/dynamicinformer/informer.go b/vendor/github.com/rancher/wrangler/pkg/summary/informer/informer.go similarity index 66% rename from vendor/k8s.io/client-go/dynamic/dynamicinformer/informer.go rename to vendor/github.com/rancher/wrangler/pkg/summary/informer/informer.go index 42520a9..a645b94 100644 --- a/vendor/k8s.io/client-go/dynamic/dynamicinformer/informer.go +++ b/vendor/github.com/rancher/wrangler/pkg/summary/informer/informer.go @@ -14,32 +14,32 @@ See the License for the specific language governing permissions and limitations under the License. */ -package dynamicinformer +package informer import ( "sync" "time" + "github.com/rancher/wrangler/pkg/summary" + "github.com/rancher/wrangler/pkg/summary/client" + "github.com/rancher/wrangler/pkg/summary/lister" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/watch" - "k8s.io/client-go/dynamic" - "k8s.io/client-go/dynamic/dynamiclister" "k8s.io/client-go/informers" "k8s.io/client-go/tools/cache" ) -// NewDynamicSharedInformerFactory constructs a new instance of dynamicSharedInformerFactory for all namespaces. -func NewDynamicSharedInformerFactory(client dynamic.Interface, defaultResync time.Duration) DynamicSharedInformerFactory { - return NewFilteredDynamicSharedInformerFactory(client, defaultResync, metav1.NamespaceAll, nil) +// NewSummarySharedInformerFactory constructs a new instance of summarySharedInformerFactory for all namespaces. +func NewSummarySharedInformerFactory(client client.Interface, defaultResync time.Duration) SummarySharedInformerFactory { + return NewFilteredSummarySharedInformerFactory(client, defaultResync, metav1.NamespaceAll, nil) } -// NewFilteredDynamicSharedInformerFactory constructs a new instance of dynamicSharedInformerFactory. +// NewFilteredSummarySharedInformerFactory constructs a new instance of summarySharedInformerFactory. // Listers obtained via this factory will be subject to the same filters as specified here. -func NewFilteredDynamicSharedInformerFactory(client dynamic.Interface, defaultResync time.Duration, namespace string, tweakListOptions TweakListOptionsFunc) DynamicSharedInformerFactory { - return &dynamicSharedInformerFactory{ +func NewFilteredSummarySharedInformerFactory(client client.Interface, defaultResync time.Duration, namespace string, tweakListOptions TweakListOptionsFunc) SummarySharedInformerFactory { + return &summarySharedInformerFactory{ client: client, defaultResync: defaultResync, namespace: namespace, @@ -49,8 +49,8 @@ func NewFilteredDynamicSharedInformerFactory(client dynamic.Interface, defaultRe } } -type dynamicSharedInformerFactory struct { - client dynamic.Interface +type summarySharedInformerFactory struct { + client client.Interface defaultResync time.Duration namespace string @@ -62,9 +62,9 @@ type dynamicSharedInformerFactory struct { tweakListOptions TweakListOptionsFunc } -var _ DynamicSharedInformerFactory = &dynamicSharedInformerFactory{} +var _ SummarySharedInformerFactory = &summarySharedInformerFactory{} -func (f *dynamicSharedInformerFactory) ForResource(gvr schema.GroupVersionResource) informers.GenericInformer { +func (f *summarySharedInformerFactory) ForResource(gvr schema.GroupVersionResource) informers.GenericInformer { f.lock.Lock() defer f.lock.Unlock() @@ -74,14 +74,14 @@ func (f *dynamicSharedInformerFactory) ForResource(gvr schema.GroupVersionResour return informer } - informer = NewFilteredDynamicInformer(f.client, gvr, f.namespace, f.defaultResync, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) + informer = NewFilteredSummaryInformer(f.client, gvr, f.namespace, f.defaultResync, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) f.informers[key] = informer return informer } // Start initializes all requested informers. -func (f *dynamicSharedInformerFactory) Start(stopCh <-chan struct{}) { +func (f *summarySharedInformerFactory) Start(stopCh <-chan struct{}) { f.lock.Lock() defer f.lock.Unlock() @@ -94,7 +94,7 @@ func (f *dynamicSharedInformerFactory) Start(stopCh <-chan struct{}) { } // WaitForCacheSync waits for all started informers' cache were synced. -func (f *dynamicSharedInformerFactory) WaitForCacheSync(stopCh <-chan struct{}) map[schema.GroupVersionResource]bool { +func (f *summarySharedInformerFactory) WaitForCacheSync(stopCh <-chan struct{}) map[schema.GroupVersionResource]bool { informers := func() map[schema.GroupVersionResource]cache.SharedIndexInformer { f.lock.Lock() defer f.lock.Unlock() @@ -115,9 +115,9 @@ func (f *dynamicSharedInformerFactory) WaitForCacheSync(stopCh <-chan struct{}) return res } -// NewFilteredDynamicInformer constructs a new informer for a dynamic type. -func NewFilteredDynamicInformer(client dynamic.Interface, gvr schema.GroupVersionResource, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions TweakListOptionsFunc) informers.GenericInformer { - return &dynamicInformer{ +// NewFilteredSummaryInformer constructs a new informer for a summary type. +func NewFilteredSummaryInformer(client client.Interface, gvr schema.GroupVersionResource, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions TweakListOptionsFunc) informers.GenericInformer { + return &summaryInformer{ gvr: gvr, informer: cache.NewSharedIndexInformer( &cache.ListWatch{ @@ -134,24 +134,24 @@ func NewFilteredDynamicInformer(client dynamic.Interface, gvr schema.GroupVersio return client.Resource(gvr).Namespace(namespace).Watch(options) }, }, - &unstructured.Unstructured{}, + &summary.SummarizedObject{}, resyncPeriod, indexers, ), } } -type dynamicInformer struct { +type summaryInformer struct { informer cache.SharedIndexInformer gvr schema.GroupVersionResource } -var _ informers.GenericInformer = &dynamicInformer{} +var _ informers.GenericInformer = &summaryInformer{} -func (d *dynamicInformer) Informer() cache.SharedIndexInformer { +func (d *summaryInformer) Informer() cache.SharedIndexInformer { return d.informer } -func (d *dynamicInformer) Lister() cache.GenericLister { - return dynamiclister.NewRuntimeObjectShim(dynamiclister.New(d.informer.GetIndexer(), d.gvr)) +func (d *summaryInformer) Lister() cache.GenericLister { + return lister.NewRuntimeObjectShim(lister.New(d.informer.GetIndexer(), d.gvr)) } diff --git a/vendor/k8s.io/client-go/dynamic/dynamicinformer/interface.go b/vendor/github.com/rancher/wrangler/pkg/summary/informer/interface.go similarity index 89% rename from vendor/k8s.io/client-go/dynamic/dynamicinformer/interface.go rename to vendor/github.com/rancher/wrangler/pkg/summary/informer/interface.go index 083977c..df5f0f8 100644 --- a/vendor/k8s.io/client-go/dynamic/dynamicinformer/interface.go +++ b/vendor/github.com/rancher/wrangler/pkg/summary/informer/interface.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package dynamicinformer +package informer import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -22,8 +22,8 @@ import ( "k8s.io/client-go/informers" ) -// DynamicSharedInformerFactory provides access to a shared informer and lister for dynamic client -type DynamicSharedInformerFactory interface { +// SummarySharedInformerFactory provides access to a shared informer and lister for dynamic client +type SummarySharedInformerFactory interface { Start(stopCh <-chan struct{}) ForResource(gvr schema.GroupVersionResource) informers.GenericInformer WaitForCacheSync(stopCh <-chan struct{}) map[schema.GroupVersionResource]bool diff --git a/vendor/k8s.io/client-go/dynamic/dynamiclister/interface.go b/vendor/github.com/rancher/wrangler/pkg/summary/lister/interface.go similarity index 77% rename from vendor/k8s.io/client-go/dynamic/dynamiclister/interface.go rename to vendor/github.com/rancher/wrangler/pkg/summary/lister/interface.go index c39cbee..6fa2919 100644 --- a/vendor/k8s.io/client-go/dynamic/dynamiclister/interface.go +++ b/vendor/github.com/rancher/wrangler/pkg/summary/lister/interface.go @@ -14,19 +14,19 @@ See the License for the specific language governing permissions and limitations under the License. */ -package dynamiclister +package lister import ( - "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "github.com/rancher/wrangler/pkg/summary" "k8s.io/apimachinery/pkg/labels" ) // Lister helps list resources. type Lister interface { // List lists all resources in the indexer. - List(selector labels.Selector) (ret []*unstructured.Unstructured, err error) + List(selector labels.Selector) (ret []*summary.SummarizedObject, err error) // Get retrieves a resource from the indexer with the given name - Get(name string) (*unstructured.Unstructured, error) + Get(name string) (*summary.SummarizedObject, error) // Namespace returns an object that can list and get resources in a given namespace. Namespace(namespace string) NamespaceLister } @@ -34,7 +34,7 @@ type Lister interface { // NamespaceLister helps list and get resources. type NamespaceLister interface { // List lists all resources in the indexer for a given namespace. - List(selector labels.Selector) (ret []*unstructured.Unstructured, err error) + List(selector labels.Selector) (ret []*summary.SummarizedObject, err error) // Get retrieves a resource from the indexer for a given namespace and name. - Get(name string) (*unstructured.Unstructured, error) + Get(name string) (*summary.SummarizedObject, error) } diff --git a/vendor/k8s.io/client-go/dynamic/dynamiclister/lister.go b/vendor/github.com/rancher/wrangler/pkg/summary/lister/lister.go similarity index 63% rename from vendor/k8s.io/client-go/dynamic/dynamiclister/lister.go rename to vendor/github.com/rancher/wrangler/pkg/summary/lister/lister.go index a50fc47..706c267 100644 --- a/vendor/k8s.io/client-go/dynamic/dynamiclister/lister.go +++ b/vendor/github.com/rancher/wrangler/pkg/summary/lister/lister.go @@ -14,40 +14,40 @@ See the License for the specific language governing permissions and limitations under the License. */ -package dynamiclister +package lister import ( + "github.com/rancher/wrangler/pkg/summary" "k8s.io/apimachinery/pkg/api/errors" - "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/client-go/tools/cache" ) -var _ Lister = &dynamicLister{} -var _ NamespaceLister = &dynamicNamespaceLister{} +var _ Lister = &summaryLister{} +var _ NamespaceLister = &summaryNamespaceLister{} -// dynamicLister implements the Lister interface. -type dynamicLister struct { +// summaryLister implements the Lister interface. +type summaryLister struct { indexer cache.Indexer gvr schema.GroupVersionResource } // New returns a new Lister. func New(indexer cache.Indexer, gvr schema.GroupVersionResource) Lister { - return &dynamicLister{indexer: indexer, gvr: gvr} + return &summaryLister{indexer: indexer, gvr: gvr} } // List lists all resources in the indexer. -func (l *dynamicLister) List(selector labels.Selector) (ret []*unstructured.Unstructured, err error) { +func (l *summaryLister) List(selector labels.Selector) (ret []*summary.SummarizedObject, err error) { err = cache.ListAll(l.indexer, selector, func(m interface{}) { - ret = append(ret, m.(*unstructured.Unstructured)) + ret = append(ret, m.(*summary.SummarizedObject)) }) return ret, err } // Get retrieves a resource from the indexer with the given name -func (l *dynamicLister) Get(name string) (*unstructured.Unstructured, error) { +func (l *summaryLister) Get(name string) (*summary.SummarizedObject, error) { obj, exists, err := l.indexer.GetByKey(name) if err != nil { return nil, err @@ -55,31 +55,31 @@ func (l *dynamicLister) Get(name string) (*unstructured.Unstructured, error) { if !exists { return nil, errors.NewNotFound(l.gvr.GroupResource(), name) } - return obj.(*unstructured.Unstructured), nil + return obj.(*summary.SummarizedObject), nil } // Namespace returns an object that can list and get resources from a given namespace. -func (l *dynamicLister) Namespace(namespace string) NamespaceLister { - return &dynamicNamespaceLister{indexer: l.indexer, namespace: namespace, gvr: l.gvr} +func (l *summaryLister) Namespace(namespace string) NamespaceLister { + return &summaryNamespaceLister{indexer: l.indexer, namespace: namespace, gvr: l.gvr} } -// dynamicNamespaceLister implements the NamespaceLister interface. -type dynamicNamespaceLister struct { +// summaryNamespaceLister implements the NamespaceLister interface. +type summaryNamespaceLister struct { indexer cache.Indexer namespace string gvr schema.GroupVersionResource } // List lists all resources in the indexer for a given namespace. -func (l *dynamicNamespaceLister) List(selector labels.Selector) (ret []*unstructured.Unstructured, err error) { +func (l *summaryNamespaceLister) List(selector labels.Selector) (ret []*summary.SummarizedObject, err error) { err = cache.ListAllByNamespace(l.indexer, l.namespace, selector, func(m interface{}) { - ret = append(ret, m.(*unstructured.Unstructured)) + ret = append(ret, m.(*summary.SummarizedObject)) }) return ret, err } // Get retrieves a resource from the indexer for a given namespace and name. -func (l *dynamicNamespaceLister) Get(name string) (*unstructured.Unstructured, error) { +func (l *summaryNamespaceLister) Get(name string) (*summary.SummarizedObject, error) { obj, exists, err := l.indexer.GetByKey(l.namespace + "/" + name) if err != nil { return nil, err @@ -87,5 +87,5 @@ func (l *dynamicNamespaceLister) Get(name string) (*unstructured.Unstructured, e if !exists { return nil, errors.NewNotFound(l.gvr.GroupResource(), name) } - return obj.(*unstructured.Unstructured), nil + return obj.(*summary.SummarizedObject), nil } diff --git a/vendor/k8s.io/client-go/dynamic/dynamiclister/shim.go b/vendor/github.com/rancher/wrangler/pkg/summary/lister/shim.go similarity index 71% rename from vendor/k8s.io/client-go/dynamic/dynamiclister/shim.go rename to vendor/github.com/rancher/wrangler/pkg/summary/lister/shim.go index 92a5f54..108399c 100644 --- a/vendor/k8s.io/client-go/dynamic/dynamiclister/shim.go +++ b/vendor/github.com/rancher/wrangler/pkg/summary/lister/shim.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package dynamiclister +package lister import ( "k8s.io/apimachinery/pkg/labels" @@ -22,22 +22,22 @@ import ( "k8s.io/client-go/tools/cache" ) -var _ cache.GenericLister = &dynamicListerShim{} -var _ cache.GenericNamespaceLister = &dynamicNamespaceListerShim{} +var _ cache.GenericLister = &summaryListerShim{} +var _ cache.GenericNamespaceLister = &summaryNamespaceListerShim{} -// dynamicListerShim implements the cache.GenericLister interface. -type dynamicListerShim struct { +// summaryListerShim implements the cache.GenericLister interface. +type summaryListerShim struct { lister Lister } // NewRuntimeObjectShim returns a new shim for Lister. // It wraps Lister so that it implements cache.GenericLister interface func NewRuntimeObjectShim(lister Lister) cache.GenericLister { - return &dynamicListerShim{lister: lister} + return &summaryListerShim{lister: lister} } // List will return all objects across namespaces -func (s *dynamicListerShim) List(selector labels.Selector) (ret []runtime.Object, err error) { +func (s *summaryListerShim) List(selector labels.Selector) (ret []runtime.Object, err error) { objs, err := s.lister.List(selector) if err != nil { return nil, err @@ -51,24 +51,24 @@ func (s *dynamicListerShim) List(selector labels.Selector) (ret []runtime.Object } // Get will attempt to retrieve assuming that name==key -func (s *dynamicListerShim) Get(name string) (runtime.Object, error) { +func (s *summaryListerShim) Get(name string) (runtime.Object, error) { return s.lister.Get(name) } -func (s *dynamicListerShim) ByNamespace(namespace string) cache.GenericNamespaceLister { - return &dynamicNamespaceListerShim{ +func (s *summaryListerShim) ByNamespace(namespace string) cache.GenericNamespaceLister { + return &summaryNamespaceListerShim{ namespaceLister: s.lister.Namespace(namespace), } } -// dynamicNamespaceListerShim implements the NamespaceLister interface. +// summaryNamespaceListerShim implements the NamespaceLister interface. // It wraps NamespaceLister so that it implements cache.GenericNamespaceLister interface -type dynamicNamespaceListerShim struct { +type summaryNamespaceListerShim struct { namespaceLister NamespaceLister } // List will return all objects in this namespace -func (ns *dynamicNamespaceListerShim) List(selector labels.Selector) (ret []runtime.Object, err error) { +func (ns *summaryNamespaceListerShim) List(selector labels.Selector) (ret []runtime.Object, err error) { objs, err := ns.namespaceLister.List(selector) if err != nil { return nil, err @@ -82,6 +82,6 @@ func (ns *dynamicNamespaceListerShim) List(selector labels.Selector) (ret []runt } // Get will attempt to retrieve by namespace and name -func (ns *dynamicNamespaceListerShim) Get(name string) (runtime.Object, error) { +func (ns *summaryNamespaceListerShim) Get(name string) (runtime.Object, error) { return ns.namespaceLister.Get(name) } diff --git a/vendor/github.com/rancher/wrangler/pkg/summary/summarized.go b/vendor/github.com/rancher/wrangler/pkg/summary/summarized.go new file mode 100644 index 0000000..346efb3 --- /dev/null +++ b/vendor/github.com/rancher/wrangler/pkg/summary/summarized.go @@ -0,0 +1,98 @@ +package summary + +import ( + "k8s.io/apimachinery/pkg/api/meta" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" +) + +type SummarizedObject struct { + metav1.PartialObjectMetadata + Summary +} + +type SummarizedObjectList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + Items []SummarizedObject `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +func Summarized(u runtime.Object) *SummarizedObject { + if s, ok := u.(*SummarizedObject); ok { + return s + } + + s := &SummarizedObject{ + Summary: Summarize(u), + } + s.APIVersion, s.Kind = u.GetObjectKind().GroupVersionKind().ToAPIVersionAndKind() + + meta, err := meta.Accessor(u) + if err == nil { + s.Name = meta.GetName() + s.Namespace = meta.GetNamespace() + s.Generation = meta.GetGeneration() + s.UID = meta.GetUID() + s.ResourceVersion = meta.GetResourceVersion() + s.CreationTimestamp = meta.GetCreationTimestamp() + s.DeletionTimestamp = meta.GetDeletionTimestamp() + s.Labels = meta.GetLabels() + s.Annotations = meta.GetAnnotations() + } + + return s +} + +func (in *SummarizedObjectList) DeepCopyInto(out *SummarizedObjectList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]SummarizedObject, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +func (in *SummarizedObjectList) DeepCopy() *SummarizedObjectList { + if in == nil { + return nil + } + out := new(SummarizedObjectList) + in.DeepCopyInto(out) + return out +} + +func (in *SummarizedObjectList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +func (in *SummarizedObject) DeepCopyInto(out *SummarizedObject) { + *out = *in + out.TypeMeta = in.TypeMeta + out.ObjectMeta = *in.ObjectMeta.DeepCopy() + out.Summary = *in.Summary.DeepCopy() + return +} + +func (in *SummarizedObject) DeepCopy() *SummarizedObject { + if in == nil { + return nil + } + out := new(SummarizedObject) + in.DeepCopyInto(out) + return out +} + +func (in *SummarizedObject) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} diff --git a/vendor/github.com/rancher/wrangler/pkg/summary/summary.go b/vendor/github.com/rancher/wrangler/pkg/summary/summary.go index e32b638..6f6ea14 100644 --- a/vendor/github.com/rancher/wrangler/pkg/summary/summary.go +++ b/vendor/github.com/rancher/wrangler/pkg/summary/summary.go @@ -3,6 +3,8 @@ package summary import ( "strings" + "k8s.io/apimachinery/pkg/runtime" + "github.com/rancher/wrangler/pkg/data" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" ) @@ -14,6 +16,42 @@ type Summary struct { Message []string } +func (s Summary) String() string { + if !s.Transitioning && !s.Error { + return s.State + } + var msg string + if s.Transitioning { + msg = "[progressing" + } + if s.Error { + if len(msg) > 0 { + msg += ",error]" + } else { + msg = "error]" + } + } else { + msg += "]" + } + if len(s.Message) > 0 { + msg = msg + " " + s.Message[0] + } + return msg +} + +func (s Summary) IsReady() bool { + return !s.Error && !s.Transitioning +} + +func (s *Summary) DeepCopy() *Summary { + v := *s + return &v +} + +func (s *Summary) DeepCopyInto(v *Summary) { + *v = *s +} + func dedupMessage(messages []string) []string { if len(messages) <= 1 { return messages @@ -33,12 +71,21 @@ func dedupMessage(messages []string) []string { return result } -func Summarize(unstr *unstructured.Unstructured) Summary { +func Summarize(runtimeObj runtime.Object) Summary { var ( obj data.Object summary Summary ) + if s, ok := runtimeObj.(*SummarizedObject); ok { + return s.Summary + } + + unstr, ok := runtimeObj.(*unstructured.Unstructured) + if !ok { + return summary + } + if unstr != nil { obj = unstr.Object } diff --git a/vendor/modules.txt b/vendor/modules.txt index f623685..f8010b6 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -60,7 +60,7 @@ github.com/rancher/dynamiclistener/server github.com/rancher/dynamiclistener/storage/file github.com/rancher/dynamiclistener/storage/kubernetes github.com/rancher/dynamiclistener/storage/memory -# github.com/rancher/wrangler v0.5.1-0.20200312201919-371ff2551072 +# github.com/rancher/wrangler v0.5.1 github.com/rancher/wrangler/pkg/apply github.com/rancher/wrangler/pkg/apply/injectors github.com/rancher/wrangler/pkg/broadcast @@ -85,7 +85,10 @@ github.com/rancher/wrangler/pkg/signals github.com/rancher/wrangler/pkg/slice github.com/rancher/wrangler/pkg/start github.com/rancher/wrangler/pkg/summary -# github.com/rancher/wrangler-api v0.4.1 +github.com/rancher/wrangler/pkg/summary/client +github.com/rancher/wrangler/pkg/summary/informer +github.com/rancher/wrangler/pkg/summary/lister +# github.com/rancher/wrangler-api v0.5.0 github.com/rancher/wrangler-api/pkg/generated/controllers/apiextensions.k8s.io github.com/rancher/wrangler-api/pkg/generated/controllers/apiextensions.k8s.io/v1beta1 github.com/rancher/wrangler-api/pkg/generated/controllers/apiregistration.k8s.io @@ -266,8 +269,6 @@ k8s.io/apiserver/plugin/pkg/authenticator/token/webhook # k8s.io/client-go v11.0.1-0.20190409021438-1a26190bd76a+incompatible => k8s.io/client-go v0.17.2 k8s.io/client-go/discovery k8s.io/client-go/dynamic -k8s.io/client-go/dynamic/dynamicinformer -k8s.io/client-go/dynamic/dynamiclister k8s.io/client-go/informers k8s.io/client-go/informers/admissionregistration k8s.io/client-go/informers/admissionregistration/v1