1/* 2Copyright 2018 The Kubernetes Authors. 3 4Licensed under the Apache License, Version 2.0 (the "License"); 5you may not use this file except in compliance with the License. 6You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10Unless required by applicable law or agreed to in writing, software 11distributed under the License is distributed on an "AS IS" BASIS, 12WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13See the License for the specific language governing permissions and 14limitations under the License. 15*/ 16 17package metadatalister 18 19import ( 20 "k8s.io/apimachinery/pkg/labels" 21 "k8s.io/apimachinery/pkg/runtime" 22 "k8s.io/client-go/tools/cache" 23) 24 25var _ cache.GenericLister = &metadataListerShim{} 26var _ cache.GenericNamespaceLister = &metadataNamespaceListerShim{} 27 28// metadataListerShim implements the cache.GenericLister interface. 29type metadataListerShim struct { 30 lister Lister 31} 32 33// NewRuntimeObjectShim returns a new shim for Lister. 34// It wraps Lister so that it implements cache.GenericLister interface 35func NewRuntimeObjectShim(lister Lister) cache.GenericLister { 36 return &metadataListerShim{lister: lister} 37} 38 39// List will return all objects across namespaces 40func (s *metadataListerShim) List(selector labels.Selector) (ret []runtime.Object, err error) { 41 objs, err := s.lister.List(selector) 42 if err != nil { 43 return nil, err 44 } 45 46 ret = make([]runtime.Object, len(objs)) 47 for index, obj := range objs { 48 ret[index] = obj 49 } 50 return ret, err 51} 52 53// Get will attempt to retrieve assuming that name==key 54func (s *metadataListerShim) Get(name string) (runtime.Object, error) { 55 return s.lister.Get(name) 56} 57 58func (s *metadataListerShim) ByNamespace(namespace string) cache.GenericNamespaceLister { 59 return &metadataNamespaceListerShim{ 60 namespaceLister: s.lister.Namespace(namespace), 61 } 62} 63 64// metadataNamespaceListerShim implements the NamespaceLister interface. 65// It wraps NamespaceLister so that it implements cache.GenericNamespaceLister interface 66type metadataNamespaceListerShim struct { 67 namespaceLister NamespaceLister 68} 69 70// List will return all objects in this namespace 71func (ns *metadataNamespaceListerShim) List(selector labels.Selector) (ret []runtime.Object, err error) { 72 objs, err := ns.namespaceLister.List(selector) 73 if err != nil { 74 return nil, err 75 } 76 77 ret = make([]runtime.Object, len(objs)) 78 for index, obj := range objs { 79 ret[index] = obj 80 } 81 return ret, err 82} 83 84// Get will attempt to retrieve by namespace and name 85func (ns *metadataNamespaceListerShim) Get(name string) (runtime.Object, error) { 86 return ns.namespaceLister.Get(name) 87} 88