aboutsummaryrefslogtreecommitdiff
path: root/libpod/image/filters.go
diff options
context:
space:
mode:
authorbaude <bbaude@redhat.com>2018-03-22 10:17:50 -0500
committerAtomic Bot <atomic-devel@projectatomic.io>2018-03-23 15:35:37 +0000
commitf7c8dd5836002f3bf85a7bbe6c949cdece5194df (patch)
tree6cee5a91ff32b016efcf8e9dbcff398b42ce5c4a /libpod/image/filters.go
parent8ca3bcc85d6bbf05e7838b20bfb1ae74afa8d35d (diff)
downloadpodman-f7c8dd5836002f3bf85a7bbe6c949cdece5194df.tar.gz
podman-f7c8dd5836002f3bf85a7bbe6c949cdece5194df.tar.bz2
podman-f7c8dd5836002f3bf85a7bbe6c949cdece5194df.zip
Stage 4 Image cleanup
Cull funcs from runtime_img.go which are no longer needed. Also, fix any remaining spots that use the old image technique. Signed-off-by: baude <bbaude@redhat.com> Closes: #532 Approved by: mheon
Diffstat (limited to 'libpod/image/filters.go')
-rw-r--r--libpod/image/filters.go82
1 files changed, 82 insertions, 0 deletions
diff --git a/libpod/image/filters.go b/libpod/image/filters.go
new file mode 100644
index 000000000..20a9efc97
--- /dev/null
+++ b/libpod/image/filters.go
@@ -0,0 +1,82 @@
+package image
+
+import (
+ "strings"
+ "time"
+
+ "github.com/projectatomic/libpod/pkg/inspect"
+)
+
+// ResultFilter is a mock function for image filtering
+type ResultFilter func(*Image) 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(*Image, *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 *Image) 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 *Image) bool {
+ return i.Created().After(createTime)
+ }
+}
+
+// DanglingFilter allows you to filter images for dangling images
+func DanglingFilter() ResultFilter {
+ return func(i *Image) bool {
+ return i.Dangling()
+ }
+}
+
+// LabelFilter allows you to filter by images labels key and/or value
+func LabelFilter(labelfilter string) ResultFilter {
+ // We need to handle both label=key and label=key=value
+ return func(i *Image) bool {
+ var value string
+ splitFilter := strings.Split(labelfilter, "=")
+ key := splitFilter[0]
+ if len(splitFilter) > 1 {
+ value = splitFilter[1]
+ }
+ labels, err := i.Labels()
+ if err != nil {
+ return false
+ }
+ if len(strings.TrimSpace(labels[key])) > 0 && len(strings.TrimSpace(value)) == 0 {
+ return true
+ }
+ return labels[key] == value
+ }
+}
+
+// OutputImageFilter allows you to filter by an a specific image name
+func OutputImageFilter(userImage *Image) ResultFilter {
+ return func(i *Image) bool {
+ return userImage.ID() == i.ID()
+ }
+}
+
+// FilterImages filters images using a set of predefined fitler funcs
+func FilterImages(images []*Image, filters []ResultFilter) []*Image {
+ var filteredImages []*Image
+ for _, image := range images {
+ include := true
+ for _, filter := range filters {
+ include = include && filter(image)
+ }
+ if include {
+ filteredImages = append(filteredImages, image)
+ }
+ }
+ return filteredImages
+}