Loading pkg/driver/controllerserver.go +16 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import ( "fmt" "io" "path" "regexp" "strings" "github.com/ctrox/csi-s3/pkg/mounter" Loading Loading @@ -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 { Loading Loading @@ -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, } Loading pkg/mounter/goofys.go +16 −3 Original line number Diff line number Diff line Loading @@ -4,6 +4,7 @@ import ( "fmt" "os" "path" "strings" "context" Loading Loading @@ -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) Loading pkg/mounter/mounter.go +1 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ const ( rcloneMounterType = "rclone" TypeKey = "mounter" BucketKey = "bucket" OptionsKey = "options" ) // New returns a new mounter depending on the mounterType parameter Loading pkg/mounter/rclone.go +1 −1 Original line number Diff line number Diff line Loading @@ -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) Loading pkg/mounter/s3fs.go +1 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
pkg/driver/controllerserver.go +16 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import ( "fmt" "io" "path" "regexp" "strings" "github.com/ctrox/csi-s3/pkg/mounter" Loading Loading @@ -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 { Loading Loading @@ -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, } Loading
pkg/mounter/goofys.go +16 −3 Original line number Diff line number Diff line Loading @@ -4,6 +4,7 @@ import ( "fmt" "os" "path" "strings" "context" Loading Loading @@ -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) Loading
pkg/mounter/mounter.go +1 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ const ( rcloneMounterType = "rclone" TypeKey = "mounter" BucketKey = "bucket" OptionsKey = "options" ) // New returns a new mounter depending on the mounterType parameter Loading
pkg/mounter/rclone.go +1 −1 Original line number Diff line number Diff line Loading @@ -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) Loading
pkg/mounter/s3fs.go +1 −0 Original line number Diff line number Diff line Loading @@ -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