Merge pull request #10218 from kiashok/update-platform-pkg
Update platforms package to v0.2.0
This commit is contained in:
commit
536608ef22
2
go.mod
2
go.mod
@ -21,7 +21,7 @@ require (
|
|||||||
github.com/containerd/go-runc v1.1.0
|
github.com/containerd/go-runc v1.1.0
|
||||||
github.com/containerd/log v0.1.0
|
github.com/containerd/log v0.1.0
|
||||||
github.com/containerd/nri v0.6.1
|
github.com/containerd/nri v0.6.1
|
||||||
github.com/containerd/platforms v0.1.1
|
github.com/containerd/platforms v0.2.0
|
||||||
github.com/containerd/plugin v0.1.0
|
github.com/containerd/plugin v0.1.0
|
||||||
github.com/containerd/ttrpc v1.2.3
|
github.com/containerd/ttrpc v1.2.3
|
||||||
github.com/containerd/typeurl/v2 v2.1.1
|
github.com/containerd/typeurl/v2 v2.1.1
|
||||||
|
4
go.sum
4
go.sum
@ -57,8 +57,8 @@ github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I=
|
|||||||
github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo=
|
github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo=
|
||||||
github.com/containerd/nri v0.6.1 h1:xSQ6elnQ4Ynidm9u49ARK9wRKHs80HCUI+bkXOxV4mA=
|
github.com/containerd/nri v0.6.1 h1:xSQ6elnQ4Ynidm9u49ARK9wRKHs80HCUI+bkXOxV4mA=
|
||||||
github.com/containerd/nri v0.6.1/go.mod h1:7+sX3wNx+LR7RzhjnJiUkFDhn18P5Bg/0VnJ/uXpRJM=
|
github.com/containerd/nri v0.6.1/go.mod h1:7+sX3wNx+LR7RzhjnJiUkFDhn18P5Bg/0VnJ/uXpRJM=
|
||||||
github.com/containerd/platforms v0.1.1 h1:gp0xXBoY+1CjH54gJDon0kBjIbK2C4XSX1BGwP5ptG0=
|
github.com/containerd/platforms v0.2.0 h1:clGNvVIcY3k39VJSYdFGohI1b3bP/eeBUVR5+XA28oo=
|
||||||
github.com/containerd/platforms v0.1.1/go.mod h1:XOM2BS6kN6gXafPLg80V6y/QUib+xoLyC3qVmHzibko=
|
github.com/containerd/platforms v0.2.0/go.mod h1:XOM2BS6kN6gXafPLg80V6y/QUib+xoLyC3qVmHzibko=
|
||||||
github.com/containerd/plugin v0.1.0 h1:CYMyZk9beRAIe1FEKItbMLLAz/z16aXrGc+B+nv0fU4=
|
github.com/containerd/plugin v0.1.0 h1:CYMyZk9beRAIe1FEKItbMLLAz/z16aXrGc+B+nv0fU4=
|
||||||
github.com/containerd/plugin v0.1.0/go.mod h1:j6HlpMtkiZMgT4UsfVNxPBUkwdw9KQGU6nCLfRxnq+w=
|
github.com/containerd/plugin v0.1.0/go.mod h1:j6HlpMtkiZMgT4UsfVNxPBUkwdw9KQGU6nCLfRxnq+w=
|
||||||
github.com/containerd/ttrpc v1.2.3 h1:4jlhbXIGvijRtNC8F/5CpuJZ7yKOBFGFOOXg1bkISz0=
|
github.com/containerd/ttrpc v1.2.3 h1:4jlhbXIGvijRtNC8F/5CpuJZ7yKOBFGFOOXg1bkISz0=
|
||||||
|
6
vendor/github.com/containerd/platforms/defaults.go
generated
vendored
6
vendor/github.com/containerd/platforms/defaults.go
generated
vendored
@ -16,9 +16,11 @@
|
|||||||
|
|
||||||
package platforms
|
package platforms
|
||||||
|
|
||||||
// DefaultString returns the default string specifier for the platform.
|
// DefaultString returns the default string specifier for the platform,
|
||||||
|
// with [PR#6](https://github.com/containerd/platforms/pull/6) the result
|
||||||
|
// may now also include the OSVersion from the provided platform specification.
|
||||||
func DefaultString() string {
|
func DefaultString() string {
|
||||||
return Format(DefaultSpec())
|
return FormatAll(DefaultSpec())
|
||||||
}
|
}
|
||||||
|
|
||||||
// DefaultStrict returns strict form of Default.
|
// DefaultStrict returns strict form of Default.
|
||||||
|
66
vendor/github.com/containerd/platforms/platforms.go
generated
vendored
66
vendor/github.com/containerd/platforms/platforms.go
generated
vendored
@ -122,8 +122,11 @@ import (
|
|||||||
|
|
||||||
var (
|
var (
|
||||||
specifierRe = regexp.MustCompile(`^[A-Za-z0-9_-]+$`)
|
specifierRe = regexp.MustCompile(`^[A-Za-z0-9_-]+$`)
|
||||||
|
osAndVersionRe = regexp.MustCompile(`^([A-Za-z0-9_-]+)(?:\(([A-Za-z0-9_.-]*)\))?$`)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const osAndVersionFormat = "%s(%s)"
|
||||||
|
|
||||||
// Platform is a type alias for convenience, so there is no need to import image-spec package everywhere.
|
// Platform is a type alias for convenience, so there is no need to import image-spec package everywhere.
|
||||||
type Platform = specs.Platform
|
type Platform = specs.Platform
|
||||||
|
|
||||||
@ -156,7 +159,7 @@ func (m *matcher) Match(platform specs.Platform) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (m *matcher) String() string {
|
func (m *matcher) String() string {
|
||||||
return Format(m.Platform)
|
return FormatAll(m.Platform)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ParseAll parses a list of platform specifiers into a list of platform.
|
// ParseAll parses a list of platform specifiers into a list of platform.
|
||||||
@ -174,9 +177,12 @@ func ParseAll(specifiers []string) ([]specs.Platform, error) {
|
|||||||
|
|
||||||
// Parse parses the platform specifier syntax into a platform declaration.
|
// Parse parses the platform specifier syntax into a platform declaration.
|
||||||
//
|
//
|
||||||
// Platform specifiers are in the format `<os>|<arch>|<os>/<arch>[/<variant>]`.
|
// Platform specifiers are in the format `<os>[(<OSVersion>)]|<arch>|<os>[(<OSVersion>)]/<arch>[/<variant>]`.
|
||||||
// The minimum required information for a platform specifier is the operating
|
// The minimum required information for a platform specifier is the operating
|
||||||
// system or architecture. If there is only a single string (no slashes), the
|
// system or architecture. The OSVersion can be part of the OS like `windows(10.0.17763)`
|
||||||
|
// When an OSVersion is specified, then specs.Platform.OSVersion is populated with that value,
|
||||||
|
// and an empty string otherwise.
|
||||||
|
// If there is only a single string (no slashes), the
|
||||||
// value will be matched against the known set of operating systems, then fall
|
// value will be matched against the known set of operating systems, then fall
|
||||||
// back to the known set of architectures. The missing component will be
|
// back to the known set of architectures. The missing component will be
|
||||||
// inferred based on the local environment.
|
// inferred based on the local environment.
|
||||||
@ -186,23 +192,35 @@ func Parse(specifier string) (specs.Platform, error) {
|
|||||||
return specs.Platform{}, fmt.Errorf("%q: wildcards not yet supported: %w", specifier, errInvalidArgument)
|
return specs.Platform{}, fmt.Errorf("%q: wildcards not yet supported: %w", specifier, errInvalidArgument)
|
||||||
}
|
}
|
||||||
|
|
||||||
parts := strings.Split(specifier, "/")
|
// Limit to 4 elements to prevent unbounded split
|
||||||
|
parts := strings.SplitN(specifier, "/", 4)
|
||||||
|
|
||||||
for _, part := range parts {
|
var p specs.Platform
|
||||||
|
for i, part := range parts {
|
||||||
|
if i == 0 {
|
||||||
|
// First element is <os>[(<OSVersion>)]
|
||||||
|
osVer := osAndVersionRe.FindStringSubmatch(part)
|
||||||
|
if osVer == nil {
|
||||||
|
return specs.Platform{}, fmt.Errorf("%q is an invalid OS component of %q: OSAndVersion specifier component must match %q: %w", part, specifier, osAndVersionRe.String(), errInvalidArgument)
|
||||||
|
}
|
||||||
|
|
||||||
|
p.OS = normalizeOS(osVer[1])
|
||||||
|
p.OSVersion = osVer[2]
|
||||||
|
} else {
|
||||||
if !specifierRe.MatchString(part) {
|
if !specifierRe.MatchString(part) {
|
||||||
return specs.Platform{}, fmt.Errorf("%q is an invalid component of %q: platform specifier component must match %q: %w", part, specifier, specifierRe.String(), errInvalidArgument)
|
return specs.Platform{}, fmt.Errorf("%q is an invalid component of %q: platform specifier component must match %q: %w", part, specifier, specifierRe.String(), errInvalidArgument)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var p specs.Platform
|
|
||||||
switch len(parts) {
|
switch len(parts) {
|
||||||
case 1:
|
case 1:
|
||||||
// in this case, we will test that the value might be an OS, then look
|
// in this case, we will test that the value might be an OS (with or
|
||||||
// it up. If it is not known, we'll treat it as an architecture. Since
|
// without the optional OSVersion specified) and look it up.
|
||||||
|
// If it is not known, we'll treat it as an architecture. Since
|
||||||
// we have very little information about the platform here, we are
|
// we have very little information about the platform here, we are
|
||||||
// going to be a little more strict if we don't know about the argument
|
// going to be a little more strict if we don't know about the argument
|
||||||
// value.
|
// value.
|
||||||
p.OS = normalizeOS(parts[0])
|
|
||||||
if isKnownOS(p.OS) {
|
if isKnownOS(p.OS) {
|
||||||
// picks a default architecture
|
// picks a default architecture
|
||||||
p.Architecture = runtime.GOARCH
|
p.Architecture = runtime.GOARCH
|
||||||
@ -210,10 +228,6 @@ func Parse(specifier string) (specs.Platform, error) {
|
|||||||
p.Variant = cpuVariant()
|
p.Variant = cpuVariant()
|
||||||
}
|
}
|
||||||
|
|
||||||
if p.OS == "windows" {
|
|
||||||
p.OSVersion = GetWindowsOsVersion()
|
|
||||||
}
|
|
||||||
|
|
||||||
return p, nil
|
return p, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -228,31 +242,21 @@ func Parse(specifier string) (specs.Platform, error) {
|
|||||||
|
|
||||||
return specs.Platform{}, fmt.Errorf("%q: unknown operating system or architecture: %w", specifier, errInvalidArgument)
|
return specs.Platform{}, fmt.Errorf("%q: unknown operating system or architecture: %w", specifier, errInvalidArgument)
|
||||||
case 2:
|
case 2:
|
||||||
// In this case, we treat as a regular os/arch pair. We don't care
|
// In this case, we treat as a regular OS[(OSVersion)]/arch pair. We don't care
|
||||||
// about whether or not we know of the platform.
|
// about whether or not we know of the platform.
|
||||||
p.OS = normalizeOS(parts[0])
|
|
||||||
p.Architecture, p.Variant = normalizeArch(parts[1], "")
|
p.Architecture, p.Variant = normalizeArch(parts[1], "")
|
||||||
if p.Architecture == "arm" && p.Variant == "v7" {
|
if p.Architecture == "arm" && p.Variant == "v7" {
|
||||||
p.Variant = ""
|
p.Variant = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
if p.OS == "windows" {
|
|
||||||
p.OSVersion = GetWindowsOsVersion()
|
|
||||||
}
|
|
||||||
|
|
||||||
return p, nil
|
return p, nil
|
||||||
case 3:
|
case 3:
|
||||||
// we have a fully specified variant, this is rare
|
// we have a fully specified variant, this is rare
|
||||||
p.OS = normalizeOS(parts[0])
|
|
||||||
p.Architecture, p.Variant = normalizeArch(parts[1], parts[2])
|
p.Architecture, p.Variant = normalizeArch(parts[1], parts[2])
|
||||||
if p.Architecture == "arm64" && p.Variant == "" {
|
if p.Architecture == "arm64" && p.Variant == "" {
|
||||||
p.Variant = "v8"
|
p.Variant = "v8"
|
||||||
}
|
}
|
||||||
|
|
||||||
if p.OS == "windows" {
|
|
||||||
p.OSVersion = GetWindowsOsVersion()
|
|
||||||
}
|
|
||||||
|
|
||||||
return p, nil
|
return p, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -278,6 +282,20 @@ func Format(platform specs.Platform) string {
|
|||||||
return path.Join(platform.OS, platform.Architecture, platform.Variant)
|
return path.Join(platform.OS, platform.Architecture, platform.Variant)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FormatAll returns a string specifier that also includes the OSVersion from the
|
||||||
|
// provided platform specification.
|
||||||
|
func FormatAll(platform specs.Platform) string {
|
||||||
|
if platform.OS == "" {
|
||||||
|
return "unknown"
|
||||||
|
}
|
||||||
|
|
||||||
|
if platform.OSVersion != "" {
|
||||||
|
OSAndVersion := fmt.Sprintf(osAndVersionFormat, platform.OS, platform.OSVersion)
|
||||||
|
return path.Join(OSAndVersion, platform.Architecture, platform.Variant)
|
||||||
|
}
|
||||||
|
return path.Join(platform.OS, platform.Architecture, platform.Variant)
|
||||||
|
}
|
||||||
|
|
||||||
// Normalize validates and translate the platform to the canonical value.
|
// Normalize validates and translate the platform to the canonical value.
|
||||||
//
|
//
|
||||||
// For example, if "Aarch64" is encountered, we change it to "arm64" or if
|
// For example, if "Aarch64" is encountered, we change it to "arm64" or if
|
||||||
|
4
vendor/github.com/containerd/platforms/platforms_other.go
generated
vendored
4
vendor/github.com/containerd/platforms/platforms_other.go
generated
vendored
@ -28,7 +28,3 @@ func newDefaultMatcher(platform specs.Platform) Matcher {
|
|||||||
Platform: Normalize(platform),
|
Platform: Normalize(platform),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetWindowsOsVersion() string {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
8
vendor/github.com/containerd/platforms/platforms_windows.go
generated
vendored
8
vendor/github.com/containerd/platforms/platforms_windows.go
generated
vendored
@ -17,10 +17,7 @@
|
|||||||
package platforms
|
package platforms
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
|
|
||||||
specs "github.com/opencontainers/image-spec/specs-go/v1"
|
specs "github.com/opencontainers/image-spec/specs-go/v1"
|
||||||
"golang.org/x/sys/windows"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// NewMatcher returns a Windows matcher that will match on osVersionPrefix if
|
// NewMatcher returns a Windows matcher that will match on osVersionPrefix if
|
||||||
@ -35,8 +32,3 @@ func newDefaultMatcher(platform specs.Platform) Matcher {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetWindowsOsVersion() string {
|
|
||||||
major, minor, build := windows.RtlGetNtVersionNumbers()
|
|
||||||
return fmt.Sprintf("%d.%d.%d", major, minor, build)
|
|
||||||
}
|
|
||||||
|
2
vendor/modules.txt
vendored
2
vendor/modules.txt
vendored
@ -173,7 +173,7 @@ github.com/containerd/nri/pkg/net/multiplex
|
|||||||
github.com/containerd/nri/pkg/runtime-tools/generate
|
github.com/containerd/nri/pkg/runtime-tools/generate
|
||||||
github.com/containerd/nri/pkg/stub
|
github.com/containerd/nri/pkg/stub
|
||||||
github.com/containerd/nri/types/v1
|
github.com/containerd/nri/types/v1
|
||||||
# github.com/containerd/platforms v0.1.1
|
# github.com/containerd/platforms v0.2.0
|
||||||
## explicit; go 1.20
|
## explicit; go 1.20
|
||||||
github.com/containerd/platforms
|
github.com/containerd/platforms
|
||||||
# github.com/containerd/plugin v0.1.0
|
# github.com/containerd/plugin v0.1.0
|
||||||
|
Loading…
Reference in New Issue
Block a user