Commit d78d476d authored by Vitaliy Filippov's avatar Vitaliy Filippov
Browse files

Add mount options support

parent 0433ead3
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import (
	"fmt"
	"io"
	"path"
	"regexp"
	"strings"

	"github.com/ctrox/csi-s3/pkg/mounter"
@@ -50,6 +51,20 @@ func (cs *controllerServer) CreateVolume(ctx context.Context, req *csi.CreateVol
	volumeID := sanitizeVolumeID(req.GetName())
	bucketName := volumeID
	prefix := ""
	mountOptions := make([]string, 0)
	mountOptStr := params[mounter.OptionsKey]
	if mountOptStr != "" {
		re, _ := regexp.Compile(`([^\s"]+|"([^"\\]+|\\")*")+`)
		re2, _ := regexp.Compile(`"([^"\\]+|\\")*"`)
		re3, _ := regexp.Compile(`\\(.)`)
		for _, opt := range re.FindAll([]byte(mountOptStr), -1) {
			// Unquote options
			opt = re2.ReplaceAllFunc(opt, func(q []byte) []byte {
				return re3.ReplaceAll(q[1 : len(q)-1], []byte("$1"))
			})
			mountOptions = append(mountOptions, string(opt))
		}
	}

	// check if bucket name is overridden
	if nameOverride, ok := params[mounter.BucketKey]; ok {
@@ -77,6 +92,7 @@ func (cs *controllerServer) CreateVolume(ctx context.Context, req *csi.CreateVol
		BucketName:    bucketName,
		Prefix:        prefix,
		Mounter:       mounterType,
		MountOptions:  mountOptions,
		CapacityBytes: capacityBytes,
		FSPath:        defaultFsPath,
	}
+16 −3
Original line number Diff line number Diff line
@@ -4,6 +4,7 @@ import (
	"fmt"
	"os"
	"path"
	"strings"

	"context"

@@ -49,15 +50,27 @@ func (goofys *goofysMounter) Unstage(stageTarget string) error {
}

func (goofys *goofysMounter) Mount(source string, target string) error {
	mountOptions := make(map[string]string)
	for _, opt := range goofys.meta.MountOptions {
		s := 0
		if len(opt) >= 2 && opt[0] == '-' && opt[1] == byte('-') {
			s = 2
		}
		p := strings.Index(opt, "=")
		if p > 0 {
			mountOptions[string(opt[s : p])] = string(opt[p : ])
		} else {
			mountOptions[string(opt[s : ])] = ""
		}
	}
	mountOptions["allow_other"] = ""
	goofysCfg := &goofysApi.Config{
		MountPoint: target,
		Endpoint:   goofys.endpoint,
		Region:     goofys.region,
		DirMode:    0755,
		FileMode:   0644,
		MountOptions: map[string]string{
			"allow_other": "",
		},
		MountOptions: mountOptions,
	}

	os.Setenv("AWS_ACCESS_KEY_ID", goofys.accessKeyID)
+1 −0
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ const (
	rcloneMounterType   = "rclone"
	TypeKey             = "mounter"
	BucketKey           = "bucket"
	OptionsKey          = "options"
)

// New returns a new mounter depending on the mounterType parameter
+1 −1
Original line number Diff line number Diff line
@@ -50,9 +50,9 @@ func (rclone *rcloneMounter) Mount(source string, target string) error {
		fmt.Sprintf("--s3-region=%s", rclone.region),
		fmt.Sprintf("--s3-endpoint=%s", rclone.url),
		"--allow-other",
		// TODO: make this configurable
		"--vfs-cache-mode=writes",
	}
	args = append(args, rclone.meta.MountOptions...)
	os.Setenv("AWS_ACCESS_KEY_ID", rclone.accessKeyID)
	os.Setenv("AWS_SECRET_ACCESS_KEY", rclone.secretAccessKey)
	return fuseMount(target, rcloneCmd, args)
+1 −0
Original line number Diff line number Diff line
@@ -50,6 +50,7 @@ func (s3fs *s3fsMounter) Mount(source string, target string) error {
		"-o", "allow_other",
		"-o", "mp_umask=000",
	}
	args = append(args, s3fs.meta.MountOptions...)
	return fuseMount(target, s3fsCmd, args)
}

Loading