@@ -34,6 +34,7 @@ import (
34
34
"k8s.io/client-go/informers"
35
35
"k8s.io/client-go/tools/cache"
36
36
"k8s.io/client-go/tools/clientcmd"
37
+ "k8s.io/client-go/tools/record"
37
38
"k8s.io/client-go/util/retry"
38
39
"k8s.io/client-go/util/workqueue"
39
40
@@ -48,6 +49,7 @@ import (
48
49
"github.com/operator-framework/operator-lifecycle-manager/pkg/controller/registry/grpc"
49
50
"github.com/operator-framework/operator-lifecycle-manager/pkg/controller/registry/reconciler"
50
51
"github.com/operator-framework/operator-lifecycle-manager/pkg/controller/registry/resolver"
52
+ "github.com/operator-framework/operator-lifecycle-manager/pkg/lib/event"
51
53
index "github.com/operator-framework/operator-lifecycle-manager/pkg/lib/index"
52
54
"github.com/operator-framework/operator-lifecycle-manager/pkg/lib/operatorclient"
53
55
"github.com/operator-framework/operator-lifecycle-manager/pkg/lib/operatorlister"
@@ -90,6 +92,7 @@ type Operator struct {
90
92
ipQueueSet * queueinformer.ResourceQueueSet
91
93
nsResolveQueue workqueue.RateLimitingInterface
92
94
namespace string
95
+ recorder record.EventRecorder
93
96
sources * grpc.SourceStore
94
97
sourcesLastUpdate sharedtime.SharedTime
95
98
resolver resolver.StepResolver
@@ -133,6 +136,12 @@ func NewOperator(ctx context.Context, kubeconfigPath string, clock utilclock.Clo
133
136
// Create an OperatorLister
134
137
lister := operatorlister .NewLister ()
135
138
139
+ // eventRecorder can emit events
140
+ eventRecorder , err := event .NewRecorder (opClient .KubernetesInterface ().CoreV1 ().Events (metav1 .NamespaceAll ))
141
+ if err != nil {
142
+ return nil , err
143
+ }
144
+
136
145
// Allocate the new instance of an Operator.
137
146
op := & Operator {
138
147
Operator : queueOperator ,
@@ -143,6 +152,7 @@ func NewOperator(ctx context.Context, kubeconfigPath string, clock utilclock.Clo
143
152
client : crClient ,
144
153
lister : lister ,
145
154
namespace : operatorNamespace ,
155
+ recorder : eventRecorder ,
146
156
catsrcQueueSet : queueinformer .NewEmptyResourceQueueSet (),
147
157
subQueueSet : queueinformer .NewEmptyResourceQueueSet (),
148
158
ipQueueSet : queueinformer .NewEmptyResourceQueueSet (),
@@ -851,6 +861,7 @@ func (o *Operator) syncResolvingNamespace(obj interface{}) error {
851
861
// resolve a set of steps to apply to a cluster, a set of subscriptions to create/update, and any errors
852
862
steps , bundleLookups , updatedSubs , err := o .resolver .ResolveSteps (namespace , querier )
853
863
if err != nil {
864
+ go o .recorder .Event (ns , corev1 .EventTypeWarning ,"ResolutionFailed" , err .Error ())
854
865
return err
855
866
}
856
867
@@ -1206,7 +1217,7 @@ func (o *Operator) gcInstallPlans(log logrus.FieldLogger, namespace string) {
1206
1217
1207
1218
// we only consider maxDeletesPerSweep more than the allowed number of installplans for delete at one time
1208
1219
ips := allIps
1209
- if len (ips ) > maxInstallPlanCount + maxDeletesPerSweep {
1220
+ if len (ips ) > maxInstallPlanCount + maxDeletesPerSweep {
1210
1221
ips = allIps [:maxInstallPlanCount + maxDeletesPerSweep ]
1211
1222
}
1212
1223
0 commit comments