Skip to content

Commit b57fe5c

Browse files
authored
fix: reconfigure controllers to use klog via logr (#1551)
1 parent 21c394e commit b57fe5c

27 files changed

+401
-336
lines changed

cmd/admission-webhook/main.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,11 @@ func main() {
4747
flag.DurationVar(&cacheSyncTimeout, "cache-sync-timeout", configuration.CacheSyncTimeout, "The duration of time to wait while informers synchronize.")
4848

4949
log.Setup()
50-
setupLog := textlogger.NewLogger(textlogger.NewConfig()).WithName("setup")
50+
logger := textlogger.NewLogger(textlogger.NewConfig())
51+
setupLog := logger.WithName("setup")
5152

5253
profiler.Service()
53-
ctrl.SetLogger(textlogger.NewLogger(textlogger.NewConfig()))
54+
ctrl.SetLogger(logger)
5455

5556
setupLog.Info("starting manager")
5657
mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{
@@ -64,6 +65,7 @@ func main() {
6465
Controller: config.Controller{
6566
CacheSyncTimeout: cacheSyncTimeout,
6667
},
68+
Logger: logger.WithName("controller-manager"),
6769
})
6870
if err != nil {
6971
setupLog.Error(err, "starting manager")

cmd/reconciler-manager/main.go

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,11 @@ func main() {
6868
"Enabling this will ensure there is only one active controller manager.")
6969

7070
log.Setup()
71-
setupLog := textlogger.NewLogger(textlogger.NewConfig()).WithName("setup")
71+
logger := textlogger.NewLogger(textlogger.NewConfig())
72+
setupLog := logger.WithName("setup")
7273

7374
profiler.Service()
74-
ctrl.SetLogger(textlogger.NewLogger(textlogger.NewConfig()))
75+
ctrl.SetLogger(logger)
7576

7677
setupLog.Info(fmt.Sprintf("running with flags --cluster-name=%s; --reconciler-polling-period=%s; --hydration-polling-period=%s",
7778
*clusterName, *reconcilerPollingPeriod, *hydrationPollingPeriod))
@@ -85,6 +86,7 @@ func main() {
8586
}
8687

8788
mgr, err := ctrl.NewManager(cfg, ctrl.Options{
89+
Logger: logger.WithName("controller-manager"),
8890
Scheme: core.Scheme,
8991
MapperProvider: func(_ *rest.Config, _ *http.Client) (meta.RESTMapper, error) {
9092
return mapper, nil
@@ -114,7 +116,7 @@ func main() {
114116
watchFleetMembership := fleetMembershipCRDExists(dynamicClient, mapper, &setupLog)
115117

116118
crdController := &controllers.CRDController{}
117-
crdControllerLogger := textlogger.NewLogger(textlogger.NewConfig()).WithName("controllers").WithName("CRD")
119+
crdControllerLogger := logger.WithName("controllers").WithName("CRD")
118120
crdMetaController := controllers.NewCRDMetaController(crdController,
119121
mgr.GetCache(), mapper, crdControllerLogger)
120122
if err := crdMetaController.Register(mgr); err != nil {
@@ -126,7 +128,7 @@ func main() {
126128
repoSyncController := controllers.NewRepoSyncReconciler(*clusterName,
127129
*reconcilerPollingPeriod, *hydrationPollingPeriod,
128130
mgr.GetClient(), watcher, dynamicClient,
129-
textlogger.NewLogger(textlogger.NewConfig()).WithName("controllers").WithName(configsync.RepoSyncKind),
131+
logger.WithName("controllers").WithName(configsync.RepoSyncKind),
130132
mgr.GetScheme())
131133
crdController.SetReconciler(kinds.RepoSyncV1Beta1().GroupKind(), func(_ context.Context, crd *apiextensionsv1.CustomResourceDefinition) error {
132134
if customresource.IsEstablished(crd) {
@@ -144,7 +146,7 @@ func main() {
144146
rootSyncController := controllers.NewRootSyncReconciler(*clusterName,
145147
*reconcilerPollingPeriod, *hydrationPollingPeriod,
146148
mgr.GetClient(), watcher, dynamicClient,
147-
textlogger.NewLogger(textlogger.NewConfig()).WithName("controllers").WithName(configsync.RootSyncKind),
149+
logger.WithName("controllers").WithName(configsync.RootSyncKind),
148150
mgr.GetScheme())
149151
crdController.SetReconciler(kinds.RootSyncV1Beta1().GroupKind(), func(_ context.Context, crd *apiextensionsv1.CustomResourceDefinition) error {
150152
if customresource.IsEstablished(crd) {
@@ -164,7 +166,7 @@ func main() {
164166
}
165167

166168
otel := controllers.NewOtelReconciler(mgr.GetClient(),
167-
textlogger.NewLogger(textlogger.NewConfig()).WithName("controllers").WithName("Otel"),
169+
logger.WithName("controllers").WithName("Otel"),
168170
otelCredentialProvider)
169171
if err := otel.Register(mgr); err != nil {
170172
setupLog.Error(err, "failed to register controller", "controller", "Otel")
@@ -173,7 +175,7 @@ func main() {
173175
setupLog.Info("Otel controller registration successful")
174176

175177
otelSA := controllers.NewOtelSAReconciler(*clusterName, mgr.GetClient(),
176-
textlogger.NewLogger(textlogger.NewConfig()).WithName("controllers").WithName(controllers.OtelSALoggerName))
178+
logger.WithName("controllers").WithName(controllers.OtelSALoggerName))
177179
if err := otelSA.Register(mgr); err != nil {
178180
setupLog.Error(err, "failed to register controller", "controller", "OtelSA")
179181
os.Exit(1)

cmd/reconciler/main.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,8 @@ var flags = struct {
132132
func main() {
133133
log.Setup()
134134
profiler.Service()
135-
ctrl.SetLogger(textlogger.NewLogger(textlogger.NewConfig()))
135+
logger := textlogger.NewLogger(textlogger.NewConfig())
136+
ctrl.SetLogger(logger)
136137

137138
if *debug {
138139
status.EnablePanicOnMisuse()
@@ -183,6 +184,7 @@ func main() {
183184
}
184185

185186
opts := reconciler.Options{
187+
Logger: logger,
186188
ClusterName: *clusterName,
187189
FightDetectionThreshold: *fightDetectionThreshold,
188190
NumWorkers: *workers,

pkg/reconciler/reconciler.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@ import (
1919
"net/http"
2020
"time"
2121

22+
"github.com/go-logr/logr"
2223
"k8s.io/apimachinery/pkg/api/meta"
2324
"k8s.io/client-go/dynamic"
2425
"k8s.io/client-go/rest"
2526
"k8s.io/klog/v2"
26-
"k8s.io/klog/v2/textlogger"
2727
"k8s.io/utils/clock"
2828
"kpt.dev/configsync/pkg/api/configsync"
2929
"kpt.dev/configsync/pkg/applier"
@@ -56,6 +56,8 @@ import (
5656

5757
// Options contains the settings for a reconciler process.
5858
type Options struct {
59+
// Logger to be used by the controller-manager and controllers.
60+
Logger logr.Logger
5961
// ClusterName is the name of the cluster we are parsing configuration for.
6062
ClusterName string
6163
// FightDetectionThreshold is the rate of updates per minute to an API
@@ -326,8 +328,8 @@ func Run(opts Options) {
326328
signalCtx := signals.SetupSignalHandler()
327329

328330
// Create the ControllerManager
329-
ctrl.SetLogger(textlogger.NewLogger(textlogger.NewConfig()))
330331
mgrOptions := ctrl.Options{
332+
Logger: opts.Logger.WithName("controller-manager"),
331333
Scheme: core.Scheme,
332334
MapperProvider: func(_ *rest.Config, _ *http.Client) (meta.RESTMapper, error) {
333335
return mapper, nil
@@ -350,7 +352,7 @@ func Run(opts Options) {
350352
klog.Fatalf("Instantiating Controller Manager: %v", err)
351353
}
352354

353-
crdControllerLogger := textlogger.NewLogger(textlogger.NewConfig()).WithName("controllers").WithName("CRD")
355+
crdControllerLogger := opts.Logger.WithName("controllers").WithName("CRD")
354356
crdMetaController := controllers.NewCRDMetaController(crdController,
355357
mgr.GetCache(), mapper, crdControllerLogger)
356358
if err := crdMetaController.Register(mgr); err != nil {

pkg/reconcilermanager/controllers/crd_controller.go

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ func (s *CRDController) getReconciler(gk schema.GroupKind) CRDReconcileFunc {
9494

9595
// CRDMetaController watches CRDs and delegates reconciliation to a CRDControllerManager.
9696
type CRDMetaController struct {
97-
loggingController
97+
*LoggingController
9898
cache cache.Cache
9999
mapper utilwatch.ResettableRESTMapper
100100
delegate *CRDController
@@ -111,9 +111,7 @@ func NewCRDMetaController(
111111
log logr.Logger,
112112
) *CRDMetaController {
113113
return &CRDMetaController{
114-
loggingController: loggingController{
115-
log: log,
116-
},
114+
LoggingController: NewLoggingController(log),
117115
cache: cache,
118116
mapper: mapper,
119117
delegate: delegate,
@@ -128,7 +126,7 @@ func NewCRDMetaController(
128126
// resources by calling Reset on the RESTMapper, as needed.
129127
func (r *CRDMetaController) Reconcile(ctx context.Context, req reconcile.Request) (reconcile.Result, error) {
130128
crdName := req.Name
131-
ctx = r.setLoggerValues(ctx, "crd", crdName)
129+
ctx = r.SetLoggerValues(ctx, "crd", crdName)
132130

133131
// Established if CRD exists and .status.conditions[type="Established"].status = "True"
134132
var kind schema.GroupKind
@@ -167,7 +165,7 @@ func (r *CRDMetaController) Reconcile(ctx context.Context, req reconcile.Request
167165
r.observedResources[resource] = kind
168166
}
169167

170-
r.logger(ctx).Info("CRDMetaController handling CRD status update", "name", crdName)
168+
r.Logger(ctx).V(3).Info("CRDMetaController handling CRD status update", "name", crdName)
171169

172170
if customresource.IsEstablished(crdObj) {
173171
if err := discoverResourceForKind(r.mapper, kind); err != nil {
@@ -186,7 +184,7 @@ func (r *CRDMetaController) Reconcile(ctx context.Context, req reconcile.Request
186184
return reconcile.Result{}, err
187185
}
188186

189-
r.logger(ctx).V(3).Info("CRDMetaController handled CRD status update", "name", crdName)
187+
r.Logger(ctx).V(3).Info("CRDMetaController handled CRD status update", "name", crdName)
190188

191189
return reconcile.Result{}, nil
192190
}

pkg/reconcilermanager/controllers/garbage_collector.go

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ func (r *reconcilerBase) cleanup(ctx context.Context, obj client.Object) error {
6363
uObj.SetName(id.Name)
6464
uObj.SetNamespace(id.Namespace)
6565
uObj.SetGroupVersionKind(gvk)
66-
r.logger(ctx).Info("Deleting managed object",
66+
r.Logger(ctx).V(3).Info("Deleting managed object",
6767
logFieldObjectRef, id.ObjectKey.String(),
6868
logFieldObjectKind, id.Kind)
6969
err = watch.DeleteAndWait(ctx, r.watcher, uObj, deleteWaitTimeout)
@@ -86,7 +86,7 @@ func (r *reconcilerBase) cleanup(ctx context.Context, obj client.Object) error {
8686
// If not a timeout, assume the delete failed.
8787
return NewObjectOperationErrorWithID(err, id, OperationDelete)
8888
}
89-
r.logger(ctx).Info("Managed object delete successful",
89+
r.Logger(ctx).Info("Deleting managed object successful",
9090
logFieldObjectRef, id.ObjectKey.String(),
9191
logFieldObjectKind, id.Kind)
9292
return nil
@@ -152,7 +152,7 @@ func (r *RepoSyncReconciler) deleteSharedRoleBinding(ctx context.Context, reconc
152152
if err := r.client.Get(ctx, rbKey, rb); err != nil {
153153
if apierrors.IsNotFound(err) {
154154
// already deleted
155-
r.logger(ctx).Info("Managed object already deleted",
155+
r.Logger(ctx).V(3).Info("Managed object already deleted",
156156
logFieldObjectRef, rbKey.String(),
157157
logFieldObjectKind, "RoleBinding")
158158
return nil
@@ -169,9 +169,15 @@ func (r *RepoSyncReconciler) deleteSharedRoleBinding(ctx context.Context, reconc
169169
// Delete the whole RB
170170
return r.cleanup(ctx, rb)
171171
}
172+
r.Logger(ctx).V(3).Info("Updating managed object",
173+
logFieldObjectRef, rbKey.String(),
174+
logFieldObjectKind, "RoleBinding")
172175
if err := r.client.Update(ctx, rb, client.FieldOwner(reconcilermanager.FieldManager)); err != nil {
173176
return NewObjectOperationError(err, rb, OperationUpdate)
174177
}
178+
r.Logger(ctx).Info("Updating managed object successful",
179+
logFieldObjectRef, rbKey.String(),
180+
logFieldObjectKind, "RoleBinding")
175181
return nil
176182
}
177183

@@ -244,7 +250,7 @@ func (r *reconcilerBase) deleteSharedClusterRoleBinding(ctx context.Context, nam
244250
if err := r.client.Get(ctx, crbKey, crb); err != nil {
245251
if apierrors.IsNotFound(err) {
246252
// already deleted
247-
r.logger(ctx).Info("Managed object already deleted",
253+
r.Logger(ctx).V(3).Info("Managed object already deleted",
248254
logFieldObjectRef, crbKey.String(),
249255
logFieldObjectKind, "ClusterRoleBinding")
250256
return nil
@@ -261,8 +267,14 @@ func (r *reconcilerBase) deleteSharedClusterRoleBinding(ctx context.Context, nam
261267
// No change
262268
return nil
263269
}
270+
r.Logger(ctx).V(3).Info("Updating managed object",
271+
logFieldObjectRef, crbKey.String(),
272+
logFieldObjectKind, "ClusterRoleBinding")
264273
if err := r.client.Update(ctx, crb, client.FieldOwner(reconcilermanager.FieldManager)); err != nil {
265274
return NewObjectOperationError(err, crb, OperationUpdate)
266275
}
276+
r.Logger(ctx).Info("Updating managed object successful",
277+
logFieldObjectRef, crbKey.String(),
278+
logFieldObjectKind, "ClusterRoleBinding")
267279
return nil
268280
}

pkg/reconcilermanager/controllers/helm_value_files.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,9 @@ func (r *RepoSyncReconciler) upsertHelmConfigMap(ctx context.Context, cmsCMRef,
136136
cmsConfigMap.Name = cmsCMRef.Name
137137
cmsConfigMap.Namespace = cmsCMRef.Namespace
138138

139+
r.Logger(ctx).V(3).Info("Upserting managed object",
140+
logFieldObjectRef, cmsCMRef.String(),
141+
logFieldObjectKind, "ConfigMap")
139142
op, err := CreateOrUpdate(ctx, r.client, cmsConfigMap, func() error {
140143
// TODO: Eventually remove the annotations and use the labels for list filtering, to optimize cleanup.
141144
// We can't remove the annotations until v1.16.0 is no longer supported.
@@ -156,7 +159,7 @@ func (r *RepoSyncReconciler) upsertHelmConfigMap(ctx context.Context, cmsCMRef,
156159
return op, err
157160
}
158161
if op != controllerutil.OperationResultNone {
159-
r.logger(ctx).Info("Managed object upsert successful",
162+
r.Logger(ctx).Info("Upserting managed object successful",
160163
logFieldObjectRef, cmsCMRef.String(),
161164
logFieldObjectKind, "ConfigMap",
162165
logFieldOperation, op)

pkg/reconcilermanager/controllers/logger.go renamed to pkg/reconcilermanager/controllers/logging_controller.go

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -33,28 +33,35 @@ func (c contextKey) String() string {
3333
// values, in the context.Context.
3434
const contextKeyLogger = contextKey("logger")
3535

36-
// loggingController is a parent class for a controller that logs.
36+
// LoggingController is a parent class for a controller that logs.
3737
// The logger can be stored in the context with contextual values.
3838
//
3939
// Use lc.logger(ctx) to retrieve the logger.
4040
// Use ctx = lc.setLoggerValues(ctx, key, value) to add key/value pairs.
41-
type loggingController struct {
41+
type LoggingController struct {
4242
log logr.Logger
4343
}
4444

45-
// logger returns a logr.Logger, either from the context or from
45+
// NewLoggingController constructs a new LoggingController
46+
func NewLoggingController(log logr.Logger) *LoggingController {
47+
return &LoggingController{
48+
log: log,
49+
}
50+
}
51+
52+
// Logger returns a logr.Logger, either from the context or from
4653
// reconcilerBase.log.
47-
func (lc *loggingController) logger(ctx context.Context) logr.Logger {
54+
func (lc *LoggingController) Logger(ctx context.Context) logr.Logger {
4855
logger := ctx.Value(contextKeyLogger)
4956
if logger != nil {
5057
return logger.(logr.Logger)
5158
}
5259
return lc.log
5360
}
5461

55-
// setLoggerValues sets key/value pairs on the logger stored in the context.
62+
// SetLoggerValues sets key/value pairs on the logger stored in the context.
5663
// If not initially present, the default logger is added to the context.
5764
// See logr.Logger.WithValues for more details about how values work.
58-
func (lc *loggingController) setLoggerValues(ctx context.Context, keysAndValues ...interface{}) context.Context {
59-
return context.WithValue(ctx, contextKeyLogger, lc.logger(ctx).WithValues(keysAndValues...))
65+
func (lc *LoggingController) SetLoggerValues(ctx context.Context, keysAndValues ...interface{}) context.Context {
66+
return context.WithValue(ctx, contextKeyLogger, lc.Logger(ctx).WithValues(keysAndValues...))
6067
}

pkg/reconcilermanager/controllers/otel_base_controller.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import (
2727

2828
// otelBaseController implements common functionality for otel controllers.
2929
type otelBaseController struct {
30-
loggingController
30+
*LoggingController
3131

3232
client client.Client
3333
}
@@ -52,7 +52,7 @@ func (r *otelBaseController) updateDeploymentAnnotation(ctx context.Context, ann
5252
return nil
5353
}
5454

55-
r.logger(ctx).V(3).Info("Patching object",
55+
r.Logger(ctx).V(3).Info("Patching object",
5656
logFieldObjectRef, key.String(),
5757
logFieldObjectKind, "Deployment",
5858
annotationKey, annotationValue)
@@ -61,7 +61,7 @@ func (r *otelBaseController) updateDeploymentAnnotation(ctx context.Context, ann
6161
if err != nil {
6262
return status.APIServerErrorf(err, "failed to patch Deployment: %s", key)
6363
}
64-
r.logger(ctx).Info("Patching object successful",
64+
r.Logger(ctx).Info("Patching object successful",
6565
logFieldObjectRef, key.String(),
6666
logFieldObjectKind, "Deployment",
6767
annotationKey, annotationValue)

0 commit comments

Comments
 (0)