Quellcode durchsuchen

Add /mnt link to mounts

JDierkse vor 2 Jahren
Ursprung
Commit
2f1dea86ec
1 geänderte Dateien mit 42 neuen und 4 gelöschten Zeilen
  1. 42 4
      driver.go

+ 42 - 4
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)
 	}
 }
-