summaryrefslogtreecommitdiff
path: root/pkg/api/handlers/utils/images.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/api/handlers/utils/images.go')
-rw-r--r--pkg/api/handlers/utils/images.go62
1 files changed, 21 insertions, 41 deletions
diff --git a/pkg/api/handlers/utils/images.go b/pkg/api/handlers/utils/images.go
index da3c9e985..2662cd368 100644
--- a/pkg/api/handlers/utils/images.go
+++ b/pkg/api/handlers/utils/images.go
@@ -3,15 +3,14 @@ package utils
import (
"fmt"
"net/http"
- "strings"
+ "github.com/containers/common/libimage"
+ "github.com/containers/common/pkg/filters"
"github.com/containers/image/v5/docker"
"github.com/containers/image/v5/storage"
"github.com/containers/image/v5/transports/alltransports"
"github.com/containers/image/v5/types"
"github.com/containers/podman/v3/libpod"
- "github.com/containers/podman/v3/libpod/image"
- "github.com/containers/podman/v3/pkg/util"
"github.com/gorilla/schema"
"github.com/pkg/errors"
)
@@ -54,7 +53,7 @@ func ParseStorageReference(name string) (types.ImageReference, error) {
// GetImages is a common function used to get images for libpod and other compatibility
// mechanisms
-func GetImages(w http.ResponseWriter, r *http.Request) ([]*image.Image, error) {
+func GetImages(w http.ResponseWriter, r *http.Request) ([]*libimage.Image, error) {
decoder := r.Context().Value("decoder").(*schema.Decoder)
runtime := r.Context().Value("runtime").(*libpod.Runtime)
query := struct {
@@ -65,56 +64,37 @@ func GetImages(w http.ResponseWriter, r *http.Request) ([]*image.Image, error) {
// This is where you can override the golang default value for one of fields
}
- filterMap, err := util.PrepareFilters(r)
- if err != nil {
- return nil, err
- }
-
if err := decoder.Decode(&query, r.URL.Query()); err != nil {
return nil, err
}
- var filters = []string{}
if _, found := r.URL.Query()["digests"]; found && query.Digests {
UnSupportedParameter("digests")
}
- var images []*image.Image
- queryFilters := *filterMap
+ filterList, err := filters.FiltersFromRequest(r)
+ if err != nil {
+ return nil, err
+ }
if !IsLibpodRequest(r) && len(query.Filter) > 0 { // Docker 1.24 compatibility
- if queryFilters == nil {
- queryFilters = make(map[string][]string)
- }
- queryFilters["reference"] = append(queryFilters["reference"], query.Filter)
+ filterList = append(filterList, "reference="+query.Filter)
}
- if len(queryFilters) > 0 {
- for k, v := range queryFilters {
- filters = append(filters, fmt.Sprintf("%s=%s", k, strings.Join(v, "=")))
- }
- images, err = runtime.ImageRuntime().GetImagesWithFilters(filters)
- if err != nil {
- return images, err
- }
- } else {
- images, err = runtime.ImageRuntime().GetImages()
- if err != nil {
- return images, err
- }
- }
- if query.All {
- return images, nil
+ if !query.All {
+ // Filter intermediate images unless we want to list *all*.
+ // NOTE: it's a positive filter, so `intermediate=false` means
+ // to display non-intermediate images.
+ filterList = append(filterList, "intermediate=false")
}
+ listOptions := &libimage.ListImagesOptions{Filters: filterList}
+ return runtime.LibimageRuntime().ListImages(r.Context(), nil, listOptions)
+}
- filter, err := runtime.ImageRuntime().IntermediateFilter(r.Context(), images)
+func GetImage(r *http.Request, name string) (*libimage.Image, error) {
+ runtime := r.Context().Value("runtime").(*libpod.Runtime)
+ lookupOptions := &libimage.LookupImageOptions{IgnorePlatform: true}
+ image, _, err := runtime.LibimageRuntime().LookupImage(name, lookupOptions)
if err != nil {
return nil, err
}
- images = image.FilterImages(images, []image.ResultFilter{filter})
-
- return images, nil
-}
-
-func GetImage(r *http.Request, name string) (*image.Image, error) {
- runtime := r.Context().Value("runtime").(*libpod.Runtime)
- return runtime.ImageRuntime().NewFromLocal(name)
+ return image, err
}