... | ... |
@@ -710,14 +710,18 @@ func postContainersWait(srv *Server, version float64, w http.ResponseWriter, r * |
710 | 710 |
if vars == nil { |
711 | 711 |
return fmt.Errorf("Missing parameter") |
712 | 712 |
} |
713 |
- name := vars["name"] |
|
714 |
- |
|
715 |
- status, err := srv.ContainerWait(name) |
|
713 |
+ job := srv.Eng.Job("wait", vars["name"]) |
|
714 |
+ var statusStr string |
|
715 |
+ job.Stdout.AddString(&statusStr) |
|
716 |
+ if err := job.Run(); err != nil { |
|
717 |
+ return err |
|
718 |
+ } |
|
719 |
+ // Parse a 16-bit encoded integer to map typical unix exit status. |
|
720 |
+ status, err := strconv.ParseInt(statusStr, 10, 16) |
|
716 | 721 |
if err != nil { |
717 | 722 |
return err |
718 | 723 |
} |
719 |
- |
|
720 |
- return writeJSON(w, http.StatusOK, &APIWait{StatusCode: status}) |
|
724 |
+ return writeJSON(w, http.StatusOK, &APIWait{StatusCode: int(status)}) |
|
721 | 725 |
} |
722 | 726 |
|
723 | 727 |
func postContainersResize(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error { |
... | ... |
@@ -256,7 +256,7 @@ func TestRmi(t *testing.T) { |
256 | 256 |
t.Fatal(err) |
257 | 257 |
} |
258 | 258 |
|
259 |
- if _, err := srv.ContainerWait(containerID); err != nil { |
|
259 |
+ if err := eng.Job("wait", containerID).Run(); err != nil { |
|
260 | 260 |
t.Fatal(err) |
261 | 261 |
} |
262 | 262 |
|
... | ... |
@@ -281,7 +281,7 @@ func TestRmi(t *testing.T) { |
281 | 281 |
t.Fatal(err) |
282 | 282 |
} |
283 | 283 |
|
284 |
- if _, err := srv.ContainerWait(containerID); err != nil { |
|
284 |
+ if err := eng.Job("wait", containerID).Run(); err != nil { |
|
285 | 285 |
t.Fatal(err) |
286 | 286 |
} |
287 | 287 |
|
... | ... |
@@ -82,6 +82,10 @@ func jobInitApi(job *engine.Job) engine.Status { |
82 | 82 |
job.Error(err) |
83 | 83 |
return engine.StatusErr |
84 | 84 |
} |
85 |
+ if err := job.Eng.Register("wait", srv.ContainerWait); err != nil { |
|
86 |
+ job.Error(err) |
|
87 |
+ return engine.StatusErr |
|
88 |
+ } |
|
85 | 89 |
return engine.StatusOK |
86 | 90 |
} |
87 | 91 |
|
... | ... |
@@ -1718,11 +1722,19 @@ func (srv *Server) ContainerStop(name string, t int) error { |
1718 | 1718 |
return nil |
1719 | 1719 |
} |
1720 | 1720 |
|
1721 |
-func (srv *Server) ContainerWait(name string) (int, error) { |
|
1721 |
+func (srv *Server) ContainerWait(job *engine.Job) engine.Status { |
|
1722 |
+ if len(job.Args) != 1 { |
|
1723 |
+ job.Errorf("Usage: %s", job.Name) |
|
1724 |
+ return engine.StatusErr |
|
1725 |
+ } |
|
1726 |
+ name := job.Args[0] |
|
1722 | 1727 |
if container := srv.runtime.Get(name); container != nil { |
1723 |
- return container.Wait(), nil |
|
1728 |
+ status := container.Wait() |
|
1729 |
+ job.Printf("%d\n", status) |
|
1730 |
+ return engine.StatusOK |
|
1724 | 1731 |
} |
1725 |
- return 0, fmt.Errorf("No such container: %s", name) |
|
1732 |
+ job.Errorf("%s: no such container: %s", job.Name, name) |
|
1733 |
+ return engine.StatusErr |
|
1726 | 1734 |
} |
1727 | 1735 |
|
1728 | 1736 |
func (srv *Server) ContainerResize(name string, h, w int) error { |