Add fallback for windows platforms without osversion

The background for this change:

1. Windows host-process containers do not have an OS version set
2. Buildx v0.10 started pushing manifest lists by default, but it never
   has the OSVersion in the platform data (not that there is any way to
   specify what particular OS version you want). The change means that
   containerd cannot run images created with the new buildx on Windows
   because there is no matching OSVersion in the list of manifests.

Signed-off-by: Brian Goff <cpuguy83@gmail.com>
This commit is contained in:
Brian Goff 2023-02-13 21:23:59 +00:00
parent edb8ebaf07
commit 8442521645
3 changed files with 20 additions and 3 deletions

View File

@ -50,7 +50,10 @@ func (m windowsmatcher) Match(p specs.Platform) bool {
match := m.defaultMatcher.Match(p)
if match && m.OS == "windows" {
return strings.HasPrefix(p.OSVersion, m.osVersionPrefix) && m.defaultMatcher.Match(p)
if strings.HasPrefix(p.OSVersion, m.osVersionPrefix) {
return true
}
return p.OSVersion == ""
}
return match

View File

@ -128,7 +128,7 @@ func TestMatchComparerMatch_WCOW(t *testing.T) {
Architecture: "amd64",
OS: "windows",
},
match: false,
match: true,
},
{
platform: imagespec.Platform{
@ -251,11 +251,11 @@ func TestMatchComparerLess(t *testing.T) {
{
Architecture: "amd64",
OS: "windows",
OSVersion: "10.0.17764.1",
},
{
Architecture: "amd64",
OS: "windows",
OSVersion: "10.0.17764.1",
},
{
Architecture: "amd64",

View File

@ -19,9 +19,23 @@ package platforms
import (
"testing"
specs "github.com/opencontainers/image-spec/specs-go/v1"
"github.com/stretchr/testify/require"
)
func TestNormalize(t *testing.T) {
require.Equal(t, DefaultSpec(), Normalize(DefaultSpec()))
}
func TestFallbackOnOSVersion(t *testing.T) {
p := specs.Platform{
OS: "windows",
Architecture: "amd64",
OSVersion: "99.99.99.99",
}
other := specs.Platform{OS: p.OS, Architecture: p.Architecture}
m := NewMatcher(p)
require.True(t, m.Match(other))
}