From 1b8e015627992ea3bdf659291c596b87b898e4de Mon Sep 17 00:00:00 2001 From: Aanand Prasad Date: Thu, 19 Jun 2014 14:02:16 +0100 Subject: [PATCH] Implement OnLs Signed-off-by: Aanand Prasad --- backends/dockerclient.go | 15 ++++++--------- beam/server.go | 11 +++++++++++ 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/backends/dockerclient.go b/backends/dockerclient.go index 6947f08af6..a25350e7c4 100644 --- a/backends/dockerclient.go +++ b/backends/dockerclient.go @@ -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) { diff --git a/beam/server.go b/beam/server.go index 11b91d9fdf..ecd4ebdaa6 100644 --- a/beam/server.go +++ b/beam/server.go @@ -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...)