From 89c0aa735ae4d939c557957caab9147629fc4ff4 Mon Sep 17 00:00:00 2001 From: Xiangfei Zhu Date: Mon, 21 Nov 2016 22:49:18 -0800 Subject: [PATCH] Adding rescan scsi controller for cinder For lsilogic scsi controller, attached cinder volume does not appear under /dev/ automatically unless do a rescan. This approach was used in vSphere volume provider before PR #27496 dropped support for lsilogic scsi controller. --- pkg/volume/cinder/cinder_util.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/pkg/volume/cinder/cinder_util.go b/pkg/volume/cinder/cinder_util.go index 934006aa723..baefc3e785b 100644 --- a/pkg/volume/cinder/cinder_util.go +++ b/pkg/volume/cinder/cinder_util.go @@ -19,6 +19,7 @@ package cinder import ( "errors" "fmt" + "io/ioutil" "os" "strings" "time" @@ -174,6 +175,9 @@ func (util *CinderDiskUtil) CreateVolume(c *cinderVolumeProvisioner) (volumeID s } func probeAttachedVolume() error { + // rescan scsi bus + scsiHostRescan() + executor := exec.New() args := []string{"trigger"} cmd := executor.Command("/usr/bin/udevadm", args...) @@ -185,3 +189,14 @@ func probeAttachedVolume() error { glog.V(4).Infof("Successfully probed all attachments") return nil } + +func scsiHostRescan() { + scsi_path := "/sys/class/scsi_host/" + if dirs, err := ioutil.ReadDir(scsi_path); err == nil { + for _, f := range dirs { + name := scsi_path + f.Name() + "/scan" + data := []byte("- - -") + ioutil.WriteFile(name, data, 0666) + } + } +}