Skip to content

Commit 8d75fc5

Browse files
committed
Replace uses of klogr for a passed through logr interface
Signed-off-by: joshvanl <[email protected]>
1 parent 036666a commit 8d75fc5

File tree

12 files changed

+51
-39
lines changed

12 files changed

+51
-39
lines changed

adopt/adopt.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,12 @@ import (
2828
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2929
"k8s.io/apimachinery/pkg/runtime"
3030
"k8s.io/apimachinery/pkg/types"
31-
"k8s.io/klog/v2"
3231

3332
"github.com/authzed/controller-idioms/handler"
3433
"github.com/authzed/controller-idioms/queue"
3534
"github.com/authzed/controller-idioms/typed"
3635
"github.com/authzed/controller-idioms/typedctx"
36+
"github.com/go-logr/logr"
3737
)
3838

3939
// TODO: a variant where there can only be one owner (label only, fail if labelled for someone else)
@@ -147,7 +147,7 @@ type AdoptionHandler[K Object, A Adoptable[A]] struct {
147147
}
148148

149149
func (s *AdoptionHandler[K, A]) Handle(ctx context.Context) {
150-
logger := klog.FromContext(ctx)
150+
logger := logr.FromContextOrDiscard(ctx)
151151
adoptee := s.AdopteeCtx.MustValue(ctx)
152152
owner := s.OwnerCtx.MustValue(ctx)
153153

bootstrap/resource.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,14 @@ import (
2020
"os"
2121

2222
"github.com/cespare/xxhash/v2"
23+
"github.com/go-logr/logr"
2324
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2425
"k8s.io/apimachinery/pkg/runtime"
2526
"k8s.io/apimachinery/pkg/runtime/schema"
2627
"k8s.io/apimachinery/pkg/types"
2728
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
2829
"k8s.io/apimachinery/pkg/util/yaml"
2930
"k8s.io/client-go/dynamic"
30-
"k8s.io/klog/v2"
3131
"k8s.io/utils/pointer"
3232
"sigs.k8s.io/controller-runtime/pkg/client"
3333
)
@@ -41,7 +41,7 @@ type KubeResourceObject interface {
4141
// ResourceFromFile creates a KubeResourceObject with the given config file
4242
func ResourceFromFile[O KubeResourceObject](ctx context.Context, fieldManager string, gvr schema.GroupVersionResource, dclient dynamic.Interface, configPath string, lastHash uint64) (uint64, error) {
4343
if len(configPath) <= 0 {
44-
klog.V(4).Info("bootstrap file path not specified")
44+
logr.FromContextOrDiscard(ctx).V(4).Info("bootstrap file path not specified")
4545
return 0, nil
4646
}
4747

@@ -50,7 +50,7 @@ func ResourceFromFile[O KubeResourceObject](ctx context.Context, fieldManager st
5050
utilruntime.HandleError(f.Close())
5151
}()
5252
if errors.Is(err, os.ErrNotExist) {
53-
klog.V(4).Info("no bootstrap file present, skipping bootstrapping")
53+
logr.FromContextOrDiscard(ctx).V(4).Info("no bootstrap file present, skipping bootstrapping")
5454
return 0, nil
5555
}
5656
if err != nil {

bootstrap/resource_test.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,19 @@ import (
66
"fmt"
77
"time"
88

9+
"github.com/go-logr/logr"
910
corev1 "k8s.io/api/core/v1"
1011
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1112
"k8s.io/apimachinery/pkg/runtime"
1213
"k8s.io/apimachinery/pkg/runtime/schema"
1314
"k8s.io/apimachinery/pkg/util/yaml"
1415
"k8s.io/client-go/dynamic/fake"
1516
"k8s.io/client-go/testing"
17+
"k8s.io/klog/v2/klogr"
1618
)
1719

1820
func ExampleResourceFromFile() {
19-
ctx, cancel := context.WithCancel(context.Background())
21+
ctx, cancel := context.WithCancel(logr.NewContext(context.Background(), klogr.New()))
2022
defer cancel()
2123

2224
secretGVR := corev1.SchemeGroupVersion.WithResource("secrets")

fileinformer/file_informer.go

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@ import (
99
"time"
1010

1111
"github.com/fsnotify/fsnotify"
12+
"github.com/go-logr/logr"
1213
"k8s.io/apimachinery/pkg/runtime/schema"
1314
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
1415
"k8s.io/client-go/dynamic/dynamicinformer"
1516
"k8s.io/client-go/informers"
1617
"k8s.io/client-go/tools/cache"
17-
"k8s.io/klog/v2"
1818
)
1919

2020
// FileGroupVersion is a sythetic GroupVersion that the informers use.
@@ -26,6 +26,7 @@ var FileGroupVersion = schema.GroupVersion{
2626
// Factory implements dynamicinformer.DynamicSharedInformerFactory, but for
2727
// starting and managing FileInformers.
2828
type Factory struct {
29+
log logr.Logger
2930
sync.Mutex
3031
informers map[schema.GroupVersionResource]informers.GenericInformer
3132
// startedInformers is used for tracking which informers have been started.
@@ -36,8 +37,9 @@ type Factory struct {
3637
var _ dynamicinformer.DynamicSharedInformerFactory = &Factory{}
3738

3839
// NewFileInformerFactory creates a new Factory.
39-
func NewFileInformerFactory() (*Factory, error) {
40+
func NewFileInformerFactory(log logr.Logger) (*Factory, error) {
4041
return &Factory{
42+
log: log,
4143
informers: make(map[schema.GroupVersionResource]informers.GenericInformer),
4244
startedInformers: make(map[schema.GroupVersionResource]bool),
4345
}, nil
@@ -71,7 +73,7 @@ func (f *Factory) ForResource(gvr schema.GroupVersionResource) informers.Generic
7173
if err != nil {
7274
panic(err)
7375
}
74-
informer, err = NewFileInformer(watcher, gvr)
76+
informer, err = NewFileInformer(f.log, watcher, gvr)
7577
if err != nil {
7678
panic(err)
7779
}
@@ -104,6 +106,7 @@ func (f *Factory) WaitForCacheSync(stopCh <-chan struct{}) map[schema.GroupVersi
104106

105107
// FileInformer is an informer that watches files instead of the kube api.
106108
type FileInformer struct {
109+
log logr.Logger
107110
fileName string
108111
watcher *fsnotify.Watcher
109112
informer cache.SharedIndexInformer
@@ -112,11 +115,12 @@ type FileInformer struct {
112115
var _ informers.GenericInformer = &FileInformer{}
113116

114117
// NewFileInformer returns a new FileInformer.
115-
func NewFileInformer(watcher *fsnotify.Watcher, gvr schema.GroupVersionResource) (*FileInformer, error) {
118+
func NewFileInformer(log logr.Logger, watcher *fsnotify.Watcher, gvr schema.GroupVersionResource) (*FileInformer, error) {
116119
return &FileInformer{
120+
log: log,
117121
fileName: gvr.Resource,
118122
watcher: watcher,
119-
informer: NewFileSharedIndexInformer(gvr.Resource, watcher, 1*time.Minute),
123+
informer: NewFileSharedIndexInformer(log, gvr.Resource, watcher, 1*time.Minute),
120124
}, nil
121125
}
122126

@@ -130,6 +134,7 @@ func (f *FileInformer) Lister() cache.GenericLister {
130134
}
131135

132136
type FileSharedIndexInformer struct {
137+
log logr.Logger
133138
sync.Once
134139
sync.RWMutex
135140
defaultEventHandlerResyncPeriod time.Duration
@@ -144,8 +149,9 @@ var _ cache.SharedIndexInformer = &FileSharedIndexInformer{}
144149

145150
// NewFileSharedIndexInformer creates a new informer watching the file
146151
// Note that currently all event handlers share the default resync period.
147-
func NewFileSharedIndexInformer(fileName string, watcher *fsnotify.Watcher, defaultEventHandlerResyncPeriod time.Duration) *FileSharedIndexInformer {
152+
func NewFileSharedIndexInformer(log logr.Logger, fileName string, watcher *fsnotify.Watcher, defaultEventHandlerResyncPeriod time.Duration) *FileSharedIndexInformer {
148153
return &FileSharedIndexInformer{
154+
log: log.WithValues("file", fileName),
149155
fileName: fileName,
150156
watcher: watcher,
151157
handlers: []cache.ResourceEventHandler{},
@@ -187,7 +193,7 @@ func (f *FileSharedIndexInformer) Run(stopCh <-chan struct{}) {
187193
utilruntime.HandleError(f.watcher.Add(fileName))
188194
f.started = true
189195
f.Unlock()
190-
klog.V(4).Infof("started watching %q", fileName)
196+
f.log.V(4).Info("started watching")
191197

192198
if len(fileName) == 0 {
193199
return
@@ -210,13 +216,13 @@ func (f *FileSharedIndexInformer) Run(stopCh <-chan struct{}) {
210216
defer f.Unlock()
211217
utilruntime.HandleError(f.watcher.Remove(fileName))
212218
utilruntime.HandleError(f.watcher.Close())
213-
klog.V(4).Infof("stopped watching %q", fileName)
219+
f.log.V(4).Info("stopped watching")
214220
}()
215221
ctx, cancel := context.WithTimeout(context.Background(), f.defaultEventHandlerResyncPeriod)
216222
for {
217223
select {
218224
case <-ctx.Done():
219-
klog.V(4).Infof("resyncing file %s after %s", fileName, f.defaultEventHandlerResyncPeriod.String())
225+
f.log.V(4).Info("resyncing file after %s", f.defaultEventHandlerResyncPeriod.String())
220226
f.RLock()
221227
for _, h := range f.handlers {
222228
h.OnUpdate(fileName, fileName)
@@ -229,11 +235,11 @@ func (f *FileSharedIndexInformer) Run(stopCh <-chan struct{}) {
229235
cancel()
230236
return
231237
}
232-
klog.V(8).Infof("filewatcher got event %s for %q", event.String(), event.Name)
238+
f.log.V(8).Info("filewatcher got event %s for %q", event.String(), event.Name)
233239
if event.Name != fileName {
234240
continue
235241
}
236-
klog.V(4).Infof("filewatcher got event %s for %q", event.String(), event.Name)
242+
f.log.V(4).Info("filewatcher got event %s for %q", event.String(), event.Name)
237243
if event.Op&fsnotify.Write == fsnotify.Write ||
238244
event.Op&fsnotify.Create == fsnotify.Create {
239245
f.RLock()

fileinformer/file_informer_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,11 @@ import (
1010
"github.com/stretchr/testify/mock"
1111
"github.com/stretchr/testify/require"
1212
"k8s.io/client-go/tools/cache"
13+
"k8s.io/klog/v2/klogr"
1314
)
1415

1516
func TestFileInformer(t *testing.T) {
16-
informerFactory, err := NewFileInformerFactory()
17+
informerFactory, err := NewFileInformerFactory(klogr.New())
1718
require.NoError(t, err)
1819

1920
file, err := os.CreateTemp("", "watched-file")

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ require (
66
github.com/cespare/xxhash/v2 v2.1.2
77
github.com/davecgh/go-spew v1.1.1
88
github.com/fsnotify/fsnotify v1.5.4
9+
github.com/go-logr/logr v1.2.3
910
github.com/maxbrunsfeld/counterfeiter/v6 v6.5.0
1011
github.com/prometheus/client_golang v1.13.0
1112
github.com/stretchr/testify v1.8.0
@@ -35,7 +36,6 @@ require (
3536
github.com/emicklei/go-restful/v3 v3.8.0 // indirect
3637
github.com/evanphx/json-patch v4.12.0+incompatible // indirect
3738
github.com/felixge/httpsnoop v1.0.1 // indirect
38-
github.com/go-logr/logr v1.2.3 // indirect
3939
github.com/go-openapi/jsonpointer v0.19.5 // indirect
4040
github.com/go-openapi/jsonreference v0.19.5 // indirect
4141
github.com/go-openapi/swag v0.19.14 // indirect

manager/controller.go

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,11 @@ import (
3131
"k8s.io/client-go/util/workqueue"
3232
"k8s.io/controller-manager/controller"
3333
controllerhealthz "k8s.io/controller-manager/pkg/healthz"
34-
"k8s.io/klog/v2"
3534

3635
"github.com/authzed/controller-idioms/cachekeys"
3736
"github.com/authzed/controller-idioms/queue"
3837
"github.com/authzed/controller-idioms/typed"
38+
"github.com/go-logr/logr"
3939
)
4040

4141
// SyncFunc is a function called when an event needs processing
@@ -86,6 +86,7 @@ func (c *BasicController) Start(ctx context.Context, numThreads int) {}
8686
// - The owned object has standard meta.Conditions and emits metrics for them
8787
type OwnedResourceController struct {
8888
*BasicController
89+
log logr.Logger
8990
queue.OperationsContext
9091
Registry *typed.Registry
9192
Recorder record.EventRecorder
@@ -94,8 +95,9 @@ type OwnedResourceController struct {
9495
sync SyncFunc
9596
}
9697

97-
func NewOwnedResourceController(name string, owned schema.GroupVersionResource, key queue.OperationsContext, registry *typed.Registry, broadcaster record.EventBroadcaster, syncFunc SyncFunc) *OwnedResourceController {
98+
func NewOwnedResourceController(log logr.Logger, name string, owned schema.GroupVersionResource, key queue.OperationsContext, registry *typed.Registry, broadcaster record.EventBroadcaster, syncFunc SyncFunc) *OwnedResourceController {
9899
return &OwnedResourceController{
100+
log: log,
99101
BasicController: NewBasicController(name),
100102
OperationsContext: key,
101103
Registry: registry,
@@ -110,8 +112,8 @@ func (c *OwnedResourceController) Start(ctx context.Context, numThreads int) {
110112
defer utilruntime.HandleCrash()
111113
defer c.Queue.ShutDown()
112114

113-
klog.V(3).InfoS("starting controller", "resource", c.Owned)
114-
defer klog.V(3).InfoS("stopping controller", "resource", c.Owned)
115+
c.log.V(3).Info("starting controller", "resource", c.Owned)
116+
defer c.log.V(3).Info("stopping controller", "resource", c.Owned)
115117

116118
for i := 0; i < numThreads; i++ {
117119
go wait.Until(func() { c.startWorker(ctx) }, time.Second, ctx.Done())
@@ -146,12 +148,12 @@ func (c *OwnedResourceController) processNext(ctx context.Context) bool {
146148
ctx, cancel := context.WithCancel(ctx)
147149

148150
done := func() {
149-
klog.FromContext(ctx).V(5).Info("done", "key", key)
151+
logr.FromContextOrDiscard(ctx).V(5).Info("done", "key", key)
150152
cancel()
151153
c.Queue.Forget(key)
152154
}
153155
requeue := func(after time.Duration) {
154-
klog.FromContext(ctx).V(5).Info("requeue", "key", key, "after", after)
156+
logr.FromContextOrDiscard(ctx).V(5).Info("requeue", "key", key, "after", after)
155157
cancel()
156158
if after == 0 {
157159
c.Queue.AddRateLimited(key)

manager/controller_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
typedcorev1 "k8s.io/client-go/kubernetes/typed/core/v1"
1313
"k8s.io/client-go/tools/record"
1414
ctrlmanageropts "k8s.io/controller-manager/options"
15+
"k8s.io/klog/v2/klogr"
1516

1617
"github.com/authzed/controller-idioms/cachekeys"
1718
"github.com/authzed/controller-idioms/queue"
@@ -31,7 +32,7 @@ func ExampleNewOwnedResourceController() {
3132

3233
// the controller processes objects on the queue, but doesn't set up any
3334
// informers by default.
34-
controller := NewOwnedResourceController("my-controller", gvr, CtxQueue, registry, broadcaster, func(ctx context.Context, gvr schema.GroupVersionResource, namespace, name string) {
35+
controller := NewOwnedResourceController(klogr.New(), "my-controller", gvr, CtxQueue, registry, broadcaster, func(ctx context.Context, gvr schema.GroupVersionResource, namespace, name string) {
3536
// process object
3637
})
3738

@@ -53,7 +54,7 @@ func TestControllerQueueDone(t *testing.T) {
5354
broadcaster := record.NewBroadcaster()
5455
eventSink := &typedcorev1.EventSinkImpl{Interface: fake.NewSimpleClientset().CoreV1().Events("")}
5556

56-
controller := NewOwnedResourceController("my-controller", gvr, CtxQueue, registry, broadcaster, func(ctx context.Context, gvr schema.GroupVersionResource, namespace, name string) {
57+
controller := NewOwnedResourceController(klogr.New(), "my-controller", gvr, CtxQueue, registry, broadcaster, func(ctx context.Context, gvr schema.GroupVersionResource, namespace, name string) {
5758
})
5859

5960
mgr := NewManager(ctrlmanageropts.RecommendedDebuggingOptions().DebuggingConfiguration, ":", broadcaster, eventSink)

middleware/logging.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,8 @@ import (
55
"encoding/base64"
66
"math/rand"
77

8-
"k8s.io/klog/v2"
9-
108
"github.com/authzed/controller-idioms/handler"
9+
"github.com/go-logr/logr"
1110
)
1211

1312
// NewSyncID returns a random string of length `size` that can be added to log
@@ -21,17 +20,17 @@ func NewSyncID(size uint8) string {
2120
}
2221

2322
// NewHandlerLoggingMiddleware creates a new HandlerLoggingMiddleware for a
24-
// particular klog log level.
23+
// particular logr log level.
2524
func NewHandlerLoggingMiddleware(level int) Middleware {
2625
return MakeMiddleware(HandlerLoggingMiddleware(level))
2726
}
2827

29-
// HandlerLoggingMiddleware logs on entry to a handler. It uses the klog logger
28+
// HandlerLoggingMiddleware logs on entry to a handler. It uses the logr logger
3029
// found in the context.
3130
func HandlerLoggingMiddleware(level int) HandlerMiddleware {
3231
return func(in handler.Handler) handler.Handler {
3332
return handler.NewHandlerFromFunc(func(ctx context.Context) {
34-
logger := klog.FromContext(ctx)
33+
logger := logr.FromContextOrDiscard(ctx)
3534
logger = logger.WithValues("handler", in.ID())
3635
logger.V(level).Info("entering handler")
3736
in.Handle(ctx)

queue/controls.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,8 @@ import (
2020
"context"
2121
"time"
2222

23-
"k8s.io/klog/v2"
24-
2523
"github.com/authzed/controller-idioms/typedctx"
24+
"github.com/go-logr/logr"
2625
)
2726

2827
//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6 -generate
@@ -50,12 +49,12 @@ func (h OperationsContext) Requeue(ctx context.Context) {
5049
}
5150

5251
func (h OperationsContext) RequeueErr(ctx context.Context, err error) {
53-
klog.FromContext(ctx).V(4).WithCallDepth(3).Error(err, "requeueing after error")
52+
logr.FromContextOrDiscard(ctx).V(4).WithCallDepth(3).Error(err, "requeueing after error")
5453
h.MustValue(ctx).RequeueErr(err)
5554
}
5655

5756
func (h OperationsContext) RequeueAPIErr(ctx context.Context, err error) {
58-
klog.FromContext(ctx).V(4).WithCallDepth(3).Error(err, "requeueing after api error")
57+
logr.FromContextOrDiscard(ctx).V(4).WithCallDepth(3).Error(err, "requeueing after api error")
5958
h.MustValue(ctx).RequeueAPIErr(err)
6059
}
6160

static/controller.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
"github.com/authzed/controller-idioms/bootstrap"
1616
"github.com/authzed/controller-idioms/fileinformer"
1717
"github.com/authzed/controller-idioms/manager"
18+
"github.com/go-logr/logr"
1819
)
1920

2021
type Controller[K bootstrap.KubeResourceObject] struct {
@@ -29,8 +30,8 @@ type Controller[K bootstrap.KubeResourceObject] struct {
2930
lastStaticHash atomic.Uint64
3031
}
3132

32-
func NewStaticController[K bootstrap.KubeResourceObject](name string, path string, gvr schema.GroupVersionResource, client dynamic.Interface) (*Controller[K], error) {
33-
fileInformerFactory, err := fileinformer.NewFileInformerFactory()
33+
func NewStaticController[K bootstrap.KubeResourceObject](log logr.Logger, name string, path string, gvr schema.GroupVersionResource, client dynamic.Interface) (*Controller[K], error) {
34+
fileInformerFactory, err := fileinformer.NewFileInformerFactory(log)
3435
if err != nil {
3536
return nil, err
3637
}

0 commit comments

Comments
 (0)