mirror of
https://github.com/containers/podman.git
synced 2025-05-22 17:46:52 +08:00
Merge pull request #18956 from vrothberg/fix-18951
compat API container create: handle platform parameter
This commit is contained in:
@ -11,6 +11,8 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"github.com/containers/buildah/pkg/parse"
|
||||||
|
"github.com/containers/common/libimage"
|
||||||
"github.com/containers/common/libnetwork/types"
|
"github.com/containers/common/libnetwork/types"
|
||||||
"github.com/containers/common/pkg/cgroups"
|
"github.com/containers/common/pkg/cgroups"
|
||||||
"github.com/containers/common/pkg/config"
|
"github.com/containers/common/pkg/config"
|
||||||
@ -34,6 +36,7 @@ func CreateContainer(w http.ResponseWriter, r *http.Request) {
|
|||||||
decoder := r.Context().Value(api.DecoderKey).(*schema.Decoder)
|
decoder := r.Context().Value(api.DecoderKey).(*schema.Decoder)
|
||||||
query := struct {
|
query := struct {
|
||||||
Name string `schema:"name"`
|
Name string `schema:"name"`
|
||||||
|
Platform string `schema:"platform"`
|
||||||
}{
|
}{
|
||||||
// override any golang type defaults
|
// override any golang type defaults
|
||||||
}
|
}
|
||||||
@ -69,7 +72,16 @@ func CreateContainer(w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
body.Config.Image = imageName
|
body.Config.Image = imageName
|
||||||
|
|
||||||
newImage, resolvedName, err := runtime.LibimageRuntime().LookupImage(body.Config.Image, nil)
|
lookupImageOptions := libimage.LookupImageOptions{}
|
||||||
|
if query.Platform != "" {
|
||||||
|
var err error
|
||||||
|
lookupImageOptions.OS, lookupImageOptions.Architecture, lookupImageOptions.Variant, err = parse.Platform(query.Platform)
|
||||||
|
if err != nil {
|
||||||
|
utils.Error(w, http.StatusBadRequest, fmt.Errorf("parsing platform: %w", err))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
newImage, resolvedName, err := runtime.LibimageRuntime().LookupImage(body.Config.Image, &lookupImageOptions)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if errors.Is(err, storage.ErrImageUnknown) {
|
if errors.Is(err, storage.ErrImageUnknown) {
|
||||||
utils.Error(w, http.StatusNotFound, fmt.Errorf("no such image: %w", err))
|
utils.Error(w, http.StatusNotFound, fmt.Errorf("no such image: %w", err))
|
||||||
|
@ -624,3 +624,14 @@ fi
|
|||||||
rm -rf $TMPD
|
rm -rf $TMPD
|
||||||
|
|
||||||
podman container rm -fa
|
podman container rm -fa
|
||||||
|
|
||||||
|
# 18951: Make sure container create supports the platform parameter. Force an
|
||||||
|
# initial architecture to make sure the test runs on all platforms.
|
||||||
|
podman pull --platform=linux/amd64 $IMAGE
|
||||||
|
t POST containers/create?platform=linux/amd64 \
|
||||||
|
Image=$IMAGE \
|
||||||
|
201
|
||||||
|
t POST containers/create?platform=linux/aarch64 \
|
||||||
|
Image=$IMAGE \
|
||||||
|
404
|
||||||
|
podman rmi -f $IMAGE
|
||||||
|
Reference in New Issue
Block a user