@@ -31,11 +31,10 @@ import (
31
31
"k8s.io/apimachinery/pkg/types"
32
32
"k8s.io/apimachinery/pkg/util/sets"
33
33
utilfeature "k8s.io/apiserver/pkg/util/feature"
34
- "k8s.io/client-go/kubernetes"
35
34
"k8s.io/client-go/util/retry"
36
35
csiv1alpha1 "k8s.io/csi-api/pkg/apis/csi/v1alpha1"
37
- csiclientset "k8s.io/csi-api/pkg/client/clientset/versioned"
38
36
"k8s.io/kubernetes/pkg/features"
37
+ "k8s.io/kubernetes/pkg/volume"
39
38
"k8s.io/kubernetes/pkg/volume/util"
40
39
)
41
40
@@ -49,9 +48,8 @@ var nodeKind = v1.SchemeGroupVersion.WithKind("Node")
49
48
// nodeInfoManager contains necessary common dependencies to update node info on both
50
49
// the Node and CSINodeInfo objects.
51
50
type nodeInfoManager struct {
52
- nodeName types.NodeName
53
- k8s kubernetes.Interface
54
- csiKubeClient csiclientset.Interface
51
+ nodeName types.NodeName
52
+ volumeHost volume.VolumeHost
55
53
}
56
54
57
55
// If no updates is needed, the function must return the same Node object as the input.
@@ -73,12 +71,10 @@ type Interface interface {
73
71
// NewNodeInfoManager initializes nodeInfoManager
74
72
func NewNodeInfoManager (
75
73
nodeName types.NodeName ,
76
- kubeClient kubernetes.Interface ,
77
- csiKubeClient csiclientset.Interface ) Interface {
74
+ volumeHost volume.VolumeHost ) Interface {
78
75
return & nodeInfoManager {
79
- nodeName : nodeName ,
80
- k8s : kubeClient ,
81
- csiKubeClient : csiKubeClient ,
76
+ nodeName : nodeName ,
77
+ volumeHost : volumeHost ,
82
78
}
83
79
}
84
80
@@ -143,7 +139,12 @@ func (nim *nodeInfoManager) updateNode(updateFuncs ...nodeUpdateFunc) error {
143
139
// existing changes are not overwritten. RetryOnConflict uses
144
140
// exponential backoff to avoid exhausting the apiserver.
145
141
146
- nodeClient := nim .k8s .CoreV1 ().Nodes ()
142
+ kubeClient := nim .volumeHost .GetKubeClient ()
143
+ if kubeClient == nil {
144
+ return fmt .Errorf ("error getting kube client" )
145
+ }
146
+
147
+ nodeClient := kubeClient .CoreV1 ().Nodes ()
147
148
node , err := nodeClient .Get (string (nim .nodeName ), metav1.GetOptions {})
148
149
if err != nil {
149
150
return err // do not wrap error
@@ -315,12 +316,13 @@ func (nim *nodeInfoManager) updateCSINodeInfo(
315
316
driverNodeID string ,
316
317
topology * csipb.Topology ) error {
317
318
318
- if nim .csiKubeClient == nil {
319
- return fmt .Errorf ("CSI client cannot be nil" )
319
+ csiKubeClient := nim .volumeHost .GetCSIClient ()
320
+ if csiKubeClient == nil {
321
+ return fmt .Errorf ("error getting CSI client" )
320
322
}
321
323
322
324
retryErr := retry .RetryOnConflict (retry .DefaultRetry , func () error {
323
- nodeInfo , err := nim . csiKubeClient .CsiV1alpha1 ().CSINodeInfos ().Get (string (nim .nodeName ), metav1.GetOptions {})
325
+ nodeInfo , err := csiKubeClient .CsiV1alpha1 ().CSINodeInfos ().Get (string (nim .nodeName ), metav1.GetOptions {})
324
326
if nodeInfo == nil || errors .IsNotFound (err ) {
325
327
return nim .createNodeInfoObject (driverName , driverNodeID , topology )
326
328
}
@@ -341,14 +343,24 @@ func (nim *nodeInfoManager) createNodeInfoObject(
341
343
driverNodeID string ,
342
344
topology * csipb.Topology ) error {
343
345
346
+ kubeClient := nim .volumeHost .GetKubeClient ()
347
+ if kubeClient == nil {
348
+ return fmt .Errorf ("error getting kube client" )
349
+ }
350
+
351
+ csiKubeClient := nim .volumeHost .GetCSIClient ()
352
+ if csiKubeClient == nil {
353
+ return fmt .Errorf ("error getting CSI client" )
354
+ }
355
+
344
356
var topologyKeys []string
345
357
if topology != nil {
346
358
for k := range topology .Segments {
347
359
topologyKeys = append (topologyKeys , k )
348
360
}
349
361
}
350
362
351
- node , err := nim . k8s .CoreV1 ().Nodes ().Get (string (nim .nodeName ), metav1.GetOptions {})
363
+ node , err := kubeClient .CoreV1 ().Nodes ().Get (string (nim .nodeName ), metav1.GetOptions {})
352
364
if err != nil {
353
365
return err // do not wrap error
354
366
}
@@ -374,7 +386,7 @@ func (nim *nodeInfoManager) createNodeInfoObject(
374
386
},
375
387
}
376
388
377
- _ , err = nim . csiKubeClient .CsiV1alpha1 ().CSINodeInfos ().Create (nodeInfo )
389
+ _ , err = csiKubeClient .CsiV1alpha1 ().CSINodeInfos ().Create (nodeInfo )
378
390
return err // do not wrap error
379
391
}
380
392
@@ -384,6 +396,11 @@ func (nim *nodeInfoManager) updateNodeInfoObject(
384
396
driverNodeID string ,
385
397
topology * csipb.Topology ) error {
386
398
399
+ csiKubeClient := nim .volumeHost .GetCSIClient ()
400
+ if csiKubeClient == nil {
401
+ return fmt .Errorf ("error getting CSI client" )
402
+ }
403
+
387
404
topologyKeys := make (sets.String )
388
405
if topology != nil {
389
406
for k := range topology .Segments {
@@ -416,14 +433,19 @@ func (nim *nodeInfoManager) updateNodeInfoObject(
416
433
newDriverInfos = append (newDriverInfos , driverInfo )
417
434
nodeInfo .CSIDrivers = newDriverInfos
418
435
419
- _ , err := nim . csiKubeClient .CsiV1alpha1 ().CSINodeInfos ().Update (nodeInfo )
436
+ _ , err := csiKubeClient .CsiV1alpha1 ().CSINodeInfos ().Update (nodeInfo )
420
437
return err // do not wrap error
421
438
}
422
439
423
440
func (nim * nodeInfoManager ) removeCSINodeInfo (csiDriverName string ) error {
424
441
retryErr := retry .RetryOnConflict (retry .DefaultRetry , func () error {
425
442
426
- nodeInfoClient := nim .csiKubeClient .CsiV1alpha1 ().CSINodeInfos ()
443
+ csiKubeClient := nim .volumeHost .GetCSIClient ()
444
+ if csiKubeClient == nil {
445
+ return fmt .Errorf ("error getting CSI client" )
446
+ }
447
+
448
+ nodeInfoClient := csiKubeClient .CsiV1alpha1 ().CSINodeInfos ()
427
449
nodeInfo , err := nodeInfoClient .Get (string (nim .nodeName ), metav1.GetOptions {})
428
450
if nodeInfo == nil || errors .IsNotFound (err ) {
429
451
// do nothing
0 commit comments