summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Guzik <jakubmguzik@gmail.com>2021-06-03 22:48:43 +0200
committerJakub Guzik <jakubmguzik@gmail.com>2021-06-08 15:18:00 +0200
commita5ad36c65ea07d839fd9bf55a820c8cb9884eed1 (patch)
tree54f8725dccf2ec1f313ab3f775293e14a4def747
parent9a3a7327fdafaac66c99130a6729e4bcde8df0b0 (diff)
downloadpodman-a5ad36c65ea07d839fd9bf55a820c8cb9884eed1.tar.gz
podman-a5ad36c65ea07d839fd9bf55a820c8cb9884eed1.tar.bz2
podman-a5ad36c65ea07d839fd9bf55a820c8cb9884eed1.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 a082255f6..6ecf4f2aa 100644
--- a/cmd/podman/images/prune.go
+++ b/cmd/podman/images/prune.go
@@ -59,7 +59,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))
+
+ })
+
})