Explorar o código

Merge pull request #12197 from runcom/remove-job-rm

Remove job from rm
Alexander Morozov %!s(int64=10) %!d(string=hai) anos
pai
achega
3218f3936d
Modificáronse 5 ficheiros con 22 adicións e 105 borrados
  1. 14 5
      api/server/server.go
  2. 0 23
      api/server/server_unit_test.go
  3. 0 1
      daemon/daemon.go
  4. 8 13
      daemon/delete.go
  5. 0 63
      integration/server_test.go

+ 14 - 5
api/server/server.go

@@ -858,16 +858,25 @@ func deleteContainers(eng *engine.Engine, version version.Version, w http.Respon
 	if vars == nil {
 		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"))
-	job.Setenv("removeLink", r.Form.Get("link"))
-	if err := job.Run(); err != nil {
+	d := getDaemon(eng)
+	config := &daemon.ContainerRmConfig{
+		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
 	}
+
 	w.WriteHeader(http.StatusNoContent)
+
 	return nil
 }
 

+ 0 - 23
api/server/server_unit_test.go

@@ -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 {
 	return serveRequestUsingVersion(method, target, api.APIVERSION, body, eng, t)
 }

+ 0 - 1
daemon/daemon.go

@@ -122,7 +122,6 @@ func (daemon *Daemon) Install(eng *engine.Engine) error {
 		"container_inspect": daemon.ContainerInspect,
 		"container_stats":   daemon.ContainerStats,
 		"create":            daemon.ContainerCreate,
-		"rm":                daemon.ContainerRm,
 		"export":            daemon.ContainerExport,
 		"info":              daemon.CmdInfo,
 		"kill":              daemon.ContainerKill,

+ 8 - 13
daemon/delete.go

@@ -6,24 +6,19 @@ import (
 	"path"
 
 	"github.com/Sirupsen/logrus"
-	"github.com/docker/docker/engine"
 )
 
-func (daemon *Daemon) ContainerRm(job *engine.Job) error {
-	if len(job.Args) != 1 {
-		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")
+type ContainerRmConfig struct {
+	ForceRemove, RemoveVolume, RemoveLink bool
+}
 
+func (daemon *Daemon) ContainerRm(name string, config *ContainerRmConfig) error {
 	container, err := daemon.Get(name)
 	if err != nil {
 		return err
 	}
 
-	if removeLink {
+	if config.RemoveLink {
 		name, err := GetFullContainerName(name)
 		if err != nil {
 			return err
@@ -55,7 +50,7 @@ func (daemon *Daemon) ContainerRm(job *engine.Job) error {
 		// if stats are currently getting collected.
 		daemon.statsCollector.stopCollection(container)
 		if container.IsRunning() {
-			if forceRemove {
+			if config.ForceRemove {
 				if err := container.Kill(); err != nil {
 					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 {
 				logrus.Errorf("Cannot destroy container %s: %v", name, err)
 			}
@@ -74,7 +69,7 @@ func (daemon *Daemon) ContainerRm(job *engine.Job) error {
 			}
 		}
 		container.LogEvent("destroy")
-		if removeVolume {
+		if config.RemoveVolume {
 			daemon.DeleteVolumes(container.VolumePaths())
 		}
 	}

+ 0 - 63
integration/server_test.go

@@ -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) {
 	eng := NewTestEngine(t)
 	defer mkDaemonFromEngine(eng, t).Nuke()