mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-10 12:32:03 +00:00
Support default udev GCE PD device path
The expected GCE PD device name is google-{name of disk}. This is because standard GCE images contain a udev rules file which renames the GCE PD device to google-{name of disk} https://github.com/GoogleCloudPlatform/compute-image-packages/blob/master/google-startup-scripts/lib/udev/rules.d/65-gce-disk-naming.rules. In custome images which do not have that udev rules file the device gets the default rules apply http://cgit.freedesktop.org/systemd/systemd/tree/rules/60-persistent-storage.rules and the GCE PD device ends up with a name which looks like scsi-0Google_PersistentDisk_{name of disk} This patch adds support for that scenario. Signed-off-by: Sami Wagiaalla <swagiaal@redhat.com>
This commit is contained in:
parent
a6b8b2ef59
commit
a85451addc
@ -42,19 +42,34 @@ func (util *GCEDiskUtil) AttachAndMountDisk(pd *gcePersistentDisk, globalPDPath
|
|||||||
if err := gce.(*gce_cloud.GCECloud).AttachDisk(pd.pdName, pd.readOnly); err != nil {
|
if err := gce.(*gce_cloud.GCECloud).AttachDisk(pd.pdName, pd.readOnly); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
devicePath := path.Join("/dev/disk/by-id/", "google-"+pd.pdName)
|
|
||||||
|
devicePaths := []string{
|
||||||
|
path.Join("/dev/disk/by-id/", "google-"+pd.pdName),
|
||||||
|
path.Join("/dev/disk/by-id/", "scsi-0Google_PersistentDisk_"+pd.pdName),
|
||||||
|
}
|
||||||
|
|
||||||
if pd.partition != "" {
|
if pd.partition != "" {
|
||||||
devicePath = devicePath + "-part" + pd.partition
|
for i, path := range devicePaths {
|
||||||
|
devicePaths[i] = path + "-part" + pd.partition
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//TODO(jonesdl) There should probably be better method than busy-waiting here.
|
//TODO(jonesdl) There should probably be better method than busy-waiting here.
|
||||||
numTries := 0
|
numTries := 0
|
||||||
|
devicePath := ""
|
||||||
|
// Wait for the disk device to be created
|
||||||
for {
|
for {
|
||||||
_, err := os.Stat(devicePath)
|
for _, path := range devicePaths {
|
||||||
if err == nil {
|
_, err := os.Stat(path)
|
||||||
break
|
if err == nil {
|
||||||
|
devicePath = path
|
||||||
|
break
|
||||||
|
}
|
||||||
|
if err != nil && !os.IsNotExist(err) {
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if err != nil && !os.IsNotExist(err) {
|
if devicePath != "" {
|
||||||
return err
|
break
|
||||||
}
|
}
|
||||||
numTries++
|
numTries++
|
||||||
if numTries == 10 {
|
if numTries == 10 {
|
||||||
|
Loading…
Reference in New Issue
Block a user