Unify and simplify iSCSI administration

This commit is contained in:
2022-08-10 17:09:24 +02:00
parent 80aa03d85e
commit 3368fd71ec
2 changed files with 34 additions and 68 deletions
+10 -44
View File
@@ -7,6 +7,7 @@ import (
"io/ioutil" "io/ioutil"
"os" "os"
"path/filepath" "path/filepath"
"strings"
"sync" "sync"
"time" "time"
@@ -287,22 +288,10 @@ 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"
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 // Get target device
cmd := "ls /host/tmp/iscsi | grep \"" + v.TargetIQN + "\" | head -n 1" cmd := "iscsiadm -m session | grep \"" + v.TargetIQN + "\" | head -n 1 | sed -e 's/.*\\[\\(.*\\)\\].*/\\1/g'"
out, errMsg = util.ExecuteCommandString(cmd) out, errMsg = util.ExecuteCommandString(cmd)
if len(out) > 0 { if len(out) > 0 {
@@ -313,7 +302,9 @@ func (d *iscsiDriver) mountVolume(v *iscsiVolume) error {
return err return err
} }
cmd = "readlink -nf /host/tmp/iscsi/" + out 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) out, errMsg = util.ExecuteCommandString(cmd)
if len(out) > 0 { if len(out) > 0 {
@@ -323,38 +314,11 @@ func (d *iscsiDriver) mountVolume(v *iscsiVolume) error {
err := fmt.Errorf("Unable to locate device: %s", errMsg) err := fmt.Errorf("Unable to locate device: %s", errMsg)
return err return err
} }
}
} else {
// Disk By Path exists
// Get target device out = strings.TrimSuffix(out, "\n")
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
// 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,11 +345,13 @@ func (d *iscsiDriver) unmountVolume(v *iscsiVolume) error {
logrus.Info(err) logrus.Info(err)
} }
if iSCSI.TargetLoggedIn(v.TargetIQN) {
// Logout from iSCSI Target // Logout from iSCSI Target
err := iSCSI.LogoutTarget(v.TargetIQN, v.Host) err := iSCSI.LogoutTarget(v.TargetIQN, v.Host)
if err != nil { if err != nil {
return err return err
} }
}
return nil return nil
} }
+2 -2
View File
@@ -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