|
@@ -3,6 +3,9 @@
|
|
|
package main
|
|
|
|
|
|
import (
|
|
|
+ "io/ioutil"
|
|
|
+ "os"
|
|
|
+ "path/filepath"
|
|
|
"strconv"
|
|
|
"strings"
|
|
|
"time"
|
|
@@ -111,3 +114,177 @@ func (s *DockerSuite) TestPruneContainerUntil(c *check.C) {
|
|
|
c.Assert(strings.TrimSpace(out), checker.Not(checker.Contains), id1)
|
|
|
c.Assert(strings.TrimSpace(out), checker.Contains, id2)
|
|
|
}
|
|
|
+
|
|
|
+func (s *DockerSuite) TestPruneContainerLabel(c *check.C) {
|
|
|
+ out, _ := dockerCmd(c, "run", "-d", "--label", "foo", "busybox")
|
|
|
+ id1 := strings.TrimSpace(out)
|
|
|
+ c.Assert(waitExited(id1, 5*time.Second), checker.IsNil)
|
|
|
+
|
|
|
+ out, _ = dockerCmd(c, "run", "-d", "--label", "bar", "busybox")
|
|
|
+ id2 := strings.TrimSpace(out)
|
|
|
+ c.Assert(waitExited(id2, 5*time.Second), checker.IsNil)
|
|
|
+
|
|
|
+ out, _ = dockerCmd(c, "run", "-d", "busybox")
|
|
|
+ id3 := strings.TrimSpace(out)
|
|
|
+ c.Assert(waitExited(id3, 5*time.Second), checker.IsNil)
|
|
|
+
|
|
|
+ out, _ = dockerCmd(c, "run", "-d", "--label", "foobar", "busybox")
|
|
|
+ id4 := strings.TrimSpace(out)
|
|
|
+ c.Assert(waitExited(id4, 5*time.Second), checker.IsNil)
|
|
|
+
|
|
|
+ // Add a config file of label=foobar, that will have no impact if cli is label!=foobar
|
|
|
+ config := `{"pruneFilters": ["label=foobar"]}`
|
|
|
+ d, err := ioutil.TempDir("", "integration-cli-")
|
|
|
+ c.Assert(err, checker.IsNil)
|
|
|
+ defer os.RemoveAll(d)
|
|
|
+ err = ioutil.WriteFile(filepath.Join(d, "config.json"), []byte(config), 0644)
|
|
|
+ c.Assert(err, checker.IsNil)
|
|
|
+
|
|
|
+ // With config.json only, prune based on label=foobar
|
|
|
+ out, _ = dockerCmd(c, "--config", d, "container", "prune", "--force")
|
|
|
+ c.Assert(strings.TrimSpace(out), checker.Not(checker.Contains), id1)
|
|
|
+ c.Assert(strings.TrimSpace(out), checker.Not(checker.Contains), id2)
|
|
|
+ c.Assert(strings.TrimSpace(out), checker.Not(checker.Contains), id3)
|
|
|
+ c.Assert(strings.TrimSpace(out), checker.Contains, id4)
|
|
|
+
|
|
|
+ out, _ = dockerCmd(c, "container", "prune", "--force", "--filter", "label=foo")
|
|
|
+ c.Assert(strings.TrimSpace(out), checker.Contains, id1)
|
|
|
+ c.Assert(strings.TrimSpace(out), checker.Not(checker.Contains), id2)
|
|
|
+ c.Assert(strings.TrimSpace(out), checker.Not(checker.Contains), id3)
|
|
|
+
|
|
|
+ out, _ = dockerCmd(c, "ps", "-a", "-q", "--no-trunc")
|
|
|
+ c.Assert(strings.TrimSpace(out), checker.Not(checker.Contains), id1)
|
|
|
+ c.Assert(strings.TrimSpace(out), checker.Contains, id2)
|
|
|
+ c.Assert(strings.TrimSpace(out), checker.Contains, id3)
|
|
|
+
|
|
|
+ out, _ = dockerCmd(c, "container", "prune", "--force", "--filter", "label!=bar")
|
|
|
+ c.Assert(strings.TrimSpace(out), checker.Not(checker.Contains), id2)
|
|
|
+ c.Assert(strings.TrimSpace(out), checker.Contains, id3)
|
|
|
+
|
|
|
+ out, _ = dockerCmd(c, "ps", "-a", "-q", "--no-trunc")
|
|
|
+ c.Assert(strings.TrimSpace(out), checker.Contains, id2)
|
|
|
+ c.Assert(strings.TrimSpace(out), checker.Not(checker.Contains), id3)
|
|
|
+
|
|
|
+ // With config.json label=foobar and CLI label!=foobar, CLI label!=foobar supersede
|
|
|
+ out, _ = dockerCmd(c, "--config", d, "container", "prune", "--force", "--filter", "label!=foobar")
|
|
|
+ c.Assert(strings.TrimSpace(out), checker.Contains, id2)
|
|
|
+
|
|
|
+ out, _ = dockerCmd(c, "ps", "-a", "-q", "--no-trunc")
|
|
|
+ c.Assert(strings.TrimSpace(out), checker.Not(checker.Contains), id2)
|
|
|
+}
|
|
|
+
|
|
|
+func (s *DockerSuite) TestPruneVolumeLabel(c *check.C) {
|
|
|
+ out, _ := dockerCmd(c, "volume", "create", "--label", "foo")
|
|
|
+ id1 := strings.TrimSpace(out)
|
|
|
+ c.Assert(id1, checker.Not(checker.Equals), "")
|
|
|
+
|
|
|
+ out, _ = dockerCmd(c, "volume", "create", "--label", "bar")
|
|
|
+ id2 := strings.TrimSpace(out)
|
|
|
+ c.Assert(id2, checker.Not(checker.Equals), "")
|
|
|
+
|
|
|
+ out, _ = dockerCmd(c, "volume", "create")
|
|
|
+ id3 := strings.TrimSpace(out)
|
|
|
+ c.Assert(id3, checker.Not(checker.Equals), "")
|
|
|
+
|
|
|
+ out, _ = dockerCmd(c, "volume", "create", "--label", "foobar")
|
|
|
+ id4 := strings.TrimSpace(out)
|
|
|
+ c.Assert(id4, checker.Not(checker.Equals), "")
|
|
|
+
|
|
|
+ // Add a config file of label=foobar, that will have no impact if cli is label!=foobar
|
|
|
+ config := `{"pruneFilters": ["label=foobar"]}`
|
|
|
+ d, err := ioutil.TempDir("", "integration-cli-")
|
|
|
+ c.Assert(err, checker.IsNil)
|
|
|
+ defer os.RemoveAll(d)
|
|
|
+ err = ioutil.WriteFile(filepath.Join(d, "config.json"), []byte(config), 0644)
|
|
|
+ c.Assert(err, checker.IsNil)
|
|
|
+
|
|
|
+ // With config.json only, prune based on label=foobar
|
|
|
+ out, _ = dockerCmd(c, "--config", d, "volume", "prune", "--force")
|
|
|
+ c.Assert(strings.TrimSpace(out), checker.Not(checker.Contains), id1)
|
|
|
+ c.Assert(strings.TrimSpace(out), checker.Not(checker.Contains), id2)
|
|
|
+ c.Assert(strings.TrimSpace(out), checker.Not(checker.Contains), id3)
|
|
|
+ c.Assert(strings.TrimSpace(out), checker.Contains, id4)
|
|
|
+
|
|
|
+ out, _ = dockerCmd(c, "volume", "prune", "--force", "--filter", "label=foo")
|
|
|
+ c.Assert(strings.TrimSpace(out), checker.Contains, id1)
|
|
|
+ c.Assert(strings.TrimSpace(out), checker.Not(checker.Contains), id2)
|
|
|
+ c.Assert(strings.TrimSpace(out), checker.Not(checker.Contains), id3)
|
|
|
+
|
|
|
+ out, _ = dockerCmd(c, "volume", "ls", "--format", "{{.Name}}")
|
|
|
+ c.Assert(strings.TrimSpace(out), checker.Not(checker.Contains), id1)
|
|
|
+ c.Assert(strings.TrimSpace(out), checker.Contains, id2)
|
|
|
+ c.Assert(strings.TrimSpace(out), checker.Contains, id3)
|
|
|
+
|
|
|
+ out, _ = dockerCmd(c, "volume", "prune", "--force", "--filter", "label!=bar")
|
|
|
+ c.Assert(strings.TrimSpace(out), checker.Not(checker.Contains), id2)
|
|
|
+ c.Assert(strings.TrimSpace(out), checker.Contains, id3)
|
|
|
+
|
|
|
+ out, _ = dockerCmd(c, "volume", "ls", "--format", "{{.Name}}")
|
|
|
+ c.Assert(strings.TrimSpace(out), checker.Contains, id2)
|
|
|
+ c.Assert(strings.TrimSpace(out), checker.Not(checker.Contains), id3)
|
|
|
+
|
|
|
+ // With config.json label=foobar and CLI label!=foobar, CLI label!=foobar supersede
|
|
|
+ out, _ = dockerCmd(c, "--config", d, "volume", "prune", "--force", "--filter", "label!=foobar")
|
|
|
+ c.Assert(strings.TrimSpace(out), checker.Contains, id2)
|
|
|
+
|
|
|
+ out, _ = dockerCmd(c, "volume", "ls", "--format", "{{.Name}}")
|
|
|
+ c.Assert(strings.TrimSpace(out), checker.Not(checker.Contains), id2)
|
|
|
+}
|
|
|
+
|
|
|
+func (s *DockerSuite) TestPruneNetworkLabel(c *check.C) {
|
|
|
+ dockerCmd(c, "network", "create", "--label", "foo", "n1")
|
|
|
+ dockerCmd(c, "network", "create", "--label", "bar", "n2")
|
|
|
+ dockerCmd(c, "network", "create", "n3")
|
|
|
+
|
|
|
+ out, _ := dockerCmd(c, "network", "prune", "--force", "--filter", "label=foo")
|
|
|
+ c.Assert(strings.TrimSpace(out), checker.Contains, "n1")
|
|
|
+ c.Assert(strings.TrimSpace(out), checker.Not(checker.Contains), "n2")
|
|
|
+ c.Assert(strings.TrimSpace(out), checker.Not(checker.Contains), "n3")
|
|
|
+
|
|
|
+ out, _ = dockerCmd(c, "network", "prune", "--force", "--filter", "label!=bar")
|
|
|
+ c.Assert(strings.TrimSpace(out), checker.Not(checker.Contains), "n1")
|
|
|
+ c.Assert(strings.TrimSpace(out), checker.Not(checker.Contains), "n2")
|
|
|
+ c.Assert(strings.TrimSpace(out), checker.Contains, "n3")
|
|
|
+
|
|
|
+ out, _ = dockerCmd(c, "network", "prune", "--force")
|
|
|
+ c.Assert(strings.TrimSpace(out), checker.Not(checker.Contains), "n1")
|
|
|
+ c.Assert(strings.TrimSpace(out), checker.Contains, "n2")
|
|
|
+ c.Assert(strings.TrimSpace(out), checker.Not(checker.Contains), "n3")
|
|
|
+}
|
|
|
+
|
|
|
+func (s *DockerDaemonSuite) TestPruneImageLabel(c *check.C) {
|
|
|
+ s.d.StartWithBusybox(c)
|
|
|
+
|
|
|
+ out, _, err := s.d.BuildImageWithOut("test1",
|
|
|
+ `FROM busybox
|
|
|
+ LABEL foo=bar`, true, "-q")
|
|
|
+ c.Assert(err, checker.IsNil)
|
|
|
+ id1 := strings.TrimSpace(out)
|
|
|
+ out, err = s.d.Cmd("images", "-q", "--no-trunc")
|
|
|
+ c.Assert(err, checker.IsNil)
|
|
|
+ c.Assert(strings.TrimSpace(out), checker.Contains, id1)
|
|
|
+
|
|
|
+ out, _, err = s.d.BuildImageWithOut("test2",
|
|
|
+ `FROM busybox
|
|
|
+ LABEL bar=foo`, true, "-q")
|
|
|
+ c.Assert(err, checker.IsNil)
|
|
|
+ id2 := strings.TrimSpace(out)
|
|
|
+ out, err = s.d.Cmd("images", "-q", "--no-trunc")
|
|
|
+ c.Assert(err, checker.IsNil)
|
|
|
+ c.Assert(strings.TrimSpace(out), checker.Contains, id2)
|
|
|
+
|
|
|
+ out, err = s.d.Cmd("image", "prune", "--force", "--all", "--filter", "label=foo=bar")
|
|
|
+ c.Assert(err, checker.IsNil)
|
|
|
+ c.Assert(strings.TrimSpace(out), checker.Contains, id1)
|
|
|
+ c.Assert(strings.TrimSpace(out), checker.Not(checker.Contains), id2)
|
|
|
+
|
|
|
+ out, err = s.d.Cmd("image", "prune", "--force", "--all", "--filter", "label!=bar=foo")
|
|
|
+ c.Assert(err, checker.IsNil)
|
|
|
+ c.Assert(strings.TrimSpace(out), checker.Not(checker.Contains), id1)
|
|
|
+ c.Assert(strings.TrimSpace(out), checker.Not(checker.Contains), id2)
|
|
|
+
|
|
|
+ out, err = s.d.Cmd("image", "prune", "--force", "--all", "--filter", "label=bar=foo")
|
|
|
+ c.Assert(err, checker.IsNil)
|
|
|
+ c.Assert(strings.TrimSpace(out), checker.Not(checker.Contains), id1)
|
|
|
+ c.Assert(strings.TrimSpace(out), checker.Contains, id2)
|
|
|
+}
|