| ... | ... |
@@ -678,17 +678,12 @@ func postContainersStop(srv *Server, version float64, w http.ResponseWriter, r * |
| 678 | 678 |
if err := parseForm(r); err != nil {
|
| 679 | 679 |
return err |
| 680 | 680 |
} |
| 681 |
- t, err := strconv.Atoi(r.Form.Get("t"))
|
|
| 682 |
- if err != nil || t < 0 {
|
|
| 683 |
- t = 10 |
|
| 684 |
- } |
|
| 685 |
- |
|
| 686 | 681 |
if vars == nil {
|
| 687 | 682 |
return fmt.Errorf("Missing parameter")
|
| 688 | 683 |
} |
| 689 |
- name := vars["name"] |
|
| 690 |
- |
|
| 691 |
- if err := srv.ContainerStop(name, t); err != nil {
|
|
| 684 |
+ job := srv.Eng.Job("stop", vars["name"])
|
|
| 685 |
+ job.Setenv("t", r.Form.Get("t"))
|
|
| 686 |
+ if err := job.Run(); err != nil {
|
|
| 692 | 687 |
return err |
| 693 | 688 |
} |
| 694 | 689 |
w.WriteHeader(http.StatusNoContent) |
| ... | ... |
@@ -168,7 +168,7 @@ func Tail(src io.Reader, n int, dst *[]string) {
|
| 168 | 168 |
// AddEnv starts a new goroutine which will decode all subsequent data |
| 169 | 169 |
// as a stream of json-encoded objects, and point `dst` to the last |
| 170 | 170 |
// decoded object. |
| 171 |
-// The result `env` can be queried using the type-neutral Env interface. |
|
| 171 |
+// The result `env` can be queried using the type-neutral Env interface. |
|
| 172 | 172 |
// It is not safe to query `env` until the Output is closed. |
| 173 | 173 |
func (o *Output) AddEnv() (dst *Env, err error) {
|
| 174 | 174 |
src, err := o.AddPipe() |
| ... | ... |
@@ -185,9 +185,8 @@ func (o *Output) AddEnv() (dst *Env, err error) {
|
| 185 | 185 |
if err != nil {
|
| 186 | 186 |
return |
| 187 | 187 |
} |
| 188 |
- *dst= *env |
|
| 188 |
+ *dst = *env |
|
| 189 | 189 |
} |
| 190 | 190 |
}() |
| 191 | 191 |
return dst, nil |
| 192 | 192 |
} |
| 193 |
- |
| ... | ... |
@@ -129,8 +129,9 @@ func TestCreateRmVolumes(t *testing.T) {
|
| 129 | 129 |
t.Fatal(err) |
| 130 | 130 |
} |
| 131 | 131 |
|
| 132 |
- err = srv.ContainerStop(id, 1) |
|
| 133 |
- if err != nil {
|
|
| 132 |
+ job = eng.Job("stop", id)
|
|
| 133 |
+ job.SetenvInt("t", 1)
|
|
| 134 |
+ if err := job.Run(); err != nil {
|
|
| 134 | 135 |
t.Fatal(err) |
| 135 | 136 |
} |
| 136 | 137 |
|
| ... | ... |
@@ -188,7 +189,9 @@ func TestCreateStartRestartStopStartKillRm(t *testing.T) {
|
| 188 | 188 |
t.Fatal(err) |
| 189 | 189 |
} |
| 190 | 190 |
|
| 191 |
- if err := srv.ContainerStop(id, 15); err != nil {
|
|
| 191 |
+ job = eng.Job("stop", id)
|
|
| 192 |
+ job.SetenvInt("t", 15)
|
|
| 193 |
+ if err := job.Run(); err != nil {
|
|
| 192 | 194 |
t.Fatal(err) |
| 193 | 195 |
} |
| 194 | 196 |
|
| ... | ... |
@@ -79,6 +79,10 @@ func jobInitApi(job *engine.Job) engine.Status {
|
| 79 | 79 |
job.Error(err) |
| 80 | 80 |
return engine.StatusErr |
| 81 | 81 |
} |
| 82 |
+ if err := job.Eng.Register("stop", srv.ContainerStop); err != nil {
|
|
| 83 |
+ job.Error(err) |
|
| 84 |
+ return engine.StatusErr |
|
| 85 |
+ } |
|
| 82 | 86 |
if err := job.Eng.Register("start", srv.ContainerStart); err != nil {
|
| 83 | 87 |
job.Error(err) |
| 84 | 88 |
return engine.StatusErr |
| ... | ... |
@@ -1727,16 +1731,27 @@ func (srv *Server) ContainerStart(job *engine.Job) engine.Status {
|
| 1727 | 1727 |
return engine.StatusOK |
| 1728 | 1728 |
} |
| 1729 | 1729 |
|
| 1730 |
-func (srv *Server) ContainerStop(name string, t int) error {
|
|
| 1730 |
+func (srv *Server) ContainerStop(job *engine.Job) engine.Status {
|
|
| 1731 |
+ if len(job.Args) != 1 {
|
|
| 1732 |
+ job.Errorf("Usage: %s CONTAINER\n", job.Name)
|
|
| 1733 |
+ return engine.StatusErr |
|
| 1734 |
+ } |
|
| 1735 |
+ name := job.Args[0] |
|
| 1736 |
+ t := job.GetenvInt("t")
|
|
| 1737 |
+ if t == -1 {
|
|
| 1738 |
+ t = 10 |
|
| 1739 |
+ } |
|
| 1731 | 1740 |
if container := srv.runtime.Get(name); container != nil {
|
| 1732 |
- if err := container.Stop(t); err != nil {
|
|
| 1733 |
- return fmt.Errorf("Cannot stop container %s: %s", name, err)
|
|
| 1741 |
+ if err := container.Stop(int(t)); err != nil {
|
|
| 1742 |
+ job.Errorf("Cannot stop container %s: %s\n", name, err)
|
|
| 1743 |
+ return engine.StatusErr |
|
| 1734 | 1744 |
} |
| 1735 | 1745 |
srv.LogEvent("stop", container.ID, srv.runtime.repositories.ImageName(container.Image))
|
| 1736 | 1746 |
} else {
|
| 1737 |
- return fmt.Errorf("No such container: %s", name)
|
|
| 1747 |
+ job.Errorf("No such container: %s\n", name)
|
|
| 1748 |
+ return engine.StatusErr |
|
| 1738 | 1749 |
} |
| 1739 |
- return nil |
|
| 1750 |
+ return engine.StatusOK |
|
| 1740 | 1751 |
} |
| 1741 | 1752 |
|
| 1742 | 1753 |
func (srv *Server) ContainerWait(job *engine.Job) engine.Status {
|