diff --git a/runtime/v2/manager.go b/runtime/v2/manager.go index fe4b40dec..e4b21284c 100644 --- a/runtime/v2/manager.go +++ b/runtime/v2/manager.go @@ -29,11 +29,19 @@ import ( "github.com/containerd/containerd/metadata" "github.com/containerd/containerd/mount" "github.com/containerd/containerd/namespaces" + "github.com/containerd/containerd/platforms" "github.com/containerd/containerd/plugin" "github.com/containerd/containerd/runtime" + ocispec "github.com/opencontainers/image-spec/specs-go/v1" bolt "go.etcd.io/bbolt" ) +// Config for the v2 runtime +type Config struct { + // Supported platforms + Platforms []string `toml:"platforms"` +} + func init() { plugin.Register(&plugin.Registration{ Type: plugin.RuntimePluginV2, @@ -41,8 +49,16 @@ func init() { Requires: []plugin.Type{ plugin.MetadataPlugin, }, + Config: &Config{ + Platforms: defaultPlatforms(), + }, InitFn: func(ic *plugin.InitContext) (interface{}, error) { - ic.Meta.Platforms = supportedPlatforms() + supportedPlatforms, err := parsePlatforms(ic.Config.(*Config).Platforms) + if err != nil { + return nil, err + } + + ic.Meta.Platforms = supportedPlatforms if err := os.MkdirAll(ic.Root, 0711); err != nil { return nil, err } @@ -262,3 +278,15 @@ func (m *TaskManager) cleanupWorkDirs(ctx context.Context) error { } return nil } + +func parsePlatforms(platformStr []string) ([]ocispec.Platform, error) { + p := make([]ocispec.Platform, len(platformStr)) + for i, v := range platformStr { + parsed, err := platforms.Parse(v) + if err != nil { + return nil, err + } + p[i] = parsed + } + return p, nil +} diff --git a/runtime/v2/manager_unix.go b/runtime/v2/manager_unix.go index a447f000a..4e74125d7 100644 --- a/runtime/v2/manager_unix.go +++ b/runtime/v2/manager_unix.go @@ -20,9 +20,8 @@ package v2 import ( "github.com/containerd/containerd/platforms" - ocispec "github.com/opencontainers/image-spec/specs-go/v1" ) -func supportedPlatforms() []ocispec.Platform { - return []ocispec.Platform{platforms.DefaultSpec()} +func defaultPlatforms() []string { + return []string{platforms.DefaultString()} } diff --git a/runtime/v2/manager_windows.go b/runtime/v2/manager_windows.go index 7f1648ed7..838622bcd 100644 --- a/runtime/v2/manager_windows.go +++ b/runtime/v2/manager_windows.go @@ -20,15 +20,11 @@ package v2 import ( "github.com/containerd/containerd/platforms" - ocispec "github.com/opencontainers/image-spec/specs-go/v1" ) -func supportedPlatforms() []ocispec.Platform { - return []ocispec.Platform{ - platforms.DefaultSpec(), - { - OS: "linux", - Architecture: "amd64", - }, +func defaultPlatforms() []string { + return []string{ + platforms.DefaultString(), + "linux/amd64", } }