Skip to content

Commit 88ece34

Browse files
committed
feat(lister): add installplan lister
1 parent c9d6ae6 commit 88ece34

File tree

3 files changed

+204
-0
lines changed

3 files changed

+204
-0
lines changed

pkg/lib/operatorlister/installplan.go

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
package operatorlister
2+
3+
import (
4+
"fmt"
5+
"sync"
6+
7+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
8+
"k8s.io/apimachinery/pkg/labels"
9+
"k8s.io/apimachinery/pkg/types"
10+
11+
"github.com/operator-framework/operator-lifecycle-manager/pkg/api/apis/operators/v1alpha1"
12+
listers "github.com/operator-framework/operator-lifecycle-manager/pkg/api/client/listers/operators/v1alpha1"
13+
)
14+
15+
type UnionInstallPlanLister struct {
16+
ipListers map[string]listers.InstallPlanLister
17+
ipLock sync.RWMutex
18+
}
19+
20+
// List lists all InstallPlans in the indexer.
21+
func (u *UnionInstallPlanLister) List(selector labels.Selector) (ret []*v1alpha1.InstallPlan, err error) {
22+
u.ipLock.RLock()
23+
defer u.ipLock.RUnlock()
24+
25+
set := make(map[types.UID]*v1alpha1.InstallPlan)
26+
for _, cl := range u.ipListers {
27+
ips, err := cl.List(selector)
28+
if err != nil {
29+
return nil, err
30+
}
31+
32+
for _, ip := range ips {
33+
set[ip.GetUID()] = ip
34+
}
35+
}
36+
37+
for _, ip := range set {
38+
ret = append(ret, ip)
39+
}
40+
41+
return
42+
}
43+
44+
// InstallPlans returns an object that can list and get InstallPlans.
45+
func (u *UnionInstallPlanLister) InstallPlans(namespace string) listers.InstallPlanNamespaceLister {
46+
u.ipLock.RLock()
47+
defer u.ipLock.RUnlock()
48+
49+
// Check for specific namespace listers
50+
if cl, ok := u.ipListers[namespace]; ok {
51+
return cl.InstallPlans(namespace)
52+
}
53+
54+
// Check for any namespace-all listers
55+
if cl, ok := u.ipListers[metav1.NamespaceAll]; ok {
56+
return cl.InstallPlans(namespace)
57+
}
58+
59+
return &NullInstallPlanNamespaceLister{}
60+
}
61+
62+
func (u *UnionInstallPlanLister) RegisterInstallPlanLister(namespace string, lister listers.InstallPlanLister) {
63+
u.ipLock.Lock()
64+
defer u.ipLock.Unlock()
65+
66+
if u.ipListers == nil {
67+
u.ipListers = make(map[string]listers.InstallPlanLister)
68+
}
69+
70+
u.ipListers[namespace] = lister
71+
}
72+
73+
func (l *operatorsV1alpha1Lister) RegisterInstallPlanLister(namespace string, lister listers.InstallPlanLister) {
74+
l.installPlanLister.RegisterInstallPlanLister(namespace, lister)
75+
}
76+
77+
func (l *operatorsV1alpha1Lister) InstallPlanLister() listers.InstallPlanLister {
78+
return l.installPlanLister
79+
}
80+
81+
// NullInstallPlanNamespaceLister is an implementation of a null InstallPlanNamespaceLister. It is
82+
// used to prevent nil pointers when no InstallPlanNamespaceLister has been registered for a given
83+
// namespace.
84+
type NullInstallPlanNamespaceLister struct {
85+
listers.InstallPlanNamespaceLister
86+
}
87+
88+
// List returns nil and an error explaining that this is a NullInstallPlanNamespaceLister.
89+
func (n *NullInstallPlanNamespaceLister) List(selector labels.Selector) (ret []*v1alpha1.InstallPlan, err error) {
90+
return nil, fmt.Errorf("cannot list InstallPlans with a NullInstallPlanNamespaceLister")
91+
}
92+
93+
// Get returns nil and an error explaining that this is a NullInstallPlanNamespaceLister.
94+
func (n *NullInstallPlanNamespaceLister) Get(name string) (*v1alpha1.InstallPlan, error) {
95+
return nil, fmt.Errorf("cannot get InstallPlan with a NullInstallPlanNamespaceLister")
96+
}

pkg/lib/operatorlister/lister.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,11 @@ type APIExtensionsV1beta1Lister interface {
7979
type OperatorsV1alpha1Lister interface {
8080
RegisterClusterServiceVersionLister(namespace string, lister v1alpha1.ClusterServiceVersionLister)
8181
RegisterSubscriptionLister(namespace string, lister v1alpha1.SubscriptionLister)
82+
RegisterInstallPlanLister(namespace string, lister v1alpha1.InstallPlanLister)
8283

8384
ClusterServiceVersionLister() v1alpha1.ClusterServiceVersionLister
8485
SubscriptionLister() v1alpha1.SubscriptionLister
86+
InstallPlanLister() v1alpha1.InstallPlanLister
8587
}
8688

8789
//go:generate counterfeiter . OperatorsV1alpha2Lister
@@ -160,12 +162,14 @@ func newAPIExtensionsV1beta1Lister() *apiExtensionsV1beta1Lister {
160162
type operatorsV1alpha1Lister struct {
161163
clusterServiceVersionLister *UnionClusterServiceVersionLister
162164
subscriptionLister *UnionSubscriptionLister
165+
installPlanLister *UnionInstallPlanLister
163166
}
164167

165168
func newOperatorsV1alpha1Lister() *operatorsV1alpha1Lister {
166169
return &operatorsV1alpha1Lister{
167170
clusterServiceVersionLister: &UnionClusterServiceVersionLister{},
168171
subscriptionLister: &UnionSubscriptionLister{},
172+
installPlanLister: &UnionInstallPlanLister{},
169173
}
170174
}
171175

pkg/lib/operatorlister/operatorlisterfakes/fake_operators_v1alpha1lister.go

Lines changed: 104 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)