@@ -36,9 +36,10 @@ const (
36
36
diskScsiGooglePrefix = "scsi-0Google_PersistentDisk_"
37
37
diskPartitionSuffix = "-part"
38
38
diskSDPath = "/dev/sd"
39
- diskSDPattern = "/dev/sd*"
39
+ diskSDGlob = "/dev/sd*"
40
40
diskNvmePath = "/dev/nvme"
41
41
diskNvmePattern = "^/dev/nvme[0-9]+n[0-9]+$"
42
+ diskNvmeGlob = "/dev/nvme*"
42
43
// How many times to retry for a consistent read of /proc/mounts.
43
44
maxListTries = 3
44
45
// Number of fields per line in /proc/mounts as per the fstab man page.
69
70
scsiRegex = regexp .MustCompile (scsiPattern )
70
71
// regex to parse google_nvme_id output and extract the serial
71
72
nvmeRegex = regexp .MustCompile (nvmePattern )
73
+ // regex to filter for disk drive paths from filepath.Glob output of diskNvmeGlob
74
+ diskNvmeRegex = regexp .MustCompile (diskNvmePattern )
72
75
)
73
76
74
77
// DeviceUtils are a collection of methods that act on the devices attached
@@ -306,15 +309,28 @@ func getDevFsSerial(devFsPath string) (string, error) {
306
309
}
307
310
}
308
311
312
+ func filterAvailableNvmeDevFsPaths (devNvmePaths []string ) []string {
313
+ // Devices under /dev/nvme need to be filtered for disk drive paths only.
314
+ diskNvmePaths := []string {}
315
+ for _ , devNvmePath := range devNvmePaths {
316
+ if diskNvmeRegex .MatchString (devNvmePath ) {
317
+ diskNvmePaths = append (diskNvmePaths , devNvmePath )
318
+ }
319
+ }
320
+ return diskNvmePaths
321
+ }
322
+
309
323
func findAvailableDevFsPaths () ([]string , error ) {
310
- diskSDPaths , err := filepath .Glob (diskSDPattern )
324
+ diskSDPaths , err := filepath .Glob (diskSDGlob )
311
325
if err != nil {
312
- return nil , fmt .Errorf ("failed to filepath.Glob(\" %s\" ): %w" , diskSDPattern , err )
326
+ return nil , fmt .Errorf ("failed to filepath.Glob(\" %s\" ): %w" , diskSDGlob , err )
313
327
}
314
- diskNvmePaths , err := filepath .Glob (diskNvmePattern )
328
+ devNvmePaths , err := filepath .Glob (diskNvmeGlob )
315
329
if err != nil {
316
- return nil , fmt .Errorf ("failed to filepath.Glob(\" %s\" ): %w" , diskNvmePattern , err )
330
+ return nil , fmt .Errorf ("failed to filepath.Glob(\" %s\" ): %w" , diskNvmeGlob , err )
317
331
}
332
+ // Devices under /dev/nvme need to be filtered for disk drive paths only.
333
+ diskNvmePaths := filterAvailableNvmeDevFsPaths (devNvmePaths )
318
334
return append (diskSDPaths , diskNvmePaths ... ), nil
319
335
}
320
336
0 commit comments