mirror of https://github.com/docker/docs.git
Implement OnStart and OnStop
Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
This commit is contained in:
parent
440d0b7d60
commit
c1a78b28ec
|
@ -45,7 +45,7 @@ func DockerClientWithConfig(config *DockerClientConfig) beam.Sender {
|
||||||
Server: beam.NewServer(),
|
Server: beam.NewServer(),
|
||||||
}
|
}
|
||||||
b.Server.OnVerb(beam.Attach, beam.Handler(b.attach))
|
b.Server.OnVerb(beam.Attach, beam.Handler(b.attach))
|
||||||
b.Server.OnVerb(beam.Start, beam.Handler(b.start))
|
b.Server.OnStart(b.start)
|
||||||
b.Server.OnLs(b.ls)
|
b.Server.OnLs(b.ls)
|
||||||
b.Server.OnSpawn(b.spawn)
|
b.Server.OnSpawn(b.spawn)
|
||||||
return b.Server, nil
|
return b.Server, nil
|
||||||
|
@ -81,8 +81,7 @@ func (b *dockerClientBackend) attach(ctx *beam.Message) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *dockerClientBackend) start(ctx *beam.Message) error {
|
func (b *dockerClientBackend) start() error {
|
||||||
ctx.Ret.Send(&beam.Message{Verb: beam.Ack})
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -133,8 +132,8 @@ func (b *dockerClientBackend) newContainer(id string) beam.Sender {
|
||||||
c := &container{backend: b, id: id}
|
c := &container{backend: b, id: id}
|
||||||
instance := beam.NewServer()
|
instance := beam.NewServer()
|
||||||
instance.OnVerb(beam.Attach, beam.Handler(c.attach))
|
instance.OnVerb(beam.Attach, beam.Handler(c.attach))
|
||||||
instance.OnVerb(beam.Start, beam.Handler(c.start))
|
instance.OnStart(c.start)
|
||||||
instance.OnVerb(beam.Stop, beam.Handler(c.stop))
|
instance.OnStop(c.stop)
|
||||||
instance.OnVerb(beam.Get, beam.Handler(c.get))
|
instance.OnVerb(beam.Get, beam.Handler(c.get))
|
||||||
return instance
|
return instance
|
||||||
}
|
}
|
||||||
|
@ -160,7 +159,7 @@ func (c *container) attach(ctx *beam.Message) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *container) start(ctx *beam.Message) error {
|
func (c *container) start() error {
|
||||||
path := fmt.Sprintf("/containers/%s/start", c.id)
|
path := fmt.Sprintf("/containers/%s/start", c.id)
|
||||||
resp, err := c.backend.client.call("POST", path, "{}")
|
resp, err := c.backend.client.call("POST", path, "{}")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -173,13 +172,10 @@ func (c *container) start(ctx *beam.Message) error {
|
||||||
if resp.StatusCode != 204 {
|
if resp.StatusCode != 204 {
|
||||||
return fmt.Errorf("expected status code 204, got %d:\n%s", resp.StatusCode, respBody)
|
return fmt.Errorf("expected status code 204, got %d:\n%s", resp.StatusCode, respBody)
|
||||||
}
|
}
|
||||||
if _, err := ctx.Ret.Send(&beam.Message{Verb: beam.Ack}); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *container) stop(ctx *beam.Message) error {
|
func (c *container) stop() error {
|
||||||
path := fmt.Sprintf("/containers/%s/stop", c.id)
|
path := fmt.Sprintf("/containers/%s/stop", c.id)
|
||||||
resp, err := c.backend.client.call("POST", path, "")
|
resp, err := c.backend.client.call("POST", path, "")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -192,9 +188,6 @@ func (c *container) stop(ctx *beam.Message) error {
|
||||||
if resp.StatusCode != 204 {
|
if resp.StatusCode != 204 {
|
||||||
return fmt.Errorf("expected status code 204, got %d:\n%s", resp.StatusCode, respBody)
|
return fmt.Errorf("expected status code 204, got %d:\n%s", resp.StatusCode, respBody)
|
||||||
}
|
}
|
||||||
if _, err := ctx.Ret.Send(&beam.Message{Verb: beam.Ack}); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -49,6 +49,26 @@ func (s *Server) OnSpawn(h func(cmd ...string) (Sender, error)) *Server {
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *Server) OnStart(h func() error) *Server {
|
||||||
|
return s.OnVerb(Start, Handler(func(msg *Message) error {
|
||||||
|
if err := h(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
_, err := msg.Ret.Send(&Message{Verb: Ack})
|
||||||
|
return err
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Server) OnStop(h func() error) *Server {
|
||||||
|
return s.OnVerb(Stop, Handler(func(msg *Message) error {
|
||||||
|
if err := h(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
_, err := msg.Ret.Send(&Message{Verb: Ack})
|
||||||
|
return err
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
|
||||||
func (s *Server) Send(msg *Message) (Receiver, error) {
|
func (s *Server) Send(msg *Message) (Receiver, error) {
|
||||||
if h, exists := s.handlers[msg.Verb]; exists {
|
if h, exists := s.handlers[msg.Verb]; exists {
|
||||||
return h.Send(msg)
|
return h.Send(msg)
|
||||||
|
|
Loading…
Reference in New Issue