Skip to content

Commit ca764ea

Browse files
authored
style: add more linters check and update related code (#777)
* Add more linters check and update related code * address comments and add more items * address comments
1 parent 10b69b7 commit ca764ea

File tree

12 files changed

+86
-46
lines changed

12 files changed

+86
-46
lines changed

.golangci.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@ linters:
1010
- deadcode
1111
- durationcheck
1212
- exportloopref
13+
- errcheck
1314
- exhaustive
15+
- goconst
1416
- gofmt
1517
- goimports
1618
- gosimple
@@ -19,8 +21,10 @@ linters:
1921
- ineffassign
2022
- makezero
2123
- misspell
24+
- nilerr
2225
- revive
2326
- structcheck
27+
- stylecheck
2428
- typecheck
2529
- unused
2630
- varcheck

controllers/secretproviderclasspodstatus_controller.go

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,8 @@ import (
3030
"sigs.k8s.io/secrets-store-csi-driver/pkg/util/secretutil"
3131

3232
corev1 "k8s.io/api/core/v1"
33-
v1 "k8s.io/api/core/v1"
3433
apierrors "k8s.io/apimachinery/pkg/api/errors"
3534
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
36-
"k8s.io/apimachinery/pkg/runtime"
3735
apiruntime "k8s.io/apimachinery/pkg/runtime"
3836
"k8s.io/apimachinery/pkg/types"
3937
"k8s.io/apimachinery/pkg/util/wait"
@@ -131,7 +129,7 @@ func (r *SecretProviderClassPodStatusReconciler) Patcher(ctx context.Context) er
131129
spcMap[namespace+"/"+spcName] = *spc
132130
}
133131
// get the pod and check if the pod has a owner reference
134-
pod := &v1.Pod{}
132+
pod := &corev1.Pod{}
135133
err = r.reader.Get(ctx, client.ObjectKey{Namespace: namespace, Name: spcPodStatuses[i].Status.PodName}, pod)
136134
if err != nil {
137135
return fmt.Errorf("failed to fetch pod during patching, err: %+v", err)
@@ -234,7 +232,7 @@ func (r *SecretProviderClassPodStatusReconciler) Reconcile(ctx context.Context,
234232

235233
// Obtain the full pod metadata. An object reference is needed for sending
236234
// events and the UID is helpful for validating the SPCPS TargetPath.
237-
pod := &v1.Pod{}
235+
pod := &corev1.Pod{}
238236
if err := r.reader.Get(ctx, client.ObjectKey{Namespace: req.Namespace, Name: spcPodStatus.Status.PodName}, pod); err != nil {
239237
klog.ErrorS(err, "failed to get pod", "pod", klog.ObjectRef{Namespace: req.Namespace, Name: spcPodStatus.Status.PodName})
240238
if apierrors.IsNotFound(err) {
@@ -245,7 +243,7 @@ func (r *SecretProviderClassPodStatusReconciler) Reconcile(ctx context.Context,
245243
// skip reconcile if the pod is being terminated
246244
// or the pod is in succeeded state (for jobs that complete aren't gc yet)
247245
// or the pod is in a failed state (all containers get terminated)
248-
if !pod.GetDeletionTimestamp().IsZero() || pod.Status.Phase == v1.PodSucceeded || pod.Status.Phase == v1.PodFailed {
246+
if !pod.GetDeletionTimestamp().IsZero() || pod.Status.Phase == corev1.PodSucceeded || pod.Status.Phase == corev1.PodFailed {
249247
klog.V(5).InfoS("pod is being terminated, skipping reconcile", "pod", klog.KObj(pod))
250248
return ctrl.Result{}, nil
251249
}
@@ -478,7 +476,7 @@ func (r *SecretProviderClassPodStatusReconciler) patchSecretWithOwnerRef(ctx con
478476

479477
// secretExists checks if the secret with name and namespace already exists
480478
func (r *SecretProviderClassPodStatusReconciler) secretExists(ctx context.Context, name, namespace string) (bool, error) {
481-
o := &v1.Secret{}
479+
o := &corev1.Secret{}
482480
secretKey := types.NamespacedName{
483481
Namespace: namespace,
484482
Name: name,
@@ -494,7 +492,7 @@ func (r *SecretProviderClassPodStatusReconciler) secretExists(ctx context.Contex
494492
}
495493

496494
// generateEvent generates an event
497-
func (r *SecretProviderClassPodStatusReconciler) generateEvent(obj runtime.Object, eventType, reason, message string) {
495+
func (r *SecretProviderClassPodStatusReconciler) generateEvent(obj apiruntime.Object, eventType, reason, message string) {
498496
if obj != nil {
499497
r.eventRecorder.Eventf(obj, eventType, reason, message)
500498
}

pkg/rotation/reconciler.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ import (
2626

2727
secretsstorev1 "sigs.k8s.io/secrets-store-csi-driver/apis/v1"
2828
"sigs.k8s.io/secrets-store-csi-driver/controllers"
29-
"sigs.k8s.io/secrets-store-csi-driver/pkg/client/clientset/versioned"
3029
secretsStoreClient "sigs.k8s.io/secrets-store-csi-driver/pkg/client/clientset/versioned"
3130
internalerrors "sigs.k8s.io/secrets-store-csi-driver/pkg/errors"
3231
"sigs.k8s.io/secrets-store-csi-driver/pkg/k8s"
@@ -80,7 +79,7 @@ type Reconciler struct {
8079
reporter StatsReporter
8180
eventRecorder record.EventRecorder
8281
kubeClient kubernetes.Interface
83-
crdClient versioned.Interface
82+
crdClient secretsStoreClient.Interface
8483
// cache contains v1.Pod, secretsstorev1.SecretProviderClassPodStatus (both filtered on *nodeID),
8584
// v1.Secret (filtered on secrets-store.csi.k8s.io/managed=true)
8685
cache client.Reader
@@ -410,11 +409,12 @@ func (r *Reconciler) reconcile(ctx context.Context, spcps *secretsstorev1.Secret
410409

411410
updateFn := func() (bool, error) {
412411
err = r.updateSecretProviderClassPodStatus(ctx, spcps)
412+
updated := true
413413
if err != nil {
414414
klog.ErrorS(err, "failed to update latest versions in spc pod status", "spcps", klog.KObj(spcps), "controller", "rotation")
415-
return false, nil
415+
updated = false
416416
}
417-
return true, nil
417+
return updated, nil
418418
}
419419

420420
if err := wait.ExponentialBackoff(wait.Backoff{

pkg/rotation/reconciler_test.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -460,7 +460,8 @@ func TestReconcileError(t *testing.T) {
460460
server, err := providerfake.NewMocKCSIProviderServer(serverEndpoint)
461461
g.Expect(err).NotTo(HaveOccurred())
462462
server.SetObjects(test.expectedObjectVersions)
463-
server.Start()
463+
err = server.Start()
464+
g.Expect(err).NotTo(HaveOccurred())
464465

465466
err = testReconciler.reconcile(context.TODO(), test.secretProviderClassPodStatusToProcess)
466467
g.Expect(err).To(HaveOccurred())
@@ -601,7 +602,8 @@ func TestReconcileNoError(t *testing.T) {
601602
server, err := providerfake.NewMocKCSIProviderServer(serverEndpoint)
602603
g.Expect(err).NotTo(HaveOccurred())
603604
server.SetObjects(expectedObjectVersions)
604-
server.Start()
605+
err = server.Start()
606+
g.Expect(err).NotTo(HaveOccurred())
605607

606608
err = os.WriteFile(secretProviderClassPodStatusToProcess.Status.TargetPath+"/object1", []byte("newdata"), permission)
607609
g.Expect(err).NotTo(HaveOccurred())

pkg/secrets-store/nodeserver.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ const (
5656
csipodsa = "csi.storage.k8s.io/serviceAccount.name"
5757
csipodsatokens = "csi.storage.k8s.io/serviceAccount.tokens" //nolint
5858
secretProviderClassField = "secretProviderClass"
59+
osWindows = "windows"
5960
)
6061

6162
func (ns *nodeServer) NodePublishVolume(ctx context.Context, req *csi.NodePublishVolumeRequest) (npvr *csi.NodePublishVolumeResponse, err error) {
@@ -73,7 +74,9 @@ func (ns *nodeServer) NodePublishVolume(ctx context.Context, req *csi.NodePublis
7374
// again for mount, entire node publish volume is retried
7475
if targetPath != "" && mounted {
7576
klog.InfoS("unmounting target path as node publish volume failed", "targetPath", targetPath, "pod", klog.ObjectRef{Namespace: podNamespace, Name: podName})
76-
ns.mounter.Unmount(targetPath)
77+
if err = ns.mounter.Unmount(targetPath); err != nil {
78+
klog.ErrorS(err, "failed to unmounting target path")
79+
}
7780
}
7881
ns.reporter.ReportNodePublishErrorCtMetric(providerName, errorReason)
7982
return
@@ -245,7 +248,7 @@ func (ns *nodeServer) NodeUnpublishVolume(ctx context.Context, req *csi.NodeUnpu
245248

246249
// for windows as the target path is not a mount point, we need to explicitly remove the contents from the
247250
// dir to be able to cleanup the target path.
248-
if runtime.GOOS == "windows" {
251+
if runtime.GOOS == osWindows {
249252
files, err := filepath.Glob(filepath.Join(targetPath, "*"))
250253
if err != nil {
251254
klog.ErrorS(err, "failed to get files from target path", "targetPath", targetPath)

pkg/secrets-store/provider_client_test.go

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,9 @@ func TestMountContent(t *testing.T) {
187187
server.SetReturnError(test.providerError)
188188
server.SetObjects(test.objectVersions)
189189
server.SetFiles(test.files)
190-
server.Start()
190+
if err := server.Start(); err != nil {
191+
t.Fatalf("unable to start server :%s", err)
192+
}
191193

192194
client, err := pool.Get(context.Background(), "provider1")
193195
if err != nil {
@@ -242,7 +244,9 @@ func TestMountContent_TooLarge(t *testing.T) {
242244
Contents: []byte("foo"),
243245
},
244246
})
245-
server.Start()
247+
if err := server.Start(); err != nil {
248+
t.Fatalf("expected err to be nil, got: %+v", err)
249+
}
246250

247251
client, err := pool.Get(context.Background(), "provider1")
248252
if err != nil {
@@ -335,7 +339,9 @@ func TestMountContentError(t *testing.T) {
335339
server.SetReturnError(test.providerError)
336340
server.SetObjects(test.expectedObjectVersion)
337341
server.SetProviderErrorCode(test.expectedErrorCode)
338-
server.Start()
342+
if err := server.Start(); err != nil {
343+
t.Fatalf("expected err to be nil, got: %+v", err)
344+
}
339345

340346
client, err := pool.Get(context.Background(), providerName)
341347
if err != nil {
@@ -365,7 +371,9 @@ func TestPluginClientBuilder(t *testing.T) {
365371
for i := 0; i < 10; i++ {
366372
server, cleanup := fakeServer(t, path, fmt.Sprintf("server-%d", i))
367373
defer cleanup()
368-
server.Start()
374+
if err := server.Start(); err != nil {
375+
t.Fatalf("expected err to be nil, got: %+v", err)
376+
}
369377
}
370378

371379
var wg sync.WaitGroup
@@ -393,7 +401,9 @@ func TestPluginClientBuilder_ConcurrentGet(t *testing.T) {
393401
provider := "server"
394402
server, cleanup := fakeServer(t, path, provider)
395403
defer cleanup()
396-
server.Start()
404+
if err := server.Start(); err != nil {
405+
t.Fatalf("expected err to be nil, got: %+v", err)
406+
}
397407

398408
var wg sync.WaitGroup
399409

@@ -423,7 +433,9 @@ func TestPluginClientBuilderErrorNotFound(t *testing.T) {
423433
// check that the provider is found once server is started
424434
server, cleanup := fakeServer(t, path, "notfoundprovider")
425435
defer cleanup()
426-
server.Start()
436+
if err := server.Start(); err != nil {
437+
t.Fatalf("expected err to be nil, got: %+v", err)
438+
}
427439

428440
if _, err := cb.Get(ctx, "notfoundprovider"); err != nil {
429441
t.Errorf("Get(%s) = %v, want nil", "notfoundprovider", err)
@@ -462,7 +474,9 @@ func TestVersion(t *testing.T) {
462474
server, cleanup := fakeServer(t, socketPath, "provider1")
463475
defer cleanup()
464476

465-
server.Start()
477+
if err := server.Start(); err != nil {
478+
t.Fatalf("expected err to be nil, got: %+v", err)
479+
}
466480

467481
client, err := pool.Get(context.Background(), "provider1")
468482
if err != nil {
@@ -492,7 +506,9 @@ func TestPluginClientBuilder_HealthCheck(t *testing.T) {
492506
provider := "server"
493507
server, cleanup := fakeServer(t, path, provider)
494508
defer cleanup()
495-
server.Start()
509+
if err := server.Start(); err != nil {
510+
t.Fatalf("expected err to be nil, got: %+v", err)
511+
}
496512

497513
// run the provider healthcheck
498514
go cb.HealthCheck(ctx, healthCheckInterval)

pkg/util/fileutil/atomic_writer.go

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -131,30 +131,30 @@ func (w *AtomicWriter) Write(payload map[string]FileProjection) error {
131131

132132
// (2)
133133
dataDirPath := filepath.Join(w.targetDir, dataDirName)
134-
oldTsDir, err := os.Readlink(dataDirPath)
134+
oldTSDir, err := os.Readlink(dataDirPath)
135135
if err != nil {
136136
if !os.IsNotExist(err) {
137137
klog.ErrorS(err, "error reading link for data directory", "logContext", w.logContext)
138138
return err
139139
}
140140
// although Readlink() returns "" on err, don't be fragile by relying on it (since it's not specified in docs)
141-
// empty oldTsDir indicates that it didn't exist
142-
oldTsDir = ""
141+
// empty oldTSDir indicates that it didn't exist
142+
oldTSDir = ""
143143
}
144-
oldTsPath := filepath.Join(w.targetDir, oldTsDir)
144+
oldTSPath := filepath.Join(w.targetDir, oldTSDir)
145145

146146
var pathsToRemove sets.String
147147
// if there was no old version, there's nothing to remove
148-
if len(oldTsDir) != 0 {
148+
if len(oldTSDir) != 0 {
149149
// (3)
150-
pathsToRemove, err = w.pathsToRemove(cleanPayload, oldTsPath)
150+
pathsToRemove, err = w.pathsToRemove(cleanPayload, oldTSPath)
151151
if err != nil {
152152
klog.ErrorS(err, "error determining user-visible files to remove", "logContext", w.logContext)
153153
return err
154154
}
155155

156156
// (4)
157-
if should, err := shouldWritePayload(cleanPayload, oldTsPath); err != nil {
157+
if should, err := shouldWritePayload(cleanPayload, oldTSPath); err != nil {
158158
klog.ErrorS(err, "error determining whether payload should be written to disk", "logContext", w.logContext)
159159
return err
160160
} else if !should && len(pathsToRemove) == 0 {
@@ -216,9 +216,9 @@ func (w *AtomicWriter) Write(payload map[string]FileProjection) error {
216216
}
217217

218218
// (11)
219-
if len(oldTsDir) > 0 {
220-
if err = os.RemoveAll(oldTsPath); err != nil {
221-
klog.ErrorS(err, "error removing old data directory", "logContext", w.logContext, "oldTsDir", oldTsDir)
219+
if len(oldTSDir) > 0 {
220+
if err = os.RemoveAll(oldTSPath); err != nil {
221+
klog.ErrorS(err, "error removing old data directory", "logContext", w.logContext, "oldTSDir", oldTSDir)
222222
return err
223223
}
224224
}
@@ -281,9 +281,9 @@ func validatePath(targetPath string) error {
281281
}
282282

283283
// shouldWritePayload returns whether the payload should be written to disk.
284-
func shouldWritePayload(payload map[string]FileProjection, oldTsDir string) (bool, error) {
284+
func shouldWritePayload(payload map[string]FileProjection, oldTSDir string) (bool, error) {
285285
for userVisiblePath, fileProjection := range payload {
286-
shouldWrite, err := shouldWriteFile(filepath.Join(oldTsDir, userVisiblePath), fileProjection.Data)
286+
shouldWrite, err := shouldWriteFile(filepath.Join(oldTSDir, userVisiblePath), fileProjection.Data)
287287
if err != nil {
288288
return false, err
289289
}
@@ -314,10 +314,10 @@ func shouldWriteFile(path string, content []byte) (bool, error) {
314314
// pathsToRemove walks the current version of the data directory and
315315
// determines which paths should be removed (if any) after the payload is
316316
// written to the target directory.
317-
func (w *AtomicWriter) pathsToRemove(payload map[string]FileProjection, oldTsDir string) (sets.String, error) {
317+
func (w *AtomicWriter) pathsToRemove(payload map[string]FileProjection, oldTSDir string) (sets.String, error) {
318318
paths := sets.NewString()
319319
visitor := func(path string, info os.FileInfo, err error) error {
320-
relativePath := strings.TrimPrefix(path, oldTsDir)
320+
relativePath := strings.TrimPrefix(path, oldTSDir)
321321
relativePath = strings.TrimPrefix(relativePath, string(os.PathSeparator))
322322
if relativePath == "" {
323323
return nil
@@ -327,7 +327,7 @@ func (w *AtomicWriter) pathsToRemove(payload map[string]FileProjection, oldTsDir
327327
return nil
328328
}
329329

330-
err := filepath.Walk(oldTsDir, visitor)
330+
err := filepath.Walk(oldTSDir, visitor)
331331
if os.IsNotExist(err) {
332332
return nil, nil
333333
} else if err != nil {

pkg/util/fileutil/atomic_writer_test.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ func TestPathsToRemove(t *testing.T) {
240240
}
241241

242242
dataDirPath := filepath.Join(targetDir, dataDirName)
243-
oldTsDir, err := os.Readlink(dataDirPath)
243+
oldTSDir, err := os.Readlink(dataDirPath)
244244
if err != nil && os.IsNotExist(err) {
245245
t.Errorf("Data symlink does not exist: %v", dataDirPath)
246246
continue
@@ -249,7 +249,7 @@ func TestPathsToRemove(t *testing.T) {
249249
continue
250250
}
251251

252-
actual, err := writer.pathsToRemove(tc.payload2, filepath.Join(targetDir, oldTsDir))
252+
actual, err := writer.pathsToRemove(tc.payload2, filepath.Join(targetDir, oldTSDir))
253253
if err != nil {
254254
t.Errorf("%v: unexpected error determining paths to remove: %v", tc.name, err)
255255
continue
@@ -747,7 +747,10 @@ func TestMultipleUpdates(t *testing.T) {
747747
writer := &AtomicWriter{targetDir: targetDir, logContext: "-test-"}
748748

749749
for _, payload := range tc.payloads {
750-
writer.Write(payload)
750+
if err := writer.Write(payload); err != nil {
751+
t.Errorf("unexpected error writing payload: %v, err:%v", payload, err)
752+
continue
753+
}
751754

752755
checkVolumeContents(targetDir, tc.name, payload, t)
753756
}

pkg/util/secretutil/secret_test.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -337,9 +337,15 @@ func createTestFile(tmpDir, fileName string) (string, error) {
337337
if fileName != "" {
338338
filePath := fmt.Sprintf("%s/%s", tmpDir, fileName)
339339
f, err := os.Create(filePath)
340-
f.Write([]byte("test"))
341340
defer f.Close()
342-
return filePath, err
341+
if err != nil {
342+
return filePath, err
343+
}
344+
_, err = f.Write([]byte("test"))
345+
if err != nil {
346+
return filePath, err
347+
}
348+
return filePath, nil
343349
}
344350
return "", nil
345351
}

provider/fake/fake_server.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,11 @@ func (m *MockCSIProviderServer) Start() error {
8787
if err != nil {
8888
return err
8989
}
90-
go m.grpcServer.Serve(m.listener)
90+
go func() {
91+
if err = m.grpcServer.Serve(m.listener); err != nil {
92+
return
93+
}
94+
}()
9195
return nil
9296
}
9397

0 commit comments

Comments
 (0)