diff options
Diffstat (limited to 'pkg/resources/namespace.go')
-rw-r--r-- | pkg/resources/namespace.go | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/pkg/resources/namespace.go b/pkg/resources/namespace.go new file mode 100644 index 0000000..df08c2d --- /dev/null +++ b/pkg/resources/namespace.go @@ -0,0 +1,68 @@ +package resources + +import ( + "context" + "math/rand" + + "github.com/docker/go-p9p" + v1 "k8s.io/api/core/v1" + "k8s.io/client-go/kubernetes" +) + +type NamespaceRef struct { + namespace *v1.Namespace + client kubernetes.Interface + session Session + info *p9p.Dir + readdir *p9p.Readdir +} + +func (r *NamespaceRef) Info() p9p.Dir { + if r.info != nil { + return *r.info + } + + dir := p9p.Dir{} + dir.Qid.Path = rand.Uint64() + dir.Qid.Version = uint32(r.namespace.Generation) + + dir.Name = r.namespace.Name + dir.Mode = 0664 + dir.Length = 0 + dir.AccessTime = r.namespace.CreationTimestamp.Time + dir.ModTime = r.namespace.CreationTimestamp.Time + dir.MUID = "none" + + uname, _ := r.session.GetAuth() + dir.UID = uname + dir.GID = uname + + dir.Qid.Type |= p9p.QTDIR + dir.Mode |= p9p.DMDIR + + r.info = &dir + return dir +} + +func (r *NamespaceRef) Get(name string) (Ref, error) { + switch name { + case "deployments": + return NewDeployments(r.namespace.Name, r.session), nil + } + + return nil, p9p.ErrNotfound +} + +func (r *NamespaceRef) Read(ctx context.Context, p []byte, offset int64) (n int, err error) { + if r.readdir != nil { + return r.readdir.Read(ctx, p, offset) + } + + deployments := NewDeployments(r.namespace.Name, r.session) + dir := []p9p.Dir{ + deployments.Info(), + } + + r.readdir = p9p.NewFixedReaddir(p9p.NewCodec(), dir) + return r.readdir.Read(ctx, p, offset) +} |