1
0
Fork 0
mirror of https://github.com/moby/moby.git synced 2022-11-09 12:21:53 -05:00

New engine command: 'wait'

This commit is contained in:
Solomon Hykes 2013-11-25 01:05:59 +00:00
parent 7fd64e0196
commit 3569d080af
3 changed files with 27 additions and 11 deletions

14
api.go
View file

@ -710,14 +710,18 @@ func postContainersWait(srv *Server, version float64, w http.ResponseWriter, r *
if vars == nil { if vars == nil {
return fmt.Errorf("Missing parameter") return fmt.Errorf("Missing parameter")
} }
name := vars["name"] job := srv.Eng.Job("wait", vars["name"])
var statusStr string
status, err := srv.ContainerWait(name) job.Stdout.AddString(&statusStr)
if err := job.Run(); err != nil {
return err
}
// Parse a 16-bit encoded integer to map typical unix exit status.
status, err := strconv.ParseInt(statusStr, 10, 16)
if err != nil { if err != nil {
return err return err
} }
return writeJSON(w, http.StatusOK, &APIWait{StatusCode: int(status)})
return writeJSON(w, http.StatusOK, &APIWait{StatusCode: status})
} }
func postContainersResize(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error { func postContainersResize(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {

View file

@ -256,7 +256,7 @@ func TestRmi(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
if _, err := srv.ContainerWait(containerID); err != nil { if err := eng.Job("wait", containerID).Run(); err != nil {
t.Fatal(err) t.Fatal(err)
} }
@ -281,7 +281,7 @@ func TestRmi(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
if _, err := srv.ContainerWait(containerID); err != nil { if err := eng.Job("wait", containerID).Run(); err != nil {
t.Fatal(err) t.Fatal(err)
} }

View file

@ -82,6 +82,10 @@ func jobInitApi(job *engine.Job) engine.Status {
job.Error(err) job.Error(err)
return engine.StatusErr return engine.StatusErr
} }
if err := job.Eng.Register("wait", srv.ContainerWait); err != nil {
job.Error(err)
return engine.StatusErr
}
return engine.StatusOK return engine.StatusOK
} }
@ -1718,11 +1722,19 @@ func (srv *Server) ContainerStop(name string, t int) error {
return nil return nil
} }
func (srv *Server) ContainerWait(name string) (int, error) { func (srv *Server) ContainerWait(job *engine.Job) engine.Status {
if container := srv.runtime.Get(name); container != nil { if len(job.Args) != 1 {
return container.Wait(), nil job.Errorf("Usage: %s", job.Name)
return engine.StatusErr
} }
return 0, fmt.Errorf("No such container: %s", name) name := job.Args[0]
if container := srv.runtime.Get(name); container != nil {
status := container.Wait()
job.Printf("%d\n", status)
return engine.StatusOK
}
job.Errorf("%s: no such container: %s", job.Name, name)
return engine.StatusErr
} }
func (srv *Server) ContainerResize(name string, h, w int) error { func (srv *Server) ContainerResize(name string, h, w int) error {