Skip to content

Commit d5dc7a0

Browse files
bencurrerburgessprydie
authored andcommitted
Replace log pkg with zap (#281)
1 parent 01f65eb commit d5dc7a0

File tree

11 files changed

+269
-212
lines changed

11 files changed

+269
-212
lines changed

cmd/oci-flexvolume-driver/main.go

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,13 @@ package main
1616

1717
import (
1818
"fmt"
19-
"log"
2019
"os"
2120

2221
"github.com/oracle/oci-cloud-controller-manager/pkg/flexvolume"
2322
"github.com/oracle/oci-cloud-controller-manager/pkg/flexvolume/block"
23+
"github.com/oracle/oci-cloud-controller-manager/pkg/logging"
24+
25+
"go.uber.org/zap"
2426
)
2527

2628
// version/build is set at build time to the version of the driver being built.
@@ -37,24 +39,22 @@ func GetLogPath() string {
3739
}
3840

3941
func main() {
40-
// TODO: Maybe use sirupsen/logrus?
41-
f, err := os.OpenFile(GetLogPath(), os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
42-
if err != nil {
43-
fmt.Fprintf(os.Stderr, "error opening log file: %v", err)
44-
os.Exit(1)
45-
}
46-
defer f.Close()
47-
48-
log.SetPrefix(fmt.Sprintf("%d ", os.Getpid()))
49-
50-
log.SetOutput(f)
42+
l := logging.FileLogger(GetLogPath())
43+
defer l.Sync()
44+
zap.ReplaceGlobals(l)
45+
logger := l.Sugar()
46+
logger = logger.With(
47+
"pid", os.Getpid(),
48+
"version", version,
49+
"build", build,
50+
)
51+
logger.Debug("OCI Flexvolume driver")
52+
d, err := block.NewOCIFlexvolumeDriver(logger)
5153

52-
log.Printf("OCI FlexVolume Driver version: %s (%s)", version, build)
53-
d, err := block.NewOCIFlexvolumeDriver()
5454
if err != nil {
5555
fmt.Fprintf(os.Stderr, "error creating new driver: %v", err)
56-
log.Printf("error creating new driver: %v", err)
56+
logger.With(zap.Error(err)).Error("Error creating new driver")
5757
os.Exit(1)
5858
}
59-
flexvolume.ExecDriver(d, os.Args)
59+
flexvolume.ExecDriver(logger, d, os.Args)
6060
}

pkg/flexvolume/block/driver.go

Lines changed: 59 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import (
1818
"context"
1919
"errors"
2020
"fmt"
21-
"log"
2221
"os"
2322
"path/filepath"
2423
"strings"
@@ -49,7 +48,7 @@ type OCIFlexvolumeDriver struct {
4948
}
5049

5150
// NewOCIFlexvolumeDriver creates a new driver
52-
func NewOCIFlexvolumeDriver() (fvd *OCIFlexvolumeDriver, err error) {
51+
func NewOCIFlexvolumeDriver(logger *zap.SugaredLogger) (fvd *OCIFlexvolumeDriver, err error) {
5352
defer func() {
5453
if e := recover(); e != nil {
5554
fvd = nil
@@ -65,7 +64,7 @@ func NewOCIFlexvolumeDriver() (fvd *OCIFlexvolumeDriver, err error) {
6564
}
6665
return &OCIFlexvolumeDriver{K: k, master: true}, nil
6766
} else if os.IsNotExist(err) {
68-
log.Printf("Config file %q does not exist. Assuming worker node.", path)
67+
logger.With(zap.Error(err), "path", path).Error("Config file does not exist. Assuming worker node.")
6968
return &OCIFlexvolumeDriver{}, nil
7069
}
7170
return nil, err
@@ -135,27 +134,27 @@ func newClient(config *Config) (client.Interface, error) {
135134

136135
// Init checks that we have the appropriate credentials and metadata API access
137136
// on driver initialisation.
138-
func (d OCIFlexvolumeDriver) Init() flexvolume.DriverStatus {
137+
func (d OCIFlexvolumeDriver) Init(logger *zap.SugaredLogger) flexvolume.DriverStatus {
139138
path := GetConfigPath()
140139
if d.master {
141140
config, err := ConfigFromFile(path)
142141
if err != nil {
143-
return flexvolume.Fail(err)
142+
return flexvolume.Fail(logger, err)
144143
}
145144
_, err = newClient(config)
146145
if err != nil {
147-
return flexvolume.Fail(err)
146+
return flexvolume.Fail(logger, err)
148147
}
149148

150149
_, err = constructKubeClient()
151150
if err != nil {
152-
return flexvolume.Fail(err)
151+
return flexvolume.Fail(logger, err)
153152
}
154153
} else {
155-
log.Printf("Assuming worker node.")
154+
logger.Debug("Assuming worker node.")
156155
}
157156

158-
return flexvolume.Succeed()
157+
return flexvolume.Succeed(zap.New(nil).Sugar())
159158
}
160159

161160
// deriveVolumeOCID will expand a partial OCID to a full OCID
@@ -193,66 +192,65 @@ func lookupNodeID(k kubernetes.Interface, nodeName string) (string, error) {
193192

194193
// Attach initiates the attachment of the given OCI volume to the k8s worker
195194
// node.
196-
func (d OCIFlexvolumeDriver) Attach(opts flexvolume.Options, nodeName string) flexvolume.DriverStatus {
195+
func (d OCIFlexvolumeDriver) Attach(logger *zap.SugaredLogger, opts flexvolume.Options, nodeName string) flexvolume.DriverStatus {
197196
config, err := ConfigFromFile(GetConfigPath())
198197
if err != nil {
199-
return flexvolume.Fail(err)
198+
return flexvolume.Fail(logger, err)
200199
}
201200

202201
c, err := newClient(config)
203202
if err != nil {
204-
return flexvolume.Fail(err)
203+
return flexvolume.Fail(logger, err)
205204
}
206205

207206
id, err := lookupNodeID(d.K, nodeName)
208207
if err != nil {
209-
return flexvolume.Fail("failed to look up node id: ", err)
208+
return flexvolume.Fail(logger, "Failed to look up node id: ", err)
210209
}
211210

212211
// Handle possible oci:// prefix.
213212
id, err = ociprovider.MapProviderIDToInstanceID(id)
214213
if err != nil {
215-
return flexvolume.Fail("failed to map nodes provider id to instance id: ", err)
214+
return flexvolume.Fail(logger, "Failed to map nodes provider id to instance id: ", err)
216215
}
217216

218217
ctx := context.Background()
219218

220219
instance, err := c.Compute().GetInstance(ctx, id)
221220
if err != nil {
222-
return flexvolume.Fail("failed to get instance: ", err)
221+
return flexvolume.Fail(logger, "Failed to get instance: ", err)
223222
}
224223

225224
volumeOCID := deriveVolumeOCID(config.Auth.RegionKey, opts["kubernetes.io/pvOrVolumeName"])
226225

227-
log.Printf("Attaching volume %s -> instance %s", volumeOCID, *instance.Id)
226+
logger.With("volumeID", volumeOCID, "instanceID", *instance.Id).Info("Attaching volume to instance")
228227

229228
attachment, err := c.Compute().AttachVolume(ctx, *instance.Id, volumeOCID)
230229
if err != nil {
231230
if !client.IsConflict(err) {
232-
log.Printf("AttachVolume: %+v", err)
233-
return flexvolume.Fail("failed to attach volume: ", err)
231+
return flexvolume.Fail(logger, "Failed to attach volume: ", err)
234232
}
235233
// If we get a 409 conflict response when attaching we
236234
// presume that the device is already attached.
237-
log.Printf("Attach(): Volume %q already attached.", volumeOCID)
235+
logger.With("volumeID", volumeOCID).Info("Volume already attached.")
238236
attachment, err = c.Compute().FindVolumeAttachment(ctx, config.Auth.CompartmentID, volumeOCID)
239237
if err != nil {
240-
return flexvolume.Fail("failed to find volume attachment: ", err)
238+
return flexvolume.Fail(logger, "Failed to find volume attachment: ", err)
241239
}
242240
if *attachment.GetInstanceId() != *instance.Id {
243-
return flexvolume.Fail("Already attached to anoter instance: ", *instance.Id)
241+
return flexvolume.Fail(logger, "Already attached to anoter instance: ", *instance.Id)
244242
}
245243
}
246244

247245
attachment, err = c.Compute().WaitForVolumeAttached(ctx, *attachment.GetId())
248246
if err != nil {
249-
return flexvolume.Fail(err)
247+
return flexvolume.Fail(logger, err)
250248
}
251249

252-
log.Printf("attach: %s attached", *attachment.GetId())
250+
logger.With("attachmentID", *attachment.GetId()).Info("Volume attached")
253251
iscsiAttachment, ok := attachment.(core.IScsiVolumeAttachment)
254252
if !ok {
255-
return flexvolume.Fail("Only ISCSI volume attachments are currently supported")
253+
return flexvolume.Fail(logger, "Only ISCSI volume attachments are currently supported")
256254
}
257255

258256
return flexvolume.DriverStatus{
@@ -262,33 +260,35 @@ func (d OCIFlexvolumeDriver) Attach(opts flexvolume.Options, nodeName string) fl
262260
}
263261

264262
// Detach detaches the volume from the worker node.
265-
func (d OCIFlexvolumeDriver) Detach(pvOrVolumeName, nodeName string) flexvolume.DriverStatus {
263+
func (d OCIFlexvolumeDriver) Detach(logger *zap.SugaredLogger, pvOrVolumeName, nodeName string) flexvolume.DriverStatus {
264+
logger = logger.With("node", nodeName, "volume", pvOrVolumeName)
265+
logger.Info("Looking for volume to detach.")
266266
config, err := ConfigFromFile(GetConfigPath())
267267
if err != nil {
268-
return flexvolume.Fail(err)
268+
return flexvolume.Fail(logger, err)
269269
}
270270
c, err := newClient(config)
271271
if err != nil {
272-
return flexvolume.Fail(err)
272+
return flexvolume.Fail(logger, err)
273273
}
274274

275275
volumeOCID := deriveVolumeOCID(config.Auth.RegionKey, pvOrVolumeName)
276276
ctx := context.Background()
277277
attachment, err := c.Compute().FindVolumeAttachment(ctx, config.Auth.CompartmentID, volumeOCID)
278278
if err != nil {
279-
return flexvolume.Fail(err)
279+
return flexvolume.Fail(logger, "Failed to find volume attachment: ", err)
280280
}
281-
281+
logger.Info("Found volume to detatch.")
282282
err = c.Compute().DetachVolume(ctx, *attachment.GetId())
283283
if err != nil {
284-
return flexvolume.Fail(err)
284+
return flexvolume.Fail(logger, err)
285285
}
286286

287287
err = c.Compute().WaitForVolumeDetached(ctx, *attachment.GetId())
288288
if err != nil {
289-
return flexvolume.Fail(err)
289+
return flexvolume.Fail(logger, err)
290290
}
291-
return flexvolume.Succeed()
291+
return flexvolume.Succeed(logger, "Volume detatchment completed.")
292292
}
293293

294294
// WaitForAttach searches for the the volume attachment created by Attach() and
@@ -304,14 +304,14 @@ func (d OCIFlexvolumeDriver) WaitForAttach(mountDevice string, _ flexvolume.Opti
304304
// TODO(apryde): The documentation states that this is called from the Kubelet
305305
// and KCM. Implementation requries credentials which won't be present on nodes
306306
// but I've only ever seen it called by the KCM.
307-
func (d OCIFlexvolumeDriver) IsAttached(opts flexvolume.Options, nodeName string) flexvolume.DriverStatus {
307+
func (d OCIFlexvolumeDriver) IsAttached(logger *zap.SugaredLogger, opts flexvolume.Options, nodeName string) flexvolume.DriverStatus {
308308
config, err := ConfigFromFile(GetConfigPath())
309309
if err != nil {
310-
return flexvolume.Fail(err)
310+
return flexvolume.Fail(logger, err)
311311
}
312312
c, err := newClient(config)
313313
if err != nil {
314-
return flexvolume.Fail(err)
314+
return flexvolume.Fail(logger, err)
315315
}
316316

317317
ctx := context.Background()
@@ -325,7 +325,7 @@ func (d OCIFlexvolumeDriver) IsAttached(opts flexvolume.Options, nodeName string
325325
}
326326
}
327327

328-
log.Printf("attach: found volume attachment %s", *attachment.GetId())
328+
logger.With("attachmentID", *attachment.GetId()).Info("Found volume attachment")
329329

330330
return flexvolume.DriverStatus{
331331
Status: flexvolume.StatusSuccess,
@@ -335,30 +335,30 @@ func (d OCIFlexvolumeDriver) IsAttached(opts flexvolume.Options, nodeName string
335335

336336
// MountDevice connects the iSCSI target on the k8s worker node before mounting
337337
// and (if necessary) formatting the disk.
338-
func (d OCIFlexvolumeDriver) MountDevice(mountDir, mountDevice string, opts flexvolume.Options) flexvolume.DriverStatus {
339-
iSCSIMounter, err := iscsi.NewFromDevicePath(mountDevice)
338+
func (d OCIFlexvolumeDriver) MountDevice(logger *zap.SugaredLogger, mountDir, mountDevice string, opts flexvolume.Options) flexvolume.DriverStatus {
339+
iSCSIMounter, err := iscsi.NewFromDevicePath(logger, mountDevice)
340340
if err != nil {
341-
return flexvolume.Fail(err)
341+
return flexvolume.Fail(logger, err)
342342
}
343343

344344
if isMounted, oErr := iSCSIMounter.DeviceOpened(mountDevice); oErr != nil {
345-
return flexvolume.Fail(oErr)
345+
return flexvolume.Fail(logger, oErr)
346346
} else if isMounted {
347-
return flexvolume.Succeed("Device already mounted. Nothing to do.")
347+
return flexvolume.Succeed(logger, "Device already mounted. Nothing to do.")
348348
}
349349

350350
if err = iSCSIMounter.AddToDB(); err != nil {
351-
return flexvolume.Fail(err)
351+
return flexvolume.Fail(logger, err)
352352
}
353353
if err = iSCSIMounter.SetAutomaticLogin(); err != nil {
354-
return flexvolume.Fail(err)
354+
return flexvolume.Fail(logger, err)
355355
}
356356
if err = iSCSIMounter.Login(); err != nil {
357-
return flexvolume.Fail(err)
357+
return flexvolume.Fail(logger, err)
358358
}
359359

360360
if !waitForPathToExist(mountDevice, 20) {
361-
return flexvolume.Fail("Failed waiting for device to exist: ", mountDevice)
361+
return flexvolume.Fail(logger, "Failed waiting for device to exist: ", mountDevice)
362362
}
363363

364364
options := []string{}
@@ -367,44 +367,44 @@ func (d OCIFlexvolumeDriver) MountDevice(mountDir, mountDevice string, opts flex
367367
}
368368
err = iSCSIMounter.FormatAndMount(mountDevice, mountDir, opts[flexvolume.OptionFSType], options)
369369
if err != nil {
370-
return flexvolume.Fail(err)
370+
return flexvolume.Fail(logger, err)
371371
}
372372

373-
return flexvolume.Succeed()
373+
return flexvolume.Succeed(logger)
374374
}
375375

376376
// UnmountDevice unmounts the disk, logs out the iscsi target, and deletes the
377377
// iscsi node record.
378-
func (d OCIFlexvolumeDriver) UnmountDevice(mountPath string) flexvolume.DriverStatus {
379-
iSCSIMounter, err := iscsi.NewFromMountPointPath(mountPath)
378+
func (d OCIFlexvolumeDriver) UnmountDevice(logger *zap.SugaredLogger, mountPath string) flexvolume.DriverStatus {
379+
iSCSIMounter, err := iscsi.NewFromMountPointPath(logger, mountPath)
380380
if err != nil {
381381
if err == iscsi.ErrMountPointNotFound {
382-
return flexvolume.Succeed("Mount point not found. Nothing to do.")
382+
return flexvolume.Succeed(logger, "Mount point not found. Nothing to do.")
383383
}
384-
return flexvolume.Fail(err)
384+
return flexvolume.Fail(logger, err)
385385
}
386386

387387
if err = iSCSIMounter.UnmountPath(mountPath); err != nil {
388-
return flexvolume.Fail(err)
388+
return flexvolume.Fail(logger, err)
389389
}
390390
if err = iSCSIMounter.Logout(); err != nil {
391-
return flexvolume.Fail(err)
391+
return flexvolume.Fail(logger, err)
392392
}
393393
if err = iSCSIMounter.RemoveFromDB(); err != nil {
394-
return flexvolume.Fail(err)
394+
return flexvolume.Fail(logger, err)
395395
}
396396

397-
return flexvolume.Succeed()
397+
return flexvolume.Succeed(logger)
398398
}
399399

400400
// Mount is unimplemented as we use the --enable-controller-attach-detach flow
401401
// and as such mount the drive in MountDevice().
402-
func (d OCIFlexvolumeDriver) Mount(mountDir string, opts flexvolume.Options) flexvolume.DriverStatus {
403-
return flexvolume.NotSupported()
402+
func (d OCIFlexvolumeDriver) Mount(logger *zap.SugaredLogger, mountDir string, opts flexvolume.Options) flexvolume.DriverStatus {
403+
return flexvolume.NotSupported(logger)
404404
}
405405

406406
// Unmount is unimplemented as we use the --enable-controller-attach-detach flow
407407
// and as such unmount the drive in UnmountDevice().
408-
func (d OCIFlexvolumeDriver) Unmount(mountDir string) flexvolume.DriverStatus {
409-
return flexvolume.NotSupported()
408+
func (d OCIFlexvolumeDriver) Unmount(logger *zap.SugaredLogger, mountDir string) flexvolume.DriverStatus {
409+
return flexvolume.NotSupported(logger)
410410
}

0 commit comments

Comments
 (0)