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>
This commit is contained in:
parent
9a3a7327fd
commit
a5ad36c65e
|
@ -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
|
||||
|
|
|
@ -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]
|
||||
}
|
||||
|
|
|
@ -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))
|
||||
|
||||
})
|
||||
|
||||
})
|
||||
|
|
Loading…
Reference in New Issue