code: func (os *OpenStack) GetDevicePath(volumeID string) string {
  	// Build a list of candidate device paths
  	candidateDeviceNodes := []string{
  		// KVM
  		fmt.Sprintf("virtio-%s", volumeID[:20]),
  		// KVM virtio-scsi
  		fmt.Sprintf("scsi-0QEMU_QEMU_HARDDISK_%s", volumeID[:20]),
  		// ESXi
  		fmt.Sprintf("wwn-0x%s", strings.Replace(volumeID, "-", "", -1)),
  	}
  
  	files, _ := ioutil.ReadDir("/dev/disk/by-id/")
  
  	for _, f := range files {
  		for _, c := range candidateDeviceNodes {
  			if c == f.Name() {
  				glog.V(4).Infof("Found disk attached as %q; full devicepath: %s\n", f.Name(), path.Join("/dev/disk/by-id/", f.Name()))
  				return path.Join("/dev/disk/by-id/", f.Name())
  			}
  		}
  	}
  
  	glog.Warningf("Failed to find device for the volumeID: %q\n", volumeID)
  	return ""
  }
docs: // GetDevicePath returns the path of an attached block storage volume, specified by its id.