@@ -28,6 +28,9 @@ import (
28
28
diskapi "github.com/kubernetes-csi/csi-proxy/client/api/disk/v1beta2"
29
29
diskclient "github.com/kubernetes-csi/csi-proxy/client/groups/disk/v1beta2"
30
30
31
+ diskapiv1beta1 "github.com/kubernetes-csi/csi-proxy/client/api/disk/v1beta1"
32
+ diskclientv1beta1 "github.com/kubernetes-csi/csi-proxy/client/groups/disk/v1beta1"
33
+
31
34
fsapi "github.com/kubernetes-csi/csi-proxy/client/api/filesystem/v1beta1"
32
35
fsclient "github.com/kubernetes-csi/csi-proxy/client/groups/filesystem/v1beta1"
33
36
@@ -40,11 +43,13 @@ import (
40
43
)
41
44
42
45
var _ mount.Interface = & CSIProxyMounter {}
46
+ var version = 2
43
47
44
48
type CSIProxyMounter struct {
45
- FsClient * fsclient.Client
46
- DiskClient * diskclient.Client
47
- VolumeClient * volumeclient.Client
49
+ FsClient * fsclient.Client
50
+ DiskClient * diskclient.Client
51
+ DiskClientV1beta1 * diskclientv1beta1.Client
52
+ VolumeClient * volumeclient.Client
48
53
}
49
54
50
55
func NewCSIProxyMounter () (* CSIProxyMounter , error ) {
@@ -56,14 +61,28 @@ func NewCSIProxyMounter() (*CSIProxyMounter, error) {
56
61
if err != nil {
57
62
return nil , err
58
63
}
64
+ diskClientv1beta1 , err := diskclientv1beta1 .NewClient ()
65
+ if err != nil {
66
+ return nil , err
67
+ }
68
+
69
+ klog .Infof ("start disk client v1beta2" )
70
+ listRequest := & diskapi.ListDiskIDsRequest {}
71
+ _ , err = diskClient .ListDiskIDs (context .Background (), listRequest )
72
+ if err != nil {
73
+ klog .Errorf ("disk v1beta2 api failed %v" , err )
74
+ version = 1
75
+ }
76
+
59
77
volumeClient , err := volumeclient .NewClient ()
60
78
if err != nil {
61
79
return nil , err
62
80
}
63
81
return & CSIProxyMounter {
64
- FsClient : fsClient ,
65
- DiskClient : diskClient ,
66
- VolumeClient : volumeClient ,
82
+ FsClient : fsClient ,
83
+ DiskClient : diskClient ,
84
+ VolumeClient : volumeClient ,
85
+ DiskClientV1beta1 : diskClientv1beta1 ,
67
86
}, nil
68
87
}
69
88
@@ -175,6 +194,11 @@ func (mounter *CSIProxyMounter) UnmountDevice(target string) error {
175
194
DiskID : strconv .FormatInt (diskId , 10 ),
176
195
IsOnline : false ,
177
196
}
197
+ if version == 1 {
198
+ klog .Infof ("skip online" )
199
+ return nil
200
+ }
201
+ klog .Infof ("set onlin" )
178
202
if _ , err = mounter .DiskClient .SetAttachState (context .Background (), setDiskRequest ); err != nil {
179
203
return err
180
204
}
@@ -188,6 +212,31 @@ func (mounter *CSIProxyMounter) Unmount(target string) error {
188
212
189
213
func (mounter * CSIProxyMounter ) GetDevicePath (deviceName string , partition string , volumeKey string ) (string , error ) {
190
214
id := "page83"
215
+
216
+ if version == 1 {
217
+ listRequest := & diskapiv1beta1.ListDiskIDsRequest {}
218
+ diskIDsResponse , err := mounter .DiskClientV1beta1 .ListDiskIDs (context .Background (), listRequest )
219
+ if err != nil {
220
+ return "" , err
221
+ }
222
+ diskIDsMap := diskIDsResponse .GetDiskIDs ()
223
+ for diskNum , diskInfo := range diskIDsMap {
224
+ klog .V (4 ).Infof ("found disk number %s, disk info %v" , diskNum , diskInfo )
225
+ idValue , found := diskInfo .Identifiers [id ]
226
+ // The page83 id for gce pd has format of "Google pvc-xxxxxxx(the device name passed in here)"
227
+ if ! found || idValue == "" {
228
+ continue
229
+ }
230
+ names := strings .Fields (idValue )
231
+ klog .V (4 ).Infof ("get page83 id %s" , idValue )
232
+ if names [len (names )- 1 ] == deviceName {
233
+ return diskNum , nil
234
+ }
235
+ }
236
+ return "" , fmt .Errorf ("could not find disk number for device %s" , deviceName )
237
+
238
+ }
239
+
191
240
listRequest := & diskapi.ListDiskIDsRequest {}
192
241
diskIDsResponse , err := mounter .DiskClient .ListDiskIDs (context .Background (), listRequest )
193
242
if err != nil {
@@ -215,25 +264,38 @@ func (mounter *CSIProxyMounter) GetDevicePath(deviceName string, partition strin
215
264
// After formatting, it will mount the disk to target path on the host
216
265
func (mounter * CSIProxyMounter ) FormatAndMount (source string , target string , fstype string , options []string ) error {
217
266
// Call PartitionDisk CSI proxy call to partition the disk and return the volume id
218
- partionDiskRequest := & diskapi.PartitionDiskRequest {
219
- DiskID : source ,
220
- }
221
267
222
- _ , err := mounter . DiskClient . PartitionDisk ( context . Background (), partionDiskRequest )
223
- if err != nil {
224
- return err
225
- }
268
+ if version == 1 {
269
+ partionDiskRequest := & diskapiv1beta1. PartitionDiskRequest {
270
+ DiskID : source ,
271
+ }
226
272
227
- // make sure disk is online. if disk is already online, this call should also succeed.
228
- setDiskRequest := & diskapi.SetAttachStateRequest {
229
- DiskID : source ,
230
- IsOnline : true ,
273
+ _ , err := mounter .DiskClientV1beta1 .PartitionDisk (context .Background (), partionDiskRequest )
274
+ if err != nil {
275
+ return err
276
+ }
277
+
278
+ } else {
279
+ partionDiskRequest := & diskapi.PartitionDiskRequest {
280
+ DiskID : source ,
281
+ }
282
+
283
+ _ , err := mounter .DiskClient .PartitionDisk (context .Background (), partionDiskRequest )
284
+ if err != nil {
285
+ return err
286
+ }
231
287
}
232
- _ , err = mounter .DiskClient .SetAttachState (context .Background (), setDiskRequest )
233
- if err != nil {
234
- return err
288
+ if version == 2 {
289
+ // make sure disk is online. if disk is already online, this call should also succeed.
290
+ setDiskRequest := & diskapi.SetAttachStateRequest {
291
+ DiskID : source ,
292
+ IsOnline : true ,
293
+ }
294
+ _ , err := mounter .DiskClient .SetAttachState (context .Background (), setDiskRequest )
295
+ if err != nil {
296
+ return err
297
+ }
235
298
}
236
-
237
299
volumeIDsRequest := & volumeapi.ListVolumesOnDiskRequest {
238
300
DiskId : source ,
239
301
}
@@ -313,6 +375,14 @@ func (mounter *CSIProxyMounter) ExistsPath(path string) (bool, error) {
313
375
}
314
376
315
377
func (mounter * CSIProxyMounter ) GetBlockSizeBytes (diskId string ) (int64 , error ) {
378
+ if version == 1 {
379
+ DiskStatsResponse , err := mounter .DiskClientV1beta1 .DiskStats (context .Background (),
380
+ & diskapiv1beta1.DiskStatsRequest {
381
+ DiskID : diskId ,
382
+ })
383
+ return DiskStatsResponse .DiskSize , err
384
+ }
385
+
316
386
DiskStatsResponse , err := mounter .DiskClient .DiskStats (context .Background (),
317
387
& diskapi.DiskStatsRequest {
318
388
DiskID : diskId ,
0 commit comments