summaryrefslogtreecommitdiff
path: root/cmd/podman/imagefilters
diff options
context:
space:
mode:
authorbaude <bbaude@redhat.com>2019-12-09 12:35:57 -0600
committerbaude <bbaude@redhat.com>2019-12-10 13:05:18 -0600
commit8be7b466d86b53d170f82a4bd94667c4db71db59 (patch)
tree023eaca098ed07efb13174c5a942784e04a78a0d /cmd/podman/imagefilters
parentc2dab75f0ec1502e075cf5174d1b308267648fda (diff)
downloadpodman-8be7b466d86b53d170f82a4bd94667c4db71db59.tar.gz
podman-8be7b466d86b53d170f82a4bd94667c4db71db59.tar.bz2
podman-8be7b466d86b53d170f82a4bd94667c4db71db59.zip
move image filters under libpod/images
to make things more effecient for the api work we are doing, we should process image filters internally (as opposed to in main). this allows for better api responses and more closely affiliated functions. Signed-off-by: baude <bbaude@redhat.com>
Diffstat (limited to 'cmd/podman/imagefilters')
-rw-r--r--cmd/podman/imagefilters/filters.go121
1 files changed, 0 insertions, 121 deletions
diff --git a/cmd/podman/imagefilters/filters.go b/cmd/podman/imagefilters/filters.go
deleted file mode 100644
index 0b08314ce..000000000
--- a/cmd/podman/imagefilters/filters.go
+++ /dev/null
@@ -1,121 +0,0 @@
-package imagefilters
-
-import (
- "context"
- "fmt"
- "path/filepath"
- "strings"
- "time"
-
- "github.com/containers/libpod/pkg/adapter"
- "github.com/containers/libpod/pkg/inspect"
- "github.com/sirupsen/logrus"
-)
-
-// ResultFilter is a mock function for image filtering
-type ResultFilter func(*adapter.ContainerImage) bool
-
-// Filter is a function to determine whether an image is included in
-// command output. Images to be outputted are tested using the function. A true
-// return will include the image, a false return will exclude it.
-type Filter func(*adapter.ContainerImage, *inspect.ImageData) bool
-
-// CreatedBeforeFilter allows you to filter on images created before
-// the given time.Time
-func CreatedBeforeFilter(createTime time.Time) ResultFilter {
- return func(i *adapter.ContainerImage) bool {
- return i.Created().Before(createTime)
- }
-}
-
-// CreatedAfterFilter allows you to filter on images created after
-// the given time.Time
-func CreatedAfterFilter(createTime time.Time) ResultFilter {
- return func(i *adapter.ContainerImage) bool {
- return i.Created().After(createTime)
- }
-}
-
-// DanglingFilter allows you to filter images for dangling images
-func DanglingFilter(danglingImages bool) ResultFilter {
- return func(i *adapter.ContainerImage) bool {
- if danglingImages {
- return i.Dangling()
- }
- return !i.Dangling()
- }
-}
-
-// ReadOnlyFilter allows you to filter images based on read/only and read/write
-func ReadOnlyFilter(readOnly bool) ResultFilter {
- return func(i *adapter.ContainerImage) bool {
- if readOnly {
- return i.IsReadOnly()
- }
- return !i.IsReadOnly()
- }
-}
-
-// LabelFilter allows you to filter by images labels key and/or value
-func LabelFilter(ctx context.Context, labelfilter string) ResultFilter {
- // We need to handle both label=key and label=key=value
- return func(i *adapter.ContainerImage) bool {
- var value string
- splitFilter := strings.Split(labelfilter, "=")
- key := splitFilter[0]
- if len(splitFilter) > 1 {
- value = splitFilter[1]
- }
- labels, err := i.Labels(ctx)
- if err != nil {
- return false
- }
- if len(strings.TrimSpace(labels[key])) > 0 && len(strings.TrimSpace(value)) == 0 {
- return true
- }
- return labels[key] == value
- }
-}
-
-// ReferenceFilter allows you to filter by image name
-// Replacing all '/' with '|' so that filepath.Match() can work
-// '|' character is not valid in image name, so this is safe
-func ReferenceFilter(ctx context.Context, referenceFilter string) ResultFilter {
- filter := fmt.Sprintf("*%s*", referenceFilter)
- filter = strings.Replace(filter, "/", "|", -1)
- return func(i *adapter.ContainerImage) bool {
- for _, name := range i.Names() {
- newName := strings.Replace(name, "/", "|", -1)
- match, err := filepath.Match(filter, newName)
- if err != nil {
- logrus.Errorf("failed to match %s and %s, %q", name, referenceFilter, err)
- }
- if match {
- return true
- }
- }
- return false
- }
-}
-
-// OutputImageFilter allows you to filter by an a specific image name
-func OutputImageFilter(userImage *adapter.ContainerImage) ResultFilter {
- return func(i *adapter.ContainerImage) bool {
- return userImage.ID() == i.ID()
- }
-}
-
-// FilterImages filters images using a set of predefined filter funcs
-func FilterImages(images []*adapter.ContainerImage, filters []ResultFilter) []*adapter.ContainerImage {
- var filteredImages []*adapter.ContainerImage
- for _, image := range images {
- include := true
- for _, filter := range filters {
- include = include && filter(image)
- }
- if include {
- filteredImages = append(filteredImages, image)
- }
- }
- return filteredImages
-}