add a bunch of methods to the client end
This commit is contained in:
parent
a5d237df2a
commit
5ab2cbd265
8 changed files with 236 additions and 17 deletions
61
fs/local.go
61
fs/local.go
|
|
@ -4,6 +4,7 @@ import (
|
|||
"io"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"syscall"
|
||||
|
||||
"github.com/barakmich/kubelwagen"
|
||||
"github.com/hanwen/go-fuse/fuse"
|
||||
|
|
@ -28,6 +29,38 @@ func (fs *LocalFs) Handle(r *kubelwagen.Request) *kubelwagen.Response {
|
|||
return fs.openDir(r)
|
||||
case kubelwagen.MethodGetAttr:
|
||||
return fs.getAttr(r)
|
||||
case kubelwagen.MethodStatFs:
|
||||
return fs.statFs(r)
|
||||
case kubelwagen.MethodChmod:
|
||||
return fs.serveFromErr(r, os.Chmod(fs.getPath(r), os.FileMode(r.Mode)))
|
||||
case kubelwagen.MethodChown:
|
||||
return fs.serveFromErr(r, os.Chown(fs.getPath(r), int(r.UID), int(r.GID)))
|
||||
case kubelwagen.MethodTruncate:
|
||||
return fs.serveFromErr(r, os.Truncate(fs.getPath(r), r.Offset))
|
||||
case kubelwagen.MethodMknod:
|
||||
return fs.serveFromErr(r, syscall.Mknod(fs.getPath(r), r.Mode, int(r.Dev)))
|
||||
case kubelwagen.MethodMkdir:
|
||||
return fs.serveFromErr(r, os.Mkdir(fs.getPath(r), os.FileMode(r.Mode)))
|
||||
case kubelwagen.MethodUnlink:
|
||||
return fs.serveFromErr(r, syscall.Unlink(fs.getPath(r)))
|
||||
case kubelwagen.MethodRmdir:
|
||||
return fs.serveFromErr(r, syscall.Rmdir(fs.getPath(r)))
|
||||
case kubelwagen.MethodSymlink:
|
||||
return fs.serveFromErr(r, os.Symlink(r.NewPath, fs.getPath(r)))
|
||||
case kubelwagen.MethodRename:
|
||||
return fs.serveFromErr(r, os.Rename(fs.getPath(r), filepath.Join(fs.base, r.NewPath)))
|
||||
case kubelwagen.MethodLink:
|
||||
return fs.serveFromErr(r, os.Link(fs.getPath(r), filepath.Join(fs.base, r.NewPath)))
|
||||
case kubelwagen.MethodReadLink:
|
||||
f, err := os.Readlink(fs.getPath(r))
|
||||
if err != nil {
|
||||
return kubelwagen.ErrorResp(r, nil)
|
||||
}
|
||||
out := fs.serveFromErr(r, err)
|
||||
out.LinkStr = f
|
||||
return out
|
||||
case kubelwagen.MethodAccess:
|
||||
return fs.serveFromErr(r, syscall.Access(fs.getPath(r), r.Mode))
|
||||
}
|
||||
return &kubelwagen.Response{
|
||||
ID: r.ID,
|
||||
|
|
@ -99,3 +132,31 @@ func (fs *LocalFs) getAttr(r *kubelwagen.Request) *kubelwagen.Response {
|
|||
out.Stat = fuse.ToAttr(fi)
|
||||
return out
|
||||
}
|
||||
|
||||
func (fs *LocalFs) statFs(r *kubelwagen.Request) *kubelwagen.Response {
|
||||
out := &kubelwagen.Response{
|
||||
ID: r.ID,
|
||||
Code: fuse.OK,
|
||||
}
|
||||
s := syscall.Statfs_t{}
|
||||
err := syscall.Statfs(fs.getPath(r), &s)
|
||||
if err != nil {
|
||||
return kubelwagen.ErrorResp(r, err)
|
||||
}
|
||||
g := &fuse.StatfsOut{}
|
||||
g.FromStatfsT(&s)
|
||||
out.Statfs = g
|
||||
return out
|
||||
}
|
||||
|
||||
func (fs *LocalFs) serveFromErr(r *kubelwagen.Request, err error) *kubelwagen.Response {
|
||||
out := &kubelwagen.Response{
|
||||
ID: r.ID,
|
||||
Code: fuse.OK,
|
||||
}
|
||||
if err != nil {
|
||||
return kubelwagen.ErrorResp(r, err)
|
||||
}
|
||||
return out
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue