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
|
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)
|
results, err := registry.ImageEngine().Prune(registry.GetContext(), pruneOpts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
|
@ -451,19 +451,13 @@ func (p *PodmanTestIntegration) RunLsContainerInPod(name, pod string) (*PodmanSe
|
||||||
// BuildImage uses podman build and buildah to build an image
|
// BuildImage uses podman build and buildah to build an image
|
||||||
// called imageName based on a string dockerfile
|
// called imageName based on a string dockerfile
|
||||||
func (p *PodmanTestIntegration) BuildImage(dockerfile, imageName string, layers string) string {
|
func (p *PodmanTestIntegration) BuildImage(dockerfile, imageName string, layers string) string {
|
||||||
dockerfilePath := filepath.Join(p.TempDir, "Dockerfile")
|
return p.buildImage(dockerfile, imageName, layers, "")
|
||||||
err := ioutil.WriteFile(dockerfilePath, []byte(dockerfile), 0755)
|
}
|
||||||
Expect(err).To(BeNil())
|
|
||||||
cmd := []string{"build", "--pull-never", "--layers=" + layers, "--file", dockerfilePath}
|
// BuildImageWithLabel uses podman build and buildah to build an image
|
||||||
if len(imageName) > 0 {
|
// called imageName based on a string dockerfile, adds desired label to paramset
|
||||||
cmd = append(cmd, []string{"-t", imageName}...)
|
func (p *PodmanTestIntegration) BuildImageWithLabel(dockerfile, imageName string, layers string, label string) string {
|
||||||
}
|
return p.buildImage(dockerfile, imageName, layers, label)
|
||||||
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]
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// PodmanPID execs podman and returns its PID
|
// PodmanPID execs podman and returns its PID
|
||||||
|
@ -828,3 +822,22 @@ func (p *PodmanSessionIntegration) jq(jqCommand string) (string, error) {
|
||||||
err := cmd.Run()
|
err := cmd.Run()
|
||||||
return strings.TrimRight(out.String(), "\n"), err
|
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())))
|
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