mirror of https://github.com/docker/docs.git
Remove job from rm
Signed-off-by: Antonio Murdaca <me@runcom.ninja>
This commit is contained in:
parent
6b7e520aa3
commit
db13cb7f98
|
@ -858,16 +858,25 @@ func deleteContainers(eng *engine.Engine, version version.Version, w http.Respon
|
||||||
if vars == nil {
|
if vars == nil {
|
||||||
return fmt.Errorf("Missing parameter")
|
return fmt.Errorf("Missing parameter")
|
||||||
}
|
}
|
||||||
job := eng.Job("rm", vars["name"])
|
|
||||||
|
|
||||||
job.Setenv("forceRemove", r.Form.Get("force"))
|
name := vars["name"]
|
||||||
|
if name == "" {
|
||||||
|
return fmt.Errorf("Container name cannot be empty")
|
||||||
|
}
|
||||||
|
|
||||||
job.Setenv("removeVolume", r.Form.Get("v"))
|
d := getDaemon(eng)
|
||||||
job.Setenv("removeLink", r.Form.Get("link"))
|
config := &daemon.ContainerRmConfig{
|
||||||
if err := job.Run(); err != nil {
|
ForceRemove: toBool(r.Form.Get("force")),
|
||||||
|
RemoveVolume: toBool(r.Form.Get("v")),
|
||||||
|
RemoveLink: toBool(r.Form.Get("link")),
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := d.ContainerRm(name, config); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
w.WriteHeader(http.StatusNoContent)
|
w.WriteHeader(http.StatusNoContent)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -286,29 +286,6 @@ func TestGetImagesByName(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestDeleteContainers(t *testing.T) {
|
|
||||||
eng := engine.New()
|
|
||||||
name := "foo"
|
|
||||||
var called bool
|
|
||||||
eng.Register("rm", func(job *engine.Job) error {
|
|
||||||
called = true
|
|
||||||
if len(job.Args) == 0 {
|
|
||||||
t.Fatalf("Job arguments is empty")
|
|
||||||
}
|
|
||||||
if job.Args[0] != name {
|
|
||||||
t.Fatalf("name != '%s': %#v", name, job.Args[0])
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
})
|
|
||||||
r := serveRequest("DELETE", "/containers/"+name, nil, eng, t)
|
|
||||||
if !called {
|
|
||||||
t.Fatalf("handler was not called")
|
|
||||||
}
|
|
||||||
if r.Code != http.StatusNoContent {
|
|
||||||
t.Fatalf("Got status %d, expected %d", r.Code, http.StatusNoContent)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func serveRequest(method, target string, body io.Reader, eng *engine.Engine, t *testing.T) *httptest.ResponseRecorder {
|
func serveRequest(method, target string, body io.Reader, eng *engine.Engine, t *testing.T) *httptest.ResponseRecorder {
|
||||||
return serveRequestUsingVersion(method, target, api.APIVERSION, body, eng, t)
|
return serveRequestUsingVersion(method, target, api.APIVERSION, body, eng, t)
|
||||||
}
|
}
|
||||||
|
|
|
@ -122,7 +122,6 @@ func (daemon *Daemon) Install(eng *engine.Engine) error {
|
||||||
"container_inspect": daemon.ContainerInspect,
|
"container_inspect": daemon.ContainerInspect,
|
||||||
"container_stats": daemon.ContainerStats,
|
"container_stats": daemon.ContainerStats,
|
||||||
"create": daemon.ContainerCreate,
|
"create": daemon.ContainerCreate,
|
||||||
"rm": daemon.ContainerRm,
|
|
||||||
"export": daemon.ContainerExport,
|
"export": daemon.ContainerExport,
|
||||||
"info": daemon.CmdInfo,
|
"info": daemon.CmdInfo,
|
||||||
"kill": daemon.ContainerKill,
|
"kill": daemon.ContainerKill,
|
||||||
|
|
|
@ -6,24 +6,19 @@ import (
|
||||||
"path"
|
"path"
|
||||||
|
|
||||||
"github.com/Sirupsen/logrus"
|
"github.com/Sirupsen/logrus"
|
||||||
"github.com/docker/docker/engine"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func (daemon *Daemon) ContainerRm(job *engine.Job) error {
|
type ContainerRmConfig struct {
|
||||||
if len(job.Args) != 1 {
|
ForceRemove, RemoveVolume, RemoveLink bool
|
||||||
return fmt.Errorf("Not enough arguments. Usage: %s CONTAINER\n", job.Name)
|
}
|
||||||
}
|
|
||||||
name := job.Args[0]
|
|
||||||
removeVolume := job.GetenvBool("removeVolume")
|
|
||||||
removeLink := job.GetenvBool("removeLink")
|
|
||||||
forceRemove := job.GetenvBool("forceRemove")
|
|
||||||
|
|
||||||
|
func (daemon *Daemon) ContainerRm(name string, config *ContainerRmConfig) error {
|
||||||
container, err := daemon.Get(name)
|
container, err := daemon.Get(name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if removeLink {
|
if config.RemoveLink {
|
||||||
name, err := GetFullContainerName(name)
|
name, err := GetFullContainerName(name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -55,7 +50,7 @@ func (daemon *Daemon) ContainerRm(job *engine.Job) error {
|
||||||
// if stats are currently getting collected.
|
// if stats are currently getting collected.
|
||||||
daemon.statsCollector.stopCollection(container)
|
daemon.statsCollector.stopCollection(container)
|
||||||
if container.IsRunning() {
|
if container.IsRunning() {
|
||||||
if forceRemove {
|
if config.ForceRemove {
|
||||||
if err := container.Kill(); err != nil {
|
if err := container.Kill(); err != nil {
|
||||||
return fmt.Errorf("Could not kill running container, cannot remove - %v", err)
|
return fmt.Errorf("Could not kill running container, cannot remove - %v", err)
|
||||||
}
|
}
|
||||||
|
@ -64,7 +59,7 @@ func (daemon *Daemon) ContainerRm(job *engine.Job) error {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if forceRemove {
|
if config.ForceRemove {
|
||||||
if err := daemon.ForceRm(container); err != nil {
|
if err := daemon.ForceRm(container); err != nil {
|
||||||
logrus.Errorf("Cannot destroy container %s: %v", name, err)
|
logrus.Errorf("Cannot destroy container %s: %v", name, err)
|
||||||
}
|
}
|
||||||
|
@ -74,7 +69,7 @@ func (daemon *Daemon) ContainerRm(job *engine.Job) error {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
container.LogEvent("destroy")
|
container.LogEvent("destroy")
|
||||||
if removeVolume {
|
if config.RemoveVolume {
|
||||||
daemon.DeleteVolumes(container.VolumePaths())
|
daemon.DeleteVolumes(container.VolumePaths())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -157,69 +157,6 @@ func TestRestartKillWait(t *testing.T) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestCreateStartRestartStopStartKillRm(t *testing.T) {
|
|
||||||
eng := NewTestEngine(t)
|
|
||||||
runtime := mkDaemonFromEngine(eng, t)
|
|
||||||
defer runtime.Nuke()
|
|
||||||
|
|
||||||
config, hostConfig, _, err := parseRun([]string{"-i", unitTestImageID, "/bin/cat"})
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
id := createTestContainer(eng, config, t)
|
|
||||||
containers, err := runtime.Containers(&daemon.ContainersConfig{All: true})
|
|
||||||
|
|
||||||
if len(containers) != 1 {
|
|
||||||
t.Errorf("Expected 1 container, %v found", len(containers))
|
|
||||||
}
|
|
||||||
|
|
||||||
job := eng.Job("start", id)
|
|
||||||
if err := job.ImportEnv(hostConfig); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
if err := job.Run(); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
job = eng.Job("restart", id)
|
|
||||||
job.SetenvInt("t", 2)
|
|
||||||
if err := job.Run(); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
job = eng.Job("stop", id)
|
|
||||||
job.SetenvInt("t", 2)
|
|
||||||
if err := job.Run(); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
job = eng.Job("start", id)
|
|
||||||
if err := job.ImportEnv(hostConfig); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
if err := job.Run(); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := eng.Job("kill", id).Run(); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// FIXME: this failed once with a race condition ("Unable to remove filesystem for xxx: directory not empty")
|
|
||||||
job = eng.Job("rm", id)
|
|
||||||
job.SetenvBool("removeVolume", true)
|
|
||||||
if err := job.Run(); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
containers, err = runtime.Containers(&daemon.ContainersConfig{All: true})
|
|
||||||
|
|
||||||
if len(containers) != 0 {
|
|
||||||
t.Errorf("Expected 0 container, %v found", len(containers))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestRunWithTooLowMemoryLimit(t *testing.T) {
|
func TestRunWithTooLowMemoryLimit(t *testing.T) {
|
||||||
eng := NewTestEngine(t)
|
eng := NewTestEngine(t)
|
||||||
defer mkDaemonFromEngine(eng, t).Nuke()
|
defer mkDaemonFromEngine(eng, t).Nuke()
|
||||||
|
|
Loading…
Reference in New Issue