summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Guzik <jakubmguzik@gmail.com>2021-06-03 22:48:43 +0200
committerMatthew Heon <mheon@redhat.com>2021-06-11 13:06:06 -0400
commitf1e7a07473958a9ba0f06f7c2f88105200f7a146 (patch)
tree6007e99f6606ae26f5791d848a532cee7f8fbe52
parent5ddd76edd02dd59c2306e1ed12ad7ff2001dc38a (diff)
downloadpodman-f1e7a07473958a9ba0f06f7c2f88105200f7a146.tar.gz
podman-f1e7a07473958a9ba0f06f7c2f88105200f7a146.tar.bz2
podman-f1e7a07473958a9ba0f06f7c2f88105200f7a146.zip
Fix image prune --filter cmd behavior
Image prune --filter is fully implemented in the api, http api yet not connected with the cli execution. User trying to use filters does not see the effect. This commit adds glue code to enable possiblity of using --filter in prune in the cli execution. Signed-off-by: Jakub Guzik <jakubmguzik@gmail.com>
-rw-r--r--cmd/podman/images/prune.go10
-rw-r--r--test/e2e/common_test.go39
-rw-r--r--test/e2e/images_test.go21
3 files changed, 56 insertions, 14 deletions
diff --git a/cmd/podman/images/prune.go b/cmd/podman/images/prune.go
index db645cc2e..52217c0d6 100644
--- a/cmd/podman/images/prune.go
+++ b/cmd/podman/images/prune.go
@@ -60,7 +60,15 @@ func prune(cmd *cobra.Command, args []string) error {
return nil
}
}
-
+ filterMap, err := common.ParseFilters(filter)
+ if err != nil {
+ return err
+ }
+ for k, v := range filterMap {
+ for _, val := range v {
+ pruneOpts.Filter = append(pruneOpts.Filter, fmt.Sprintf("%s=%s", k, val))
+ }
+ }
results, err := registry.ImageEngine().Prune(registry.GetContext(), pruneOpts)
if err != nil {
return err
diff --git a/test/e2e/common_test.go b/test/e2e/common_test.go
index 7ffee961c..1aeeca4cb 100644
--- a/test/e2e/common_test.go
+++ b/test/e2e/common_test.go
@@ -451,19 +451,13 @@ func (p *PodmanTestIntegration) RunLsContainerInPod(name, pod string) (*PodmanSe
// BuildImage uses podman build and buildah to build an image
// called imageName based on a string dockerfile
func (p *PodmanTestIntegration) BuildImage(dockerfile, imageName string, layers string) string {
- dockerfilePath := filepath.Join(p.TempDir, "Dockerfile")
- err := ioutil.WriteFile(dockerfilePath, []byte(dockerfile), 0755)
- Expect(err).To(BeNil())
- cmd := []string{"build", "--pull-never", "--layers=" + layers, "--file", dockerfilePath}
- if len(imageName) > 0 {
- cmd = append(cmd, []string{"-t", imageName}...)
- }
- cmd = append(cmd, p.TempDir)
- session := p.Podman(cmd)
- session.Wait(240)
- Expect(session).Should(Exit(0), fmt.Sprintf("BuildImage session output: %q", session.OutputToString()))
- output := session.OutputToStringArray()
- return output[len(output)-1]
+ return p.buildImage(dockerfile, imageName, layers, "")
+}
+
+// BuildImageWithLabel uses podman build and buildah to build an image
+// called imageName based on a string dockerfile, adds desired label to paramset
+func (p *PodmanTestIntegration) BuildImageWithLabel(dockerfile, imageName string, layers string, label string) string {
+ return p.buildImage(dockerfile, imageName, layers, label)
}
// PodmanPID execs podman and returns its PID
@@ -828,3 +822,22 @@ func (p *PodmanSessionIntegration) jq(jqCommand string) (string, error) {
err := cmd.Run()
return strings.TrimRight(out.String(), "\n"), err
}
+
+func (p *PodmanTestIntegration) buildImage(dockerfile, imageName string, layers string, label string) string {
+ dockerfilePath := filepath.Join(p.TempDir, "Dockerfile")
+ err := ioutil.WriteFile(dockerfilePath, []byte(dockerfile), 0755)
+ Expect(err).To(BeNil())
+ cmd := []string{"build", "--pull-never", "--layers=" + layers, "--file", dockerfilePath}
+ if label != "" {
+ cmd = append(cmd, "--label="+label)
+ }
+ if len(imageName) > 0 {
+ cmd = append(cmd, []string{"-t", imageName}...)
+ }
+ cmd = append(cmd, p.TempDir)
+ session := p.Podman(cmd)
+ session.Wait(240)
+ Expect(session).Should(Exit(0), fmt.Sprintf("BuildImage session output: %q", session.OutputToString()))
+ output := session.OutputToStringArray()
+ return output[len(output)-1]
+}
diff --git a/test/e2e/images_test.go b/test/e2e/images_test.go
index f6321ec1c..b4ec7447e 100644
--- a/test/e2e/images_test.go
+++ b/test/e2e/images_test.go
@@ -425,4 +425,25 @@ LABEL "com.example.vendor"="Example Vendor"
Expect(result.OutputToStringArray()).To(Not(Equal(result1.OutputToStringArray())))
})
+ It("podman image prune --filter", func() {
+ dockerfile := `FROM quay.io/libpod/alpine:latest
+RUN > file
+`
+ dockerfile2 := `FROM quay.io/libpod/alpine:latest
+RUN > file2
+`
+ podmanTest.BuildImageWithLabel(dockerfile, "foobar.com/workdir:latest", "false", "abc")
+ podmanTest.BuildImageWithLabel(dockerfile2, "foobar.com/workdir:latest", "false", "xyz")
+ // --force used to to avoid y/n question
+ result := podmanTest.Podman([]string{"image", "prune", "--filter", "label=abc", "--force"})
+ result.WaitWithDefaultTimeout()
+ Expect(result).Should(Exit(0))
+ Expect(len(result.OutputToStringArray())).To(Equal(1))
+
+ //check if really abc is removed
+ result = podmanTest.Podman([]string{"image", "list", "--filter", "label=abc"})
+ Expect(len(result.OutputToStringArray())).To(Equal(0))
+
+ })
+
})