diff --git a/pkg/volume/scaleio/sio_client.go b/pkg/volume/scaleio/sio_client.go index 8742905ed09..ac26868d324 100644 --- a/pkg/volume/scaleio/sio_client.go +++ b/pkg/volume/scaleio/sio_client.go @@ -21,7 +21,6 @@ import ( "fmt" "io/ioutil" "os" - "os/exec" "path" "path/filepath" "regexp" @@ -30,6 +29,8 @@ import ( "sync" "time" + "k8s.io/kubernetes/pkg/util/mount" + sio "github.com/codedellemc/goscaleio" siotypes "github.com/codedellemc/goscaleio/types/v1" "github.com/golang/glog" @@ -77,13 +78,15 @@ type sioClient struct { inited bool diskRegex *regexp.Regexp mtx sync.Mutex + exec mount.Exec } -func newSioClient(gateway, username, password string, sslEnabled bool) (*sioClient, error) { +func newSioClient(gateway, username, password string, sslEnabled bool, exec mount.Exec) (*sioClient, error) { client := new(sioClient) client.gateway = gateway client.username = username client.password = password + client.exec = exec if sslEnabled { client.insecure = false client.certsEnabled = true @@ -296,7 +299,7 @@ func (c *sioClient) IID() (string, error) { if c.instanceID == "" { cmd := c.getSdcCmd() - output, err := exec.Command(cmd, "--query_guid").Output() + output, err := c.exec.Run(cmd, "--query_guid") if err != nil { glog.Error(log("drv_cfg --query_guid failed: %v", err)) return "", err @@ -355,7 +358,7 @@ func (c *sioClient) Devs() (map[string]string, error) { volumeMap := make(map[string]string) // grab the sdc tool output - out, err := exec.Command(c.getSdcCmd(), "--query_vols").Output() + out, err := c.exec.Run(c.getSdcCmd(), "--query_vols") if err != nil { glog.Error(log("sdc --query_vols failed: %v", err)) return nil, err diff --git a/pkg/volume/scaleio/sio_mgr.go b/pkg/volume/scaleio/sio_mgr.go index 83d5e498dc8..ecde665a1ac 100644 --- a/pkg/volume/scaleio/sio_mgr.go +++ b/pkg/volume/scaleio/sio_mgr.go @@ -20,6 +20,8 @@ import ( "errors" "strconv" + "k8s.io/kubernetes/pkg/util/mount" + "github.com/golang/glog" siotypes "github.com/codedellemc/goscaleio/types/v1" @@ -36,9 +38,10 @@ type storageInterface interface { type sioMgr struct { client sioInterface configData map[string]string + exec mount.Exec } -func newSioMgr(configs map[string]string) (*sioMgr, error) { +func newSioMgr(configs map[string]string, exec mount.Exec) (*sioMgr, error) { if configs == nil { return nil, errors.New("missing configuration data") } @@ -47,7 +50,7 @@ func newSioMgr(configs map[string]string) (*sioMgr, error) { configs[confKey.sdcRootPath] = defaultString(configs[confKey.sdcRootPath], sdcRootPath) configs[confKey.storageMode] = defaultString(configs[confKey.storageMode], "ThinProvisioned") - mgr := &sioMgr{configData: configs} + mgr := &sioMgr{configData: configs, exec: exec} return mgr, nil } @@ -67,7 +70,7 @@ func (m *sioMgr) getClient() (sioInterface, error) { certsEnabled := b glog.V(4).Info(log("creating new client for gateway %s", gateway)) - client, err := newSioClient(gateway, username, password, certsEnabled) + client, err := newSioClient(gateway, username, password, certsEnabled, m.exec) if err != nil { glog.Error(log("failed to create scaleio client: %v", err)) return nil, err diff --git a/pkg/volume/scaleio/sio_mgr_test.go b/pkg/volume/scaleio/sio_mgr_test.go index 3d580b6b99b..e2fe5c2002b 100644 --- a/pkg/volume/scaleio/sio_mgr_test.go +++ b/pkg/volume/scaleio/sio_mgr_test.go @@ -21,6 +21,8 @@ import ( "testing" "time" + "k8s.io/kubernetes/pkg/util/mount" + siotypes "github.com/codedellemc/goscaleio/types/v1" ) @@ -42,7 +44,7 @@ var ( ) func newTestMgr(t *testing.T) *sioMgr { - mgr, err := newSioMgr(fakeConfig) + mgr, err := newSioMgr(fakeConfig, mount.NewFakeExec(nil)) if err != nil { t.Error(err) } @@ -51,7 +53,7 @@ func newTestMgr(t *testing.T) *sioMgr { } func TestMgrNew(t *testing.T) { - mgr, err := newSioMgr(fakeConfig) + mgr, err := newSioMgr(fakeConfig, mount.NewFakeExec(nil)) if err != nil { t.Fatal(err) } diff --git a/pkg/volume/scaleio/sio_volume.go b/pkg/volume/scaleio/sio_volume.go index f72b5a1adbb..079df8f67f9 100644 --- a/pkg/volume/scaleio/sio_volume.go +++ b/pkg/volume/scaleio/sio_volume.go @@ -386,7 +386,7 @@ func (v *sioVolume) setSioMgr() error { return err } - mgr, err := newSioMgr(configData) + mgr, err := newSioMgr(configData, v.plugin.host.GetExec(v.plugin.GetPluginName())) if err != nil { glog.Error(log("failed to reset sio manager: %v", err)) return err @@ -418,7 +418,7 @@ func (v *sioVolume) resetSioMgr() error { return err } - mgr, err := newSioMgr(configData) + mgr, err := newSioMgr(configData, v.plugin.host.GetExec(v.plugin.GetPluginName())) if err != nil { glog.Error(log("failed to reset scaleio mgr: %v", err)) return err @@ -452,7 +452,7 @@ func (v *sioVolume) setSioMgrFromConfig() error { return err } - mgr, err := newSioMgr(data) + mgr, err := newSioMgr(data, v.plugin.host.GetExec(v.plugin.GetPluginName())) if err != nil { glog.Error(log("failed while setting scaleio mgr from config: %v", err)) return err @@ -481,7 +481,7 @@ func (v *sioVolume) setSioMgrFromSpec() error { return err } - mgr, err := newSioMgr(configData) + mgr, err := newSioMgr(configData, v.plugin.host.GetExec(v.plugin.GetPluginName())) if err != nil { glog.Error(log("failed to reset sio manager: %v", err)) return err