Unify and simplify iSCSI administration
This commit is contained in:
@@ -7,6 +7,7 @@ import (
|
|||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@@ -287,74 +288,37 @@ func (d *iscsiDriver) mountVolume(v *iscsiVolume) error {
|
|||||||
out := ""
|
out := ""
|
||||||
errMsg := ""
|
errMsg := ""
|
||||||
|
|
||||||
diskPathFolder := "/dev/disk/by-path"
|
// TODO: Move this feature to iscsi driver
|
||||||
fi, err := os.Lstat(diskPathFolder)
|
|
||||||
if os.IsNotExist(err) {
|
|
||||||
// Disk By Path doesn't exist
|
|
||||||
|
|
||||||
iscsiPathFolder := "/host/tmp/iscsi"
|
// Get target device
|
||||||
fi, err = os.Lstat(iscsiPathFolder)
|
cmd := "iscsiadm -m session | grep \"" + v.TargetIQN + "\" | head -n 1 | sed -e 's/.*\\[\\(.*\\)\\].*/\\1/g'"
|
||||||
if os.IsNotExist(err) {
|
out, errMsg = util.ExecuteCommandString(cmd)
|
||||||
// iSCSI Administration folder doesn't exist
|
|
||||||
|
|
||||||
return err
|
if len(out) > 0 {
|
||||||
} else {
|
logrus.Debug(out)
|
||||||
// iSCSI Administration folder exists, seen on Synology systems
|
}
|
||||||
|
if len(errMsg) > 0 {
|
||||||
// Get target device
|
err := fmt.Errorf("Unable to find device: %s", errMsg)
|
||||||
cmd := "ls /host/tmp/iscsi | grep \"" + v.TargetIQN + "\" | head -n 1"
|
return err
|
||||||
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
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_ = fi
|
out = strings.TrimSuffix(out, "\n")
|
||||||
|
|
||||||
|
cmd = "iscsiadm -m session -r " + out + " -P 3 | grep \"Attached scsi disk\" | sed -e 's/.*Attached scsi disk \\([^\\t]*\\).*/\\/dev\\/\\1/g'"
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
|
out = strings.TrimSuffix(out, "\n")
|
||||||
|
|
||||||
// Mount
|
// Mount
|
||||||
cmd := "mount " + out + " " + v.Mountpoint
|
cmd = "mount " + out + " " + v.Mountpoint
|
||||||
out, errMsg = util.ExecuteCommandString(cmd)
|
out, errMsg = util.ExecuteCommandString(cmd)
|
||||||
|
|
||||||
if len(out) > 0 {
|
if len(out) > 0 {
|
||||||
@@ -381,10 +345,12 @@ func (d *iscsiDriver) unmountVolume(v *iscsiVolume) error {
|
|||||||
logrus.Info(err)
|
logrus.Info(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Logout from iSCSI Target
|
if iSCSI.TargetLoggedIn(v.TargetIQN) {
|
||||||
err := iSCSI.LogoutTarget(v.TargetIQN, v.Host)
|
// Logout from iSCSI Target
|
||||||
if err != nil {
|
err := iSCSI.LogoutTarget(v.TargetIQN, v.Host)
|
||||||
return err
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
+2
-2
@@ -15,8 +15,8 @@ iscsiadm -m node -T ${IQN} -p ${HOST} -l
|
|||||||
|
|
||||||
sleep 0.5
|
sleep 0.5
|
||||||
|
|
||||||
DEVICEPATH=$(ls /dev/disk/by-path | grep "${IQN}" | head -n 1)
|
SESSIONID=$(iscsiadm -m session | grep "${IQN}" | head -n 1 | sed -e 's/.*\[\(.*\)\].*/\1/g')
|
||||||
DEVICE=$(readlink -nf /dev/disk/by-path/${DEVICEPATH})
|
DEVICE=$(iscsiadm -m session -r ${SESSIONID} -P 3 | grep "Attached scsi disk" | sed -e 's/.*Attached scsi disk \([^\t]*\).*/\/dev\/\1/g')
|
||||||
|
|
||||||
FILESYSTEM=$(blkid ${DEVICE})
|
FILESYSTEM=$(blkid ${DEVICE})
|
||||||
if [ -z "${FILESYSTEM}" ]; then
|
if [ -z "${FILESYSTEM}" ]; then
|
||||||
|
|||||||
Reference in New Issue
Block a user