Implement OnLs

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
This commit is contained in:
Aanand Prasad 2014-06-19 14:02:16 +01:00
parent 181b20d855
commit 1b8e015627
2 changed files with 17 additions and 9 deletions

View File

@ -46,7 +46,7 @@ func DockerClientWithConfig(config *DockerClientConfig) beam.Sender {
}
b.Server.OnVerb(beam.Attach, beam.Handler(b.attach))
b.Server.OnVerb(beam.Start, beam.Handler(b.start))
b.Server.OnVerb(beam.Ls, beam.Handler(b.ls))
b.Server.OnLs(b.ls)
b.Server.OnSpawn(b.spawn)
return b.Server, nil
})
@ -86,28 +86,25 @@ func (b *dockerClientBackend) start(ctx *beam.Message) error {
return nil
}
func (b *dockerClientBackend) ls(ctx *beam.Message) error {
func (b *dockerClientBackend) ls() ([]string, error) {
resp, err := b.client.call("GET", "/containers/json", "")
if err != nil {
return fmt.Errorf("get: %v", err)
return nil, fmt.Errorf("get: %v", err)
}
// FIXME: check for response error
c := engine.NewTable("Created", 0)
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return fmt.Errorf("read body: %v", err)
return nil, fmt.Errorf("read body: %v", err)
}
if _, err := c.ReadListFrom(body); err != nil {
return fmt.Errorf("readlist: %v", err)
return nil, fmt.Errorf("readlist: %v", err)
}
names := []string{}
for _, env := range c.Data {
names = append(names, env.GetList("Names")[0][1:])
}
if _, err := ctx.Ret.Send(&beam.Message{Verb: beam.Set, Args: names}); err != nil {
return fmt.Errorf("send response: %v", err)
}
return nil
return names, nil
}
func (b *dockerClientBackend) spawn(cmd ...string) (beam.Sender, error) {

View File

@ -27,6 +27,17 @@ func (s *Server) OnVerb(v Verb, h Sender) *Server {
return s
}
func (s *Server) OnLs(h func() ([]string, error)) *Server {
return s.OnVerb(Ls, Handler(func(msg *Message) error {
names, err := h()
if err != nil {
return err
}
_, err = msg.Ret.Send(&Message{Verb: Set, Args: names})
return err
}))
}
func (s *Server) OnSpawn(h func(cmd ...string) (Sender, error)) *Server {
return s.OnVerb(Spawn, Handler(func(msg *Message) error {
obj, err := h(msg.Args...)