Update vendor

This commit is contained in:
Darren Shepherd 2020-03-21 07:52:11 -07:00
parent 4c13c6bd95
commit 7395e5b8c4
28 changed files with 373 additions and 81 deletions

4
go.mod
View File

@ -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

11
go.sum
View File

@ -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=

View File

@ -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))
}

View File

@ -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))
}

View File

@ -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))
}

View File

@ -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))
}

View File

@ -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))
}

View File

@ -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))
}

View File

@ -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))
}

View File

@ -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))
}

View File

@ -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))
}

View File

@ -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))
}

View File

@ -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))
}

View File

@ -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))
}

View File

@ -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))
}

View File

@ -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))
}

View File

@ -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))
}

View File

@ -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))
}

View File

@ -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
}

View File

@ -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
}

View File

@ -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))
}

View File

@ -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

View File

@ -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)
}

View File

@ -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
}

View File

@ -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)
}

View File

@ -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
}

View File

@ -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
}

9
vendor/modules.txt vendored
View File

@ -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