@@ -36,9 +36,10 @@ const (
3636 diskScsiGooglePrefix = "scsi-0Google_PersistentDisk_"
3737 diskPartitionSuffix = "-part"
3838 diskSDPath = "/dev/sd"
39- diskSDPattern = "/dev/sd*"
39+ diskSDGlob = "/dev/sd*"
4040 diskNvmePath = "/dev/nvme"
4141 diskNvmePattern = "^/dev/nvme[0-9]+n[0-9]+$"
42+ diskNvmeGlob = "/dev/nvme*"
4243 // How many times to retry for a consistent read of /proc/mounts.
4344 maxListTries = 3
4445 // Number of fields per line in /proc/mounts as per the fstab man page.
6970 scsiRegex = regexp .MustCompile (scsiPattern )
7071 // regex to parse google_nvme_id output and extract the serial
7172 nvmeRegex = regexp .MustCompile (nvmePattern )
73+ // regex to filter for disk drive paths from filepath.Glob output of diskNvmeGlob
74+ diskNvmeRegex = regexp .MustCompile (diskNvmePattern )
7275)
7376
7477// DeviceUtils are a collection of methods that act on the devices attached
@@ -306,15 +309,28 @@ func getDevFsSerial(devFsPath string) (string, error) {
306309 }
307310}
308311
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+
309323func findAvailableDevFsPaths () ([]string , error ) {
310- diskSDPaths , err := filepath .Glob (diskSDPattern )
324+ diskSDPaths , err := filepath .Glob (diskSDGlob )
311325 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 )
313327 }
314- diskNvmePaths , err := filepath .Glob (diskNvmePattern )
328+ devNvmePaths , err := filepath .Glob (diskNvmeGlob )
315329 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 )
317331 }
332+ // Devices under /dev/nvme need to be filtered for disk drive paths only.
333+ diskNvmePaths := filterAvailableNvmeDevFsPaths (devNvmePaths )
318334 return append (diskSDPaths , diskNvmePaths ... ), nil
319335}
320336
0 commit comments