From 2f1dea86ec2ed7c2b129caa8ab085da183b1b9f9 Mon Sep 17 00:00:00 2001 From: JDierkse Date: Fri, 29 Sep 2023 16:07:34 +0200 Subject: [PATCH] Add /mnt link to mounts --- driver.go | 46 ++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 42 insertions(+), 4 deletions(-) diff --git a/driver.go b/driver.go index f3b0bfd..303e2e5 100644 --- a/driver.go +++ b/driver.go @@ -14,6 +14,7 @@ import ( // Vendors "iscsi" "util" + "github.com/Sirupsen/logrus" "github.com/docker/go-plugins-helpers/volume" ) @@ -21,7 +22,7 @@ import ( var iSCSI iscsi.ISCSIPlugin type iscsiVolume struct { - Host string + Host string TargetIQN string Options []string @@ -269,6 +270,7 @@ func (d *iscsiDriver) Capabilities() *volume.CapabilitiesResponse { // Local Functions func (d *iscsiDriver) mountVolume(v *iscsiVolume) error { // Discover iSCSI LUNs + logrus.Debugf("Discovering %s", v.Host) err := iSCSI.DiscoverLUNs(v.Host) if err != nil { return err @@ -276,6 +278,7 @@ func (d *iscsiDriver) mountVolume(v *iscsiVolume) error { if !iSCSI.TargetLoggedIn(v.TargetIQN) { // Login to iSCSI Target + logrus.Debugf("Logging in %s", v.TargetIQN) err = iSCSI.LoginTarget(v.TargetIQN, v.Host) if err != nil { return err @@ -318,6 +321,7 @@ func (d *iscsiDriver) mountVolume(v *iscsiVolume) error { device := strings.TrimSuffix(out, "\n") // FSCK + logrus.Debugf("Checking %s", device) cmd = "e2fsck -p " + device out, errMsg = util.ExecuteCommandString(cmd) @@ -330,6 +334,7 @@ func (d *iscsiDriver) mountVolume(v *iscsiVolume) error { } // Mount + logrus.Debugf("Mounting %s", device) cmd = "mount -o discard " + device + " " + v.Mountpoint out, errMsg = util.ExecuteCommandString(cmd) @@ -341,14 +346,47 @@ func (d *iscsiDriver) mountVolume(v *iscsiVolume) error { return err } + // Get MountPoint + cmd = "chroot /host docker plugin ls --no-trunc | grep volume-iscsi | awk '{print $1;}' | tr -d '\n'" + out, errMsg = util.ExecuteCommandString(cmd) + mountPath := "/opt/docker/system/docker/plugins/" + out + "/propagated-mount/" + mountPoint := strings.Replace(v.Mountpoint, "/var/lib/docker/volumes/", mountPath, -1) + + // Link + logrus.Debugf("Linking %s", v.TargetIQN) + cmd = "ln -s " + mountPoint + " /host/mnt/iSCSI_" + v.TargetIQN + out, errMsg = util.ExecuteCommandString(cmd) + + if len(out) > 0 { + logrus.Debug(out) + } + if len(errMsg) > 0 { + err := fmt.Errorf("Unable to Link to Mounted Volume: %s", errMsg) + return err + } + return nil } func (d *iscsiDriver) unmountVolume(v *iscsiVolume) error { - // Unmount - cmd := "umount " + v.Mountpoint + // Unlink + logrus.Debugf("Unlinking %s", v.TargetIQN) + cmd := "rm -f /host/mnt/iSCSI_" + v.TargetIQN out, errMsg := util.ExecuteCommandString(cmd) + if len(out) > 0 { + logrus.Debug(out) + } + if len(errMsg) > 0 { + err := fmt.Errorf("Unable to Remove Link: %s", errMsg) + logrus.Info(err) + } + + // Unmount + logrus.Debugf("Unmounting %s", v.Mountpoint) + cmd = "umount " + v.Mountpoint + out, errMsg = util.ExecuteCommandString(cmd) + if len(out) > 0 { logrus.Debug(out) } @@ -359,6 +397,7 @@ func (d *iscsiDriver) unmountVolume(v *iscsiVolume) error { if iSCSI.TargetLoggedIn(v.TargetIQN) { // Logout from iSCSI Target + logrus.Debugf("Logging out %s", v.TargetIQN) err := iSCSI.LogoutTarget(v.TargetIQN, v.Host) if err != nil { return err @@ -380,4 +419,3 @@ func (d *iscsiDriver) saveState() { logrus.WithField("savestate", d.statePath).Error(err) } } -