Skip to content

Commit f5bd07e

Browse files
committed
Don't use builtin log package or glog
We should be consistenly using logr instead of the go standard library, or glog (when in our code -- we don't have any control over code from kubernetes core). Most of this usage was `log.Fatal`, which we replace with calls to `<log>.Error` and `os.Exit(1)`.
1 parent f58406d commit f5bd07e

File tree

10 files changed

+98
-65
lines changed

10 files changed

+98
-65
lines changed

pkg/admission/cert/writer/certwriter.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ import (
2323
"encoding/pem"
2424
"errors"
2525
"fmt"
26-
"log"
2726
"net/url"
2827
"time"
2928

@@ -101,7 +100,7 @@ func handleCommon(webhook *admissionregistrationv1beta1.Webhook, ch certReadWrit
101100
// Recreate the cert if it's invalid.
102101
valid := validCert(certs, dnsName)
103102
if !valid {
104-
log.Printf("cert is invalid or expiring, regenerating a new one")
103+
log.Info("cert is invalid or expiring, regenerating a new one")
105104
certs, err = ch.overwrite(webhook.Name)
106105
if err != nil {
107106
return err

pkg/admission/cert/writer/doc.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,3 +81,9 @@ the desired path.
8181
8282
*/
8383
package writer
84+
85+
import (
86+
logf "sigs.k8s.io/controller-runtime/pkg/runtime/log"
87+
)
88+
89+
var log = logf.KBLog.WithName("admission").WithName("cert").WithName("writer")

pkg/admission/cert/writer/fs.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import (
2020
"errors"
2121
"fmt"
2222
"io/ioutil"
23-
"log"
2423
"os"
2524
"path"
2625
"strings"
@@ -148,7 +147,7 @@ func (f *fsCertWriter) doWrite(webhookName string) (*certgenerator.Artifacts, er
148147
if err != nil {
149148
return nil, err
150149
}
151-
aw, err := atomic.NewAtomicWriter(v.path, fmt.Sprintf("processing webhook %q", webhookName))
150+
aw, err := atomic.NewAtomicWriter(v.path, log.WithName("atomic-writer").WithValues("task", "processing webhook", "webhook", webhookName))
152151
if err != nil {
153152
return nil, err
154153
}
@@ -168,14 +167,14 @@ func prepareToWrite(dir string) {
168167
if os.IsNotExist(err) {
169168
continue
170169
} else if err != nil {
171-
log.Printf("error stat file %v: %v", abspath, err)
170+
log.Error(err, "unable to stat file", "file", abspath)
172171
}
173172
_, err = os.Readlink(abspath)
174173
// if it's not a symbolic link
175174
if err != nil {
176175
err = os.Remove(abspath)
177176
if err != nil {
178-
log.Printf("failed to remove old file: %v", abspath)
177+
log.Error(err, "unable to remove old file", "file", abspath)
179178
}
180179
}
181180
}

pkg/admission/cert/writer/internal/atomic/atomic_writer.go

Lines changed: 28 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,7 @@ import (
2727
"strings"
2828
"time"
2929

30-
"github.com/golang/glog"
31-
30+
"github.com/go-logr/logr"
3231
"k8s.io/apimachinery/pkg/util/sets"
3332
)
3433

@@ -57,8 +56,8 @@ const (
5756
// inotify or fanotify to receive events when the content in the volume is
5857
// updated.
5958
type AtomicWriter struct {
60-
targetDir string
61-
logContext string
59+
targetDir string
60+
log logr.Logger
6261
}
6362

6463
type FileProjection struct {
@@ -68,13 +67,13 @@ type FileProjection struct {
6867

6968
// NewAtomicWriter creates a new AtomicWriter configured to write to the given
7069
// target directory, or returns an error if the target directory does not exist.
71-
func NewAtomicWriter(targetDir string, logContext string) (*AtomicWriter, error) {
70+
func NewAtomicWriter(targetDir string, log logr.Logger) (*AtomicWriter, error) {
7271
_, err := os.Stat(targetDir)
7372
if os.IsNotExist(err) {
7473
return nil, err
7574
}
7675

77-
return &AtomicWriter{targetDir: targetDir, logContext: logContext}, nil
76+
return &AtomicWriter{targetDir: targetDir, log: log}, nil
7877
}
7978

8079
const (
@@ -120,7 +119,7 @@ func (w *AtomicWriter) Write(payload map[string]FileProjection) error {
120119
// (1)
121120
cleanPayload, err := validatePayload(payload)
122121
if err != nil {
123-
glog.Errorf("%s: invalid payload: %v", w.logContext, err)
122+
w.log.Error(err, "invalid payload")
124123
return err
125124
}
126125

@@ -129,7 +128,7 @@ func (w *AtomicWriter) Write(payload map[string]FileProjection) error {
129128
oldTsDir, err := os.Readlink(dataDirPath)
130129
if err != nil {
131130
if !os.IsNotExist(err) {
132-
glog.Errorf("%s: error reading link for data directory: %v", w.logContext, err)
131+
w.log.Error(err, "unable to read link for data directory")
133132
return err
134133
}
135134
// although Readlink() returns "" on err, don't be fragile by relying on it (since it's not specified in docs)
@@ -144,49 +143,49 @@ func (w *AtomicWriter) Write(payload map[string]FileProjection) error {
144143
// (3)
145144
pathsToRemove, err = w.pathsToRemove(cleanPayload, oldTsPath)
146145
if err != nil {
147-
glog.Errorf("%s: error determining user-visible files to remove: %v", w.logContext, err)
146+
w.log.Error(err, "unable to determine user-visible files to remove")
148147
return err
149148
}
150149

151150
// (4)
152151
if should, err := shouldWritePayload(cleanPayload, oldTsPath); err != nil {
153-
glog.Errorf("%s: error determining whether payload should be written to disk: %v", w.logContext, err)
152+
w.log.Error(err, "unable to determine whether payload should be written to disk")
154153
return err
155154
} else if !should && len(pathsToRemove) == 0 {
156-
glog.V(4).Infof("%s: no update required for target directory %v", w.logContext, w.targetDir)
155+
w.log.V(1).Info("no update required for target directory", "directory", w.targetDir)
157156
return nil
158157
} else {
159-
glog.V(4).Infof("%s: write required for target directory %v", w.logContext, w.targetDir)
158+
w.log.V(1).Info("write required for target directory", "directory", w.targetDir)
160159
}
161160
}
162161

163162
// (5)
164163
tsDir, err := w.newTimestampDir()
165164
if err != nil {
166-
glog.V(4).Infof("%s: error creating new ts data directory: %v", w.logContext, err)
165+
w.log.Error(err, "error creating new ts data directory")
167166
return err
168167
}
169168
tsDirName := filepath.Base(tsDir)
170169

171170
// (6)
172171
if err = w.writePayloadToDir(cleanPayload, tsDir); err != nil {
173-
glog.Errorf("%s: error writing payload to ts data directory %s: %v", w.logContext, tsDir, err)
172+
w.log.Error(err, "unable to write payload to ts data directory", "ts directory", tsDir)
174173
return err
175174
} else {
176-
glog.V(4).Infof("%s: performed write of new data to ts data directory: %s", w.logContext, tsDir)
175+
w.log.V(1).Info("performed write of new data to ts data directory", "ts directory", tsDir)
177176
}
178177

179178
// (7)
180179
if err = w.createUserVisibleFiles(cleanPayload); err != nil {
181-
glog.Errorf("%s: error creating visible symlinks in %s: %v", w.logContext, w.targetDir, err)
180+
w.log.Error(err, "unable to create visible symlinks in target directory", "target directory", w.targetDir)
182181
return err
183182
}
184183

185184
// (8)
186185
newDataDirPath := path.Join(w.targetDir, newDataDirName)
187186
if err = os.Symlink(tsDirName, newDataDirPath); err != nil {
188187
os.RemoveAll(tsDir)
189-
glog.Errorf("%s: error creating symbolic link for atomic update: %v", w.logContext, err)
188+
w.log.Error(err, "unable to create symbolic link for atomic update")
190189
return err
191190
}
192191

@@ -201,20 +200,20 @@ func (w *AtomicWriter) Write(payload map[string]FileProjection) error {
201200
if err != nil {
202201
os.Remove(newDataDirPath)
203202
os.RemoveAll(tsDir)
204-
glog.Errorf("%s: error renaming symbolic link for data directory %s: %v", w.logContext, newDataDirPath, err)
203+
w.log.Error(err, "unable to rename symbolic link for data directory", "data directory", newDataDirPath)
205204
return err
206205
}
207206

208207
// (10)
209208
if err = w.removeUserVisiblePaths(pathsToRemove); err != nil {
210-
glog.Errorf("%s: error removing old visible symlinks: %v", w.logContext, err)
209+
w.log.Error(err, "unable to remove old visible symlinks")
211210
return err
212211
}
213212

214213
// (11)
215214
if len(oldTsDir) > 0 {
216215
if err = os.RemoveAll(oldTsPath); err != nil {
217-
glog.Errorf("%s: error removing old data directory %s: %v", w.logContext, oldTsDir, err)
216+
w.log.Error(err, "unable to remove old data directory", "data directory", oldTsDir)
218217
return err
219218
}
220219
}
@@ -329,7 +328,7 @@ func (w *AtomicWriter) pathsToRemove(payload map[string]FileProjection, oldTsDir
329328
} else if err != nil {
330329
return nil, err
331330
}
332-
glog.V(5).Infof("%s: current paths: %+v", w.targetDir, paths.List())
331+
w.log.V(1).Info("current paths", "target directory", w.targetDir, "paths", paths.List())
333332

334333
newPaths := sets.NewString()
335334
for file := range payload {
@@ -341,10 +340,10 @@ func (w *AtomicWriter) pathsToRemove(payload map[string]FileProjection, oldTsDir
341340
subPath = strings.TrimSuffix(subPath, string(os.PathSeparator))
342341
}
343342
}
344-
glog.V(5).Infof("%s: new paths: %+v", w.targetDir, newPaths.List())
343+
w.log.V(1).Info("new paths", "target directory", w.targetDir, "paths", newPaths.List())
345344

346345
result := paths.Difference(newPaths)
347-
glog.V(5).Infof("%s: paths to remove: %+v", w.targetDir, result)
346+
w.log.V(1).Info("paths to remove", "target directory", w.targetDir, "paths", result)
348347

349348
return result, nil
350349
}
@@ -353,7 +352,7 @@ func (w *AtomicWriter) pathsToRemove(payload map[string]FileProjection, oldTsDir
353352
func (w *AtomicWriter) newTimestampDir() (string, error) {
354353
tsDir, err := ioutil.TempDir(w.targetDir, time.Now().UTC().Format("..2006_01_02_15_04_05."))
355354
if err != nil {
356-
glog.Errorf("%s: unable to create new temp directory: %v", w.logContext, err)
355+
w.log.Error(err, "unable to create new temp directory")
357356
return "", err
358357
}
359358

@@ -362,7 +361,7 @@ func (w *AtomicWriter) newTimestampDir() (string, error) {
362361
// regardless of the process' umask.
363362
err = os.Chmod(tsDir, 0755)
364363
if err != nil {
365-
glog.Errorf("%s: unable to set mode on new temp directory: %v", w.logContext, err)
364+
w.log.Error(err, "unable to set mode on new temp directory")
366365
return "", err
367366
}
368367

@@ -380,13 +379,13 @@ func (w *AtomicWriter) writePayloadToDir(payload map[string]FileProjection, dir
380379

381380
err := os.MkdirAll(baseDir, os.ModePerm)
382381
if err != nil {
383-
glog.Errorf("%s: unable to create directory %s: %v", w.logContext, baseDir, err)
382+
w.log.Error(err, "unable to create directory", "directory", baseDir)
384383
return err
385384
}
386385

387386
err = ioutil.WriteFile(fullPath, content, mode)
388387
if err != nil {
389-
glog.Errorf("%s: unable to write file %s with mode %v: %v", w.logContext, fullPath, mode, err)
388+
w.log.Error(err, "unable to write file", "file", fullPath, "mode", mode)
390389
return err
391390
}
392391
// Chmod is needed because ioutil.WriteFile() ends up calling
@@ -395,7 +394,7 @@ func (w *AtomicWriter) writePayloadToDir(payload map[string]FileProjection, dir
395394
// in the file no matter what the umask is.
396395
err = os.Chmod(fullPath, mode)
397396
if err != nil {
398-
glog.Errorf("%s: unable to write file %s with mode %v: %v", w.logContext, fullPath, mode, err)
397+
w.log.Error(err, "unable to write file", "file", fullPath, "mode", mode)
399398
}
400399
}
401400

@@ -445,7 +444,7 @@ func (w *AtomicWriter) removeUserVisiblePaths(paths sets.String) error {
445444
continue
446445
}
447446
if err := os.Remove(path.Join(w.targetDir, p)); err != nil {
448-
glog.Errorf("%s: error pruning old user-visible path %s: %v", w.logContext, p, err)
447+
w.log.Error(err, "unable to prune old user-visible path", "path", p)
449448
lasterr = err
450449
}
451450
}

pkg/admission/cert/writer/internal/atomic/atomic_writer_test.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import (
3030

3131
"k8s.io/apimachinery/pkg/util/sets"
3232
utiltesting "k8s.io/client-go/util/testing"
33+
log "github.com/go-logr/logr/testing"
3334
)
3435

3536
func TestNewAtomicWriter(t *testing.T) {
@@ -39,7 +40,7 @@ func TestNewAtomicWriter(t *testing.T) {
3940
}
4041
defer os.RemoveAll(targetDir)
4142

42-
_, err = NewAtomicWriter(targetDir, "-test-")
43+
_, err = NewAtomicWriter(targetDir, log.TestLogger{T: t})
4344
if err != nil {
4445
t.Fatalf("unexpected error creating writer for existing target dir: %v", err)
4546
}
@@ -53,7 +54,7 @@ func TestNewAtomicWriter(t *testing.T) {
5354
t.Fatalf("unexpected error ensuring dir %v does not exist: %v", nonExistentDir, err)
5455
}
5556

56-
_, err = NewAtomicWriter(nonExistentDir, "-test-")
57+
_, err = NewAtomicWriter(nonExistentDir, log.TestLogger{T: t})
5758
if err == nil {
5859
t.Fatalf("unexpected success creating writer for nonexistent target dir: %v", err)
5960
}
@@ -228,7 +229,7 @@ func TestPathsToRemove(t *testing.T) {
228229
}
229230
defer os.RemoveAll(targetDir)
230231

231-
writer := &AtomicWriter{targetDir: targetDir, logContext: "-test-"}
232+
writer := &AtomicWriter{targetDir: targetDir, log: log.TestLogger{T: t}}
232233
err = writer.Write(tc.payload1)
233234
if err != nil {
234235
t.Errorf("%v: unexpected error writing: %v", tc.name, err)
@@ -396,7 +397,7 @@ IAAAAAAAsDyZDwU=`
396397
}
397398
defer os.RemoveAll(targetDir)
398399

399-
writer := &AtomicWriter{targetDir: targetDir, logContext: "-test-"}
400+
writer := &AtomicWriter{targetDir: targetDir, log: log.TestLogger{T: t}}
400401
err = writer.Write(tc.payload)
401402
if err != nil && tc.success {
402403
t.Errorf("%v: unexpected error writing payload: %v", tc.name, err)
@@ -572,7 +573,7 @@ func TestUpdate(t *testing.T) {
572573
}
573574
defer os.RemoveAll(targetDir)
574575

575-
writer := &AtomicWriter{targetDir: targetDir, logContext: "-test-"}
576+
writer := &AtomicWriter{targetDir: targetDir, log: log.TestLogger{T: t}}
576577

577578
err = writer.Write(tc.first)
578579
if err != nil {
@@ -740,7 +741,7 @@ func TestMultipleUpdates(t *testing.T) {
740741
}
741742
defer os.RemoveAll(targetDir)
742743

743-
writer := &AtomicWriter{targetDir: targetDir, logContext: "-test-"}
744+
writer := &AtomicWriter{targetDir: targetDir, log: log.TestLogger{T: t}}
744745

745746
for _, payload := range tc.payloads {
746747
writer.Write(payload)
@@ -959,7 +960,7 @@ func TestCreateUserVisibleFiles(t *testing.T) {
959960
t.Fatalf("%v: unexpected error creating data path: %v", tc.name, err)
960961
}
961962

962-
writer := &AtomicWriter{targetDir: targetDir, logContext: "-test-"}
963+
writer := &AtomicWriter{targetDir: targetDir, log: log.TestLogger{T: t}}
963964
payload, err := validatePayload(tc.payload)
964965
if err != nil {
965966
t.Fatalf("%v: unexpected error validating payload: %v", tc.name, err)

pkg/builder/example_test.go

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,20 @@ package builder_test
1919
import (
2020
"context"
2121
"fmt"
22-
"log"
22+
"os"
2323

2424
appsv1 "k8s.io/api/apps/v1"
2525
corev1 "k8s.io/api/core/v1"
2626
"sigs.k8s.io/controller-runtime/pkg/builder"
2727
"sigs.k8s.io/controller-runtime/pkg/client"
2828
"sigs.k8s.io/controller-runtime/pkg/reconcile"
29+
logf "sigs.k8s.io/controller-runtime/pkg/runtime/log"
2930
"sigs.k8s.io/controller-runtime/pkg/runtime/signals"
3031
)
3132

33+
// NB: don't call SetLogger in init(), or else you'll mess up logging in the main suite.
34+
var log = logf.Log.WithName("builder-examples")
35+
3236
// This example creates a simple application Controller that is configured for ReplicaSets and Pods.
3337
//
3438
// * Create a new application for ReplicaSets that manages Pods owned by the ReplicaSet and calls into
@@ -41,10 +45,14 @@ func ExampleBuilder() {
4145
Owns(&corev1.Pod{}). // ReplicaSet owns Pods created by it
4246
Build(&ReplicaSetReconciler{}) // Build
4347
if err != nil {
44-
log.Fatal(err)
48+
log.Error(err, "Unable to build controller")
49+
os.Exit(1)
4550
}
4651

47-
log.Fatal(rs.Start(signals.SetupSignalHandler()))
52+
if err := rs.Start(signals.SetupSignalHandler()); err != nil {
53+
log.Error(err, "Unable to run controller")
54+
os.Exit(1)
55+
}
4856
}
4957

5058
// ReplicaSetReconciler is a simple Controller example implementation.

0 commit comments

Comments
 (0)