From f6da2b060817ed9ce99b49fea56bdf2374f7eb8d Mon Sep 17 00:00:00 2001 From: Aditya R Date: Mon, 7 Nov 2022 23:24:51 +0530 Subject: [PATCH] specgen,wasm: switch to crun-wasm wherever applicable Whenever image has `arch` and `os` configured for `wasm/wasi` switch to `crun-wasm` as extension if applicable, following will only work if `podman` is using `crun` as default runtime. [NO NEW TESTS NEEDED] [NO TESTS NEEDED] A test for this can be added when `crun-wasm` is part of CI. Signed-off-by: Aditya R --- libpod/options.go | 11 +++++++++++ pkg/specgen/generate/container_create.go | 10 ++++++++++ 2 files changed, 21 insertions(+) diff --git a/libpod/options.go b/libpod/options.go index 8487e77ee1..72b2de7f5f 100644 --- a/libpod/options.go +++ b/libpod/options.go @@ -142,6 +142,17 @@ func WithOCIRuntime(runtime string) RuntimeOption { } } +// WithCtrOCIRuntime specifies an OCI runtime in container's config. +func WithCtrOCIRuntime(runtime string) CtrCreateOption { + return func(ctr *Container) error { + if ctr.valid { + return define.ErrCtrFinalized + } + ctr.config.OCIRuntime = runtime + return nil + } +} + // WithConmonPath specifies the path to the conmon binary which manages the // runtime. func WithConmonPath(path string) RuntimeOption { diff --git a/pkg/specgen/generate/container_create.go b/pkg/specgen/generate/container_create.go index 6ef5ca79c9..dc0006dd76 100644 --- a/pkg/specgen/generate/container_create.go +++ b/pkg/specgen/generate/container_create.go @@ -122,6 +122,16 @@ func MakeContainer(ctx context.Context, rt *libpod.Runtime, s *specgen.SpecGener if err != nil { return nil, nil, nil, err } + + if imageData != nil { + ociRuntimeVariant := rtc.Engine.ImagePlatformToRuntime(imageData.Os, imageData.Architecture) + // Don't unnecessarily set and invoke additional libpod + // option if OCI runtime is still default. + if ociRuntimeVariant != rtc.Engine.OCIRuntime { + options = append(options, libpod.WithCtrOCIRuntime(ociRuntimeVariant)) + } + } + if newImage != nil { // If the input name changed, we could properly resolve the // image. Otherwise, it must have been an ID where we're