Skip to content

Commit 732ed05

Browse files
committed
Add support for both the new and old events APIs simultaneously.
Signed-off-by: Borja Clemente <[email protected]>
1 parent 54f66ac commit 732ed05

File tree

7 files changed

+48
-6
lines changed

7 files changed

+48
-6
lines changed

pkg/cluster/cluster.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,13 @@ import (
3333
"sigs.k8s.io/controller-runtime/pkg/client/apiutil"
3434
logf "sigs.k8s.io/controller-runtime/pkg/internal/log"
3535
intrec "sigs.k8s.io/controller-runtime/pkg/internal/recorder"
36+
"sigs.k8s.io/controller-runtime/pkg/recorder"
3637
)
3738

3839
// Cluster provides various methods to interact with a cluster.
3940
type Cluster interface {
41+
recorder.Provider
42+
4043
// GetHTTPClient returns an HTTP client that can be used to talk to the apiserver
4144
GetHTTPClient() *http.Client
4245

@@ -58,9 +61,6 @@ type Cluster interface {
5861
// GetFieldIndexer returns a client.FieldIndexer configured with the client
5962
GetFieldIndexer() client.FieldIndexer
6063

61-
// GetEventRecorder returns a new EventRecorder for the provided name
62-
GetEventRecorder(name string) events.EventRecorder
63-
6464
// GetRESTMapper returns a RESTMapper
6565
GetRESTMapper() meta.RESTMapper
6666

pkg/cluster/internal.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525
"k8s.io/apimachinery/pkg/runtime"
2626
"k8s.io/client-go/rest"
2727
"k8s.io/client-go/tools/events"
28+
"k8s.io/client-go/tools/record"
2829

2930
"sigs.k8s.io/controller-runtime/pkg/cache"
3031
"sigs.k8s.io/controller-runtime/pkg/client"
@@ -87,6 +88,10 @@ func (c *cluster) GetEventRecorder(name string) events.EventRecorder {
8788
return c.recorderProvider.GetEventRecorder(name)
8889
}
8990

91+
func (c *cluster) GetOldEventRecorder(name string) record.EventRecorder {
92+
return c.recorderProvider.GetOldEventRecorder(name)
93+
}
94+
9095
func (c *cluster) GetRESTMapper() meta.RESTMapper {
9196
return c.mapper
9297
}

pkg/internal/recorder/recorder.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727
eventsv1client "k8s.io/client-go/kubernetes/typed/events/v1"
2828
"k8s.io/client-go/rest"
2929
"k8s.io/client-go/tools/events"
30+
"k8s.io/client-go/tools/record"
3031
)
3132

3233
// EventBroadcasterProducer makes an event broadcaster, returning
@@ -136,6 +137,17 @@ func (p *Provider) GetEventRecorder(name string) events.EventRecorder {
136137
}
137138
}
138139

140+
// GetOldEventRecorder returns an event recorder that broadcasts to this provider's
141+
// broadcaster. All events will be associated with a component of the given name.
142+
func (p *Provider) GetOldEventRecorder(name string) record.EventRecorder {
143+
return &oldRecorder{
144+
newRecorder: &lazyRecorder{
145+
prov: p,
146+
name: name,
147+
},
148+
}
149+
}
150+
139151
// lazyRecorder is a recorder that doesn't actually instantiate any underlying
140152
// recorder until the first event is emitted.
141153
type lazyRecorder struct {
@@ -163,3 +175,22 @@ func (l *lazyRecorder) Eventf(regarding runtime.Object, related runtime.Object,
163175
}
164176
l.prov.lock.RUnlock()
165177
}
178+
179+
// oldRecorder is a wrapper around the events.EventRecorder that implements the old record.EventRecorder API.
180+
// This is a temporary solution to support both the old and new events APIs without duplicating everything.
181+
// Internally it calls the new events API from the old API funcs and no longer supported parameters are ignored (e.g. annotations).
182+
type oldRecorder struct {
183+
newRecorder *lazyRecorder
184+
}
185+
186+
func (l *oldRecorder) Event(object runtime.Object, eventtype, reason, message string) {
187+
l.newRecorder.Eventf(object, nil, eventtype, reason, "unsupported", message)
188+
}
189+
190+
func (l *oldRecorder) Eventf(object runtime.Object, eventtype, reason, messageFmt string, args ...interface{}) {
191+
l.newRecorder.Eventf(object, nil, eventtype, reason, "unsupported", messageFmt, args...)
192+
}
193+
194+
func (l *oldRecorder) AnnotatedEventf(object runtime.Object, annotations map[string]string, eventtype, reason, messageFmt string, args ...interface{}) {
195+
l.newRecorder.Eventf(object, nil, eventtype, reason, "unsupported", messageFmt, args...)
196+
}

pkg/leaderelection/leader_election.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,10 +126,9 @@ func NewResourceLock(config *rest.Config, recorderProvider recorder.Provider, op
126126
options.LeaderElectionID,
127127
corev1Client,
128128
coordinationClient,
129-
// TODO(clebs): figure out how to solve this.
130129
resourcelock.ResourceLockConfig{
131130
Identity: id,
132-
EventRecorder: recorderProvider.GetEventRecorder(id),
131+
EventRecorder: recorderProvider.GetOldEventRecorder(id),
133132
},
134133
options.LeaderLabels,
135134
)

pkg/manager/internal.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import (
3535
"k8s.io/client-go/tools/events"
3636
"k8s.io/client-go/tools/leaderelection"
3737
"k8s.io/client-go/tools/leaderelection/resourcelock"
38+
"k8s.io/client-go/tools/record"
3839

3940
"sigs.k8s.io/controller-runtime/pkg/cache"
4041
"sigs.k8s.io/controller-runtime/pkg/client"
@@ -259,6 +260,10 @@ func (cm *controllerManager) GetEventRecorder(name string) events.EventRecorder
259260
return cm.cluster.GetEventRecorder(name)
260261
}
261262

263+
func (cm *controllerManager) GetOldEventRecorder(name string) record.EventRecorder {
264+
return cm.cluster.GetOldEventRecorder(name)
265+
}
266+
262267
func (cm *controllerManager) GetRESTMapper() meta.RESTMapper {
263268
return cm.cluster.GetRESTMapper()
264269
}

pkg/manager/manager.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ import (
2929
corev1 "k8s.io/api/core/v1"
3030
"k8s.io/apimachinery/pkg/api/meta"
3131
"k8s.io/apimachinery/pkg/runtime"
32-
"k8s.io/client-go/kubernetes"
3332
"k8s.io/client-go/rest"
3433
"k8s.io/client-go/tools/events"
3534
"k8s.io/client-go/tools/leaderelection/resourcelock"

pkg/recorder/recorder.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,13 @@ package recorder
2222

2323
import (
2424
"k8s.io/client-go/tools/events"
25+
"k8s.io/client-go/tools/record"
2526
)
2627

2728
// Provider knows how to generate new event recorders with given name.
2829
type Provider interface {
2930
// NewRecorder returns an EventRecorder with given name.
3031
GetEventRecorder(name string) events.EventRecorder
32+
// GetOldEventRecorder returns an EventRecorder for the old events API.
33+
GetOldEventRecorder(name string) record.EventRecorder
3134
}

0 commit comments

Comments
 (0)