Skip to content

Commit 4402819

Browse files
committed
refactor(olm-operator): replace factory method parameters with options
- Replace olm-operator factory method parameters with options - Use new QueueInformers
1 parent ddf67e8 commit 4402819

File tree

7 files changed

+790
-552
lines changed

7 files changed

+790
-552
lines changed

pkg/controller/operators/olm/apiservices.go

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -375,14 +375,14 @@ func (a *Operator) installAPIServiceRequirements(desc v1alpha1.APIServiceDescrip
375375
service.SetOwnerReferences(append(service.GetOwnerReferences(), existingService.GetOwnerReferences()...))
376376

377377
// Delete the Service to replace
378-
deleteErr := a.OpClient.DeleteService(service.GetNamespace(), service.GetName(), &metav1.DeleteOptions{})
378+
deleteErr := a.opClient.DeleteService(service.GetNamespace(), service.GetName(), &metav1.DeleteOptions{})
379379
if err != nil && !k8serrors.IsNotFound(deleteErr) {
380380
return nil, fmt.Errorf("could not delete existing service %s", service.GetName())
381381
}
382382
}
383383

384384
// Attempt to create the Service
385-
_, err = a.OpClient.CreateService(service)
385+
_, err = a.opClient.CreateService(service)
386386
if err != nil {
387387
logger.Warnf("could not create service %s", service.GetName())
388388
return nil, fmt.Errorf("could not create service %s: %s", service.GetName(), err.Error())
@@ -433,14 +433,14 @@ func (a *Operator) installAPIServiceRequirements(desc v1alpha1.APIServiceDescrip
433433
}
434434

435435
// Attempt an update
436-
if _, err := a.OpClient.UpdateSecret(secret); err != nil {
436+
if _, err := a.opClient.UpdateSecret(secret); err != nil {
437437
logger.Warnf("could not update secret %s", secret.GetName())
438438
return nil, err
439439
}
440440
} else if k8serrors.IsNotFound(err) {
441441
// Create the secret
442442
ownerutil.AddNonBlockingOwner(secret, csv)
443-
_, err = a.OpClient.CreateSecret(secret)
443+
_, err = a.opClient.CreateSecret(secret)
444444
if err != nil {
445445
log.Warnf("could not create secret %s", secret.GetName())
446446
return nil, err
@@ -471,14 +471,14 @@ func (a *Operator) installAPIServiceRequirements(desc v1alpha1.APIServiceDescrip
471471
}
472472

473473
// Attempt an update
474-
if _, err := a.OpClient.UpdateRole(secretRole); err != nil {
474+
if _, err := a.opClient.UpdateRole(secretRole); err != nil {
475475
logger.Warnf("could not update secret role %s", secretRole.GetName())
476476
return nil, err
477477
}
478478
} else if k8serrors.IsNotFound(err) {
479479
// Create the role
480480
ownerutil.AddNonBlockingOwner(secretRole, csv)
481-
_, err = a.OpClient.CreateRole(secretRole)
481+
_, err = a.opClient.CreateRole(secretRole)
482482
if err != nil {
483483
log.Warnf("could not create secret role %s", secretRole.GetName())
484484
return nil, err
@@ -517,14 +517,14 @@ func (a *Operator) installAPIServiceRequirements(desc v1alpha1.APIServiceDescrip
517517
}
518518

519519
// Attempt an update
520-
if _, err := a.OpClient.UpdateRoleBinding(secretRoleBinding); err != nil {
520+
if _, err := a.opClient.UpdateRoleBinding(secretRoleBinding); err != nil {
521521
logger.Warnf("could not update secret rolebinding %s", secretRoleBinding.GetName())
522522
return nil, err
523523
}
524524
} else if k8serrors.IsNotFound(err) {
525525
// Create the role
526526
ownerutil.AddNonBlockingOwner(secretRoleBinding, csv)
527-
_, err = a.OpClient.CreateRoleBinding(secretRoleBinding)
527+
_, err = a.opClient.CreateRoleBinding(secretRoleBinding)
528528
if err != nil {
529529
log.Warnf("could not create secret rolebinding with dep spec: %+v", depSpec)
530530
return nil, err
@@ -562,7 +562,7 @@ func (a *Operator) installAPIServiceRequirements(desc v1alpha1.APIServiceDescrip
562562
}
563563

564564
// Attempt an update.
565-
if _, err := a.OpClient.UpdateClusterRoleBinding(authDelegatorClusterRoleBinding); err != nil {
565+
if _, err := a.opClient.UpdateClusterRoleBinding(authDelegatorClusterRoleBinding); err != nil {
566566
logger.Warnf("could not update auth delegator clusterrolebinding %s", authDelegatorClusterRoleBinding.GetName())
567567
return nil, err
568568
}
@@ -571,7 +571,7 @@ func (a *Operator) installAPIServiceRequirements(desc v1alpha1.APIServiceDescrip
571571
if err := ownerutil.AddOwnerLabels(authDelegatorClusterRoleBinding, csv); err != nil {
572572
return nil, err
573573
}
574-
_, err = a.OpClient.CreateClusterRoleBinding(authDelegatorClusterRoleBinding)
574+
_, err = a.opClient.CreateClusterRoleBinding(authDelegatorClusterRoleBinding)
575575
if err != nil {
576576
log.Warnf("could not create auth delegator clusterrolebinding %s", authDelegatorClusterRoleBinding.GetName())
577577
return nil, err
@@ -609,7 +609,7 @@ func (a *Operator) installAPIServiceRequirements(desc v1alpha1.APIServiceDescrip
609609
}
610610
}
611611
// Attempt an update.
612-
if _, err := a.OpClient.UpdateRoleBinding(authReaderRoleBinding); err != nil {
612+
if _, err := a.opClient.UpdateRoleBinding(authReaderRoleBinding); err != nil {
613613
logger.Warnf("could not update auth reader role binding %s", authReaderRoleBinding.GetName())
614614
return nil, err
615615
}
@@ -618,7 +618,7 @@ func (a *Operator) installAPIServiceRequirements(desc v1alpha1.APIServiceDescrip
618618
if err := ownerutil.AddOwnerLabels(authReaderRoleBinding, csv); err != nil {
619619
return nil, err
620620
}
621-
_, err = a.OpClient.CreateRoleBinding(authReaderRoleBinding)
621+
_, err = a.opClient.CreateRoleBinding(authReaderRoleBinding)
622622
if err != nil {
623623
log.Warnf("could not create auth reader role binding %s", authReaderRoleBinding.GetName())
624624
return nil, err
@@ -739,10 +739,10 @@ func (a *Operator) installAPIServiceRequirements(desc v1alpha1.APIServiceDescrip
739739
// attempt a update or create
740740
if exists {
741741
logger.Debug("updating APIService")
742-
_, err = a.OpClient.UpdateAPIService(apiService)
742+
_, err = a.opClient.UpdateAPIService(apiService)
743743
} else {
744744
logger.Debug("creating APIService")
745-
_, err = a.OpClient.CreateAPIService(apiService)
745+
_, err = a.opClient.CreateAPIService(apiService)
746746
}
747747

748748
if err != nil {
Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
package olm
2+
3+
import (
4+
"time"
5+
6+
"github.com/pkg/errors"
7+
"github.com/sirupsen/logrus"
8+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
9+
utilclock "k8s.io/apimachinery/pkg/util/clock"
10+
11+
"github.com/operator-framework/operator-lifecycle-manager/pkg/api/client/clientset/internalversion"
12+
"github.com/operator-framework/operator-lifecycle-manager/pkg/api/client/clientset/versioned"
13+
"github.com/operator-framework/operator-lifecycle-manager/pkg/controller/install"
14+
"github.com/operator-framework/operator-lifecycle-manager/pkg/controller/registry/resolver"
15+
"github.com/operator-framework/operator-lifecycle-manager/pkg/lib/labeler"
16+
"github.com/operator-framework/operator-lifecycle-manager/pkg/lib/operatorclient"
17+
)
18+
19+
type OperatorOption func(*operatorConfig)
20+
21+
type operatorConfig struct {
22+
resyncPeriod time.Duration
23+
operatorNamespace string
24+
watchedNamespaces []string
25+
clock utilclock.Clock
26+
logger *logrus.Logger
27+
operatorClient operatorclient.ClientInterface
28+
externalClient versioned.Interface
29+
internalClient internalversion.Interface
30+
strategyResolver install.StrategyResolverInterface
31+
apiReconciler resolver.APIIntersectionReconciler
32+
apiLabeler labeler.Labeler
33+
}
34+
35+
func (o *operatorConfig) apply(options []OperatorOption) {
36+
for _, option := range options {
37+
option(o)
38+
}
39+
}
40+
41+
func newInvalidConfigError(name, msg string) error {
42+
return errors.Errorf("%s config invalid: %s", name, msg)
43+
}
44+
45+
func (o *operatorConfig) validate() (err error) {
46+
// TODO: Add better config validation
47+
switch {
48+
case o.resyncPeriod < 0:
49+
err = newInvalidConfigError("resync period", "must be >= 0")
50+
case o.operatorNamespace == metav1.NamespaceAll:
51+
err = newInvalidConfigError("operator namespace", "must be a single namespace")
52+
case len(o.watchedNamespaces) == 0:
53+
err = newInvalidConfigError("watched namespaces", "must watch at least one namespace")
54+
case o.clock == nil:
55+
err = newInvalidConfigError("clock", "must not be nil")
56+
case o.logger == nil:
57+
err = newInvalidConfigError("logger", "must not be nil")
58+
case o.operatorClient == nil:
59+
err = newInvalidConfigError("operator client", "must not be nil")
60+
case o.externalClient == nil:
61+
err = newInvalidConfigError("external client", "must not be nil")
62+
// case o.internalClient == nil:
63+
// err = newInvalidConfigError("internal client", "must not be nil")
64+
case o.strategyResolver == nil:
65+
err = newInvalidConfigError("strategy resolver", "must not be nil")
66+
case o.apiReconciler == nil:
67+
err = newInvalidConfigError("api reconciler", "must not be nil")
68+
case o.apiLabeler == nil:
69+
err = newInvalidConfigError("api labeler", "must not be nil")
70+
}
71+
72+
return
73+
}
74+
75+
func defaultOperatorConfig() *operatorConfig {
76+
return &operatorConfig{
77+
resyncPeriod: 30 * time.Second,
78+
operatorNamespace: "default",
79+
watchedNamespaces: []string{metav1.NamespaceAll},
80+
clock: utilclock.RealClock{},
81+
logger: logrus.New(),
82+
strategyResolver: &install.StrategyResolver{},
83+
apiReconciler: resolver.APIIntersectionReconcileFunc(resolver.ReconcileAPIIntersection),
84+
apiLabeler: labeler.Func(resolver.LabelSetsFor),
85+
}
86+
}
87+
88+
func WithResyncPeriod(period time.Duration) OperatorOption {
89+
return func(config *operatorConfig) {
90+
config.resyncPeriod = period
91+
}
92+
}
93+
94+
func WithOperatorNamespace(namespace string) OperatorOption {
95+
return func(config *operatorConfig) {
96+
config.operatorNamespace = namespace
97+
}
98+
}
99+
100+
func WithWatchedNamespaces(namespaces ...string) OperatorOption {
101+
return func(config *operatorConfig) {
102+
config.watchedNamespaces = namespaces
103+
}
104+
}
105+
106+
func WithLogger(logger *logrus.Logger) OperatorOption {
107+
return func(config *operatorConfig) {
108+
config.logger = logger
109+
}
110+
}
111+
112+
func WithClock(clock utilclock.Clock) OperatorOption {
113+
return func(config *operatorConfig) {
114+
config.clock = clock
115+
}
116+
}
117+
118+
func WithOperatorClient(operatorClient operatorclient.ClientInterface) OperatorOption {
119+
return func(config *operatorConfig) {
120+
config.operatorClient = operatorClient
121+
}
122+
}
123+
124+
func WithExternalClient(externalClient versioned.Interface) OperatorOption {
125+
return func(config *operatorConfig) {
126+
config.externalClient = externalClient
127+
}
128+
}
129+
130+
func WithInternalClient(internalClient internalversion.Interface) OperatorOption {
131+
return func(config *operatorConfig) {
132+
config.internalClient = internalClient
133+
}
134+
}
135+
136+
func WithStrategyResolver(strategyResolver install.StrategyResolverInterface) OperatorOption {
137+
return func(config *operatorConfig) {
138+
config.strategyResolver = strategyResolver
139+
}
140+
}
141+
142+
func WithAPIReconciler(apiReconciler resolver.APIIntersectionReconciler) OperatorOption {
143+
return func(config *operatorConfig) {
144+
config.apiReconciler = apiReconciler
145+
}
146+
}
147+
148+
func WithAPILabeler(apiLabeler labeler.Labeler) OperatorOption {
149+
return func(config *operatorConfig) {
150+
config.apiLabeler = apiLabeler
151+
}
152+
}

0 commit comments

Comments
 (0)