summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com>2021-06-09 09:24:44 +0200
committerGitHub <noreply@github.com>2021-06-09 09:24:44 +0200
commita2e1df80bcf71c11d10cc78b49fab4b8909b86e5 (patch)
treeaf98954e78bf852d9ff5c5a1ba6e822bef9a6624
parentda1bade294025a419877484ae35f352984e804d2 (diff)
parenta5ad36c65ea07d839fd9bf55a820c8cb9884eed1 (diff)
downloadpodman-a2e1df80bcf71c11d10cc78b49fab4b8909b86e5.tar.gz
podman-a2e1df80bcf71c11d10cc78b49fab4b8909b86e5.tar.bz2
podman-a2e1df80bcf71c11d10cc78b49fab4b8909b86e5.zip
Merge pull request #10390 from jmguzik/fix-cmd-prune-filter-images
Fix image prune --filter cmd behavior
-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))
+
+ })
+
})