From 1a58d00221c816475973da4b9880046d77189b60 Mon Sep 17 00:00:00 2001 From: JDierkse Date: Thu, 4 Aug 2022 20:29:48 +0200 Subject: [PATCH] Support Synology iSCSI administration --- driver.go | 86 ++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 66 insertions(+), 20 deletions(-) diff --git a/driver.go b/driver.go index 1ff2b00..a4044eb 100644 --- a/driver.go +++ b/driver.go @@ -282,31 +282,77 @@ func (d *iscsiDriver) mountVolume(v *iscsiVolume) error { // Wait for Physical Volume to appear time.Sleep(500 * time.Millisecond) - // Get target device - cmd := "ls /dev/disk/by-path | grep \"" + v.TargetIQN + "\" | head -n 1" - out, errMsg := util.ExecuteCommandString(cmd) + out := "" + errMsg := "" - if len(out) > 0 { - logrus.Debug(out) - } - if len(errMsg) > 0 { - err := fmt.Errorf("Unable to find device: %s", errMsg) - return err + diskPathFolder := "/dev/disk/by-path" + fi, err := os.Lstat(diskPathFolder) + if os.IsNotExist(err) { + // Disk By Path doesn't exist + + iscsiPathFolder := "/host/tmp/iscsi" + fi, err = os.Lstat(iscsiPathFolder) + if os.IsNotExist(err) { + // iSCSI Administration folder doesn't exist + + return err + } else { + // iSCSI Administration folder exists, seen on Synology systems + + // Get target device + cmd := "ls /host/tmp/iscsi | grep \"" + v.TargetIQN + "\" | head -n 1" + out, errMsg = util.ExecuteCommandString(cmd) + + if len(out) > 0 { + logrus.Debug(out) + } + if len(errMsg) > 0 { + err := fmt.Errorf("Unable to find device: %s", errMsg) + return err + } + + cmd = "readlink -nf /host/tmp/iscsi/" + out + out, errMsg = util.ExecuteCommandString(cmd) + + if len(out) > 0 { + logrus.Debug(out) + } + if len(errMsg) > 0 { + err := fmt.Errorf("Unable to locate device: %s", errMsg) + return err + } + } + } else { + // Disk By Path exists + + // Get target device + cmd := "ls /dev/disk/by-path | grep \"" + v.TargetIQN + "\" | head -n 1" + out, errMsg = util.ExecuteCommandString(cmd) + + if len(out) > 0 { + logrus.Debug(out) + } + if len(errMsg) > 0 { + err := fmt.Errorf("Unable to find device: %s", errMsg) + return err + } + + cmd = "readlink -nf /dev/disk/by-path/" + out + out, errMsg = util.ExecuteCommandString(cmd) + + if len(out) > 0 { + logrus.Debug(out) + } + if len(errMsg) > 0 { + err := fmt.Errorf("Unable to locate device: %s", errMsg) + return err + } } - cmd = "readlink -nf /dev/disk/by-path/" + out - out, errMsg = util.ExecuteCommandString(cmd) - - if len(out) > 0 { - logrus.Debug(out) - } - if len(errMsg) > 0 { - err := fmt.Errorf("Unable to locate device: %s", errMsg) - return err - } + _ = fi // Mount - cmd = "mount " + out + " " + v.Mountpoint + cmd := "mount " + out + " " + v.Mountpoint out, errMsg = util.ExecuteCommandString(cmd) if len(out) > 0 {