Lister
Overview
Lister is any object that knows how to perform an initial list.
Interface:
type Lister interface {
// List should return a list type object; the Items field will be extracted, and the
// ResourceVersion field will be used to start the watch in the right place.
List(options metav1.ListOptions) (runtime.Object, error)
}
Usage
-
Prepare Indexer (dependency). Read indexer for more details.
indexer := cache.NewIndexer( cache.MetaNamespaceKeyFunc, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, )
Add object to indexer with/without labels (which will be used as selector when listing with Lister below).
// Add deployment with label err := indexer.Add(getDeployment("deployment-with-label", map[string]string{"watch": "true"})) if err != nil { t.Errorf("indexer.Add failed %v\n", err) } // Add deployment without label err = indexer.Add(getDeployment("deployment-without-label", map[string]string{})) if err != nil { t.Errorf("indexer.Add failed %v\n", err) }
-
Create a Lister for a target resource.
For a built-in resource:
import ( appsv1lister "k8s.io/client-go/listers/apps/v1" )
deploymentLister := appsv1lister.NewDeploymentLister(indexer)
For a custom resource: Need to generate lister with code-generator
-
List object with selector.
selector := labels.SelectorFromSet(labels.Set{"watch": "true"}) ret, _ := deploymentLister.List(selector) for _, deploy := range ret { fmt.Println(deploy.Name) }
Objects are got from the indexers.