@@ -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