[WIP] affuse: Afero Fuse
Afero Fuse is a small wrapper around fuse allowing to mount any afero file system.
Example:
package main
import (
"context"
"os"
"os/signal"
"github.com/sirupsen/logrus"
"github.com/spf13/afero"
"gitlab.bertha.cloud/adphi/affuse"
)
func main() {
logrus.SetLevel(logrus.DebugLevel)
mountPoint := "./test-mount"
if err := os.MkdirAll(mountPoint, os.ModePerm); err != nil {
logrus.Fatal("failed to create mount point")
}
defer os.RemoveAll(mountPoint)
mem := afero.NewMemMapFs()
fs, err := affuse.New(mem)
if err != nil {
logrus.Fatalf("failed to create fs: %v", err)
}
if err := mem.Mkdir("first", os.ModePerm); err != nil {
logrus.Fatal(err)
}
f, err := mem.Create("first/test")
if err != nil {
logrus.Fatal(err)
}
defer f.Close()
if _, err := f.WriteString("success\n"); err != nil {
logrus.Errorf("failed to write file content: %v", err)
}
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt)
ctx, cancel := context.WithCancel(context.Background())
go func() {
<-c
cancel()
}()
defer fs.Unmount()
if err := fs.Mount(ctx, mountPoint); err != nil {
logrus.Error("failed to mount file system")
return
}
}
TODOs:
- Tests
- Some sort of cache
- Proper File implementation