mirror of
https://github.com/containers/podman.git
synced 2025-06-26 04:46:57 +08:00
Merge pull request #8376 from Luap99/podman-filters
Align the podman ps --filter behavior with docker
This commit is contained in:
@ -16,7 +16,6 @@ func PruneContainers(w http.ResponseWriter, r *http.Request) {
|
||||
var (
|
||||
delContainers []string
|
||||
space int64
|
||||
filterFuncs []libpod.ContainerFilter
|
||||
)
|
||||
runtime := r.Context().Value("runtime").(*libpod.Runtime)
|
||||
decoder := r.Context().Value("decoder").(*schema.Decoder)
|
||||
@ -28,15 +27,14 @@ func PruneContainers(w http.ResponseWriter, r *http.Request) {
|
||||
utils.Error(w, "Something went wrong.", http.StatusBadRequest, errors.Wrapf(err, "failed to parse parameters for %s", r.URL.String()))
|
||||
return
|
||||
}
|
||||
filterFuncs := make([]libpod.ContainerFilter, 0, len(query.Filters))
|
||||
for k, v := range query.Filters {
|
||||
for _, val := range v {
|
||||
generatedFunc, err := lpfilters.GenerateContainerFilterFuncs(k, val, runtime)
|
||||
if err != nil {
|
||||
utils.InternalServerError(w, err)
|
||||
return
|
||||
}
|
||||
filterFuncs = append(filterFuncs, generatedFunc)
|
||||
generatedFunc, err := lpfilters.GenerateContainerFilterFuncs(k, v, runtime)
|
||||
if err != nil {
|
||||
utils.InternalServerError(w, err)
|
||||
return
|
||||
}
|
||||
filterFuncs = append(filterFuncs, generatedFunc)
|
||||
}
|
||||
|
||||
// Libpod response differs
|
||||
|
@ -205,15 +205,13 @@ func (ic *ContainerEngine) ContainerStop(ctx context.Context, namesOrIds []strin
|
||||
}
|
||||
|
||||
func (ic *ContainerEngine) ContainerPrune(ctx context.Context, options entities.ContainerPruneOptions) (*entities.ContainerPruneReport, error) {
|
||||
var filterFuncs []libpod.ContainerFilter
|
||||
filterFuncs := make([]libpod.ContainerFilter, 0, len(options.Filters))
|
||||
for k, v := range options.Filters {
|
||||
for _, val := range v {
|
||||
generatedFunc, err := lpfilters.GenerateContainerFilterFuncs(k, val, ic.Libpod)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
filterFuncs = append(filterFuncs, generatedFunc)
|
||||
generatedFunc, err := lpfilters.GenerateContainerFilterFuncs(k, v, ic.Libpod)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
filterFuncs = append(filterFuncs, generatedFunc)
|
||||
}
|
||||
return ic.pruneContainersHelper(filterFuncs)
|
||||
}
|
||||
|
16
pkg/ps/ps.go
16
pkg/ps/ps.go
@ -21,19 +21,17 @@ import (
|
||||
|
||||
func GetContainerLists(runtime *libpod.Runtime, options entities.ContainerListOptions) ([]entities.ListContainer, error) {
|
||||
var (
|
||||
filterFuncs []libpod.ContainerFilter
|
||||
pss = []entities.ListContainer{}
|
||||
pss = []entities.ListContainer{}
|
||||
)
|
||||
filterFuncs := make([]libpod.ContainerFilter, 0, len(options.Filters))
|
||||
all := options.All || options.Last > 0
|
||||
if len(options.Filters) > 0 {
|
||||
for k, v := range options.Filters {
|
||||
for _, val := range v {
|
||||
generatedFunc, err := lpfilters.GenerateContainerFilterFuncs(k, val, runtime)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
filterFuncs = append(filterFuncs, generatedFunc)
|
||||
generatedFunc, err := lpfilters.GenerateContainerFilterFuncs(k, v, runtime)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
filterFuncs = append(filterFuncs, generatedFunc)
|
||||
}
|
||||
}
|
||||
|
||||
@ -43,7 +41,7 @@ func GetContainerLists(runtime *libpod.Runtime, options entities.ContainerListOp
|
||||
all = true
|
||||
}
|
||||
if !all {
|
||||
runningOnly, err := lpfilters.GenerateContainerFilterFuncs("status", define.ContainerStateRunning.String(), runtime)
|
||||
runningOnly, err := lpfilters.GenerateContainerFilterFuncs("status", []string{define.ContainerStateRunning.String()}, runtime)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -6,6 +6,7 @@ import (
|
||||
"os"
|
||||
"os/user"
|
||||
"path/filepath"
|
||||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
@ -84,6 +85,17 @@ func StringInSlice(s string, sl []string) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
// StringMatchRegexSlice determines if a given string matches one of the given regexes, returns bool
|
||||
func StringMatchRegexSlice(s string, re []string) bool {
|
||||
for _, r := range re {
|
||||
m, err := regexp.MatchString(r, s)
|
||||
if err == nil && m {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// ImageConfig is a wrapper around the OCIv1 Image Configuration struct exported
|
||||
// by containers/image, but containing additional fields that are not supported
|
||||
// by OCIv1 (but are by Docker v2) - notably OnBuild.
|
||||
|
Reference in New Issue
Block a user