k8s-csi-s3/pkg/mounter/rclone.go

55 lines
1.2 KiB
Go
Raw Normal View History

package mounter
2019-03-07 19:27:02 +00:00
import (
"fmt"
"path"
2021-08-24 10:33:26 +00:00
"github.com/yandex-cloud/k8s-csi-s3/pkg/s3"
2019-03-07 19:27:02 +00:00
)
// Implements Mounter
type rcloneMounter struct {
meta *s3.FSMeta
2019-03-07 19:27:02 +00:00
url string
region string
accessKeyID string
secretAccessKey string
}
const (
rcloneCmd = "rclone"
)
func newRcloneMounter(meta *s3.FSMeta, cfg *s3.Config) (Mounter, error) {
2019-03-07 19:27:02 +00:00
return &rcloneMounter{
meta: meta,
2019-03-07 19:27:02 +00:00
url: cfg.Endpoint,
region: cfg.Region,
accessKeyID: cfg.AccessKeyID,
secretAccessKey: cfg.SecretAccessKey,
}, nil
}
func (rclone *rcloneMounter) Mount(target, volumeID string) error {
2019-03-07 19:27:02 +00:00
args := []string{
"mount",
2021-07-16 13:33:13 +00:00
fmt.Sprintf(":s3:%s", path.Join(rclone.meta.BucketName, rclone.meta.Prefix)),
target,
2019-03-07 19:27:02 +00:00
"--daemon",
"--s3-provider=AWS",
"--s3-env-auth=true",
fmt.Sprintf("--s3-endpoint=%s", rclone.url),
"--allow-other",
"--vfs-cache-mode=writes",
}
if rclone.region != "" {
args = append(args, fmt.Sprintf("--s3-region=%s", rclone.region))
}
2021-07-16 13:12:57 +00:00
args = append(args, rclone.meta.MountOptions...)
2023-06-03 07:36:03 +00:00
envs := []string{
"AWS_ACCESS_KEY_ID=" + rclone.accessKeyID,
"AWS_SECRET_ACCESS_KEY=" + rclone.secretAccessKey,
}
return fuseMount(target, rcloneCmd, args, envs)
2019-03-07 19:27:02 +00:00
}