|
1 | 1 | package system // import "github.com/docker/docker/pkg/system" |
2 | 2 |
|
3 | 3 | import ( |
4 | | - "fmt" |
5 | 4 | "runtime" |
6 | | - "strings" |
7 | | - |
8 | | - specs "github.com/opencontainers/image-spec/specs-go/v1" |
9 | 5 | ) |
10 | 6 |
|
11 | | -// ValidatePlatform determines if a platform structure is valid. |
12 | | -// TODO This is a temporary function - can be replaced by parsing from |
13 | | -// https://github.com/containerd/containerd/pull/1403/files at a later date. |
14 | | -// @jhowardmsft |
15 | | -func ValidatePlatform(platform *specs.Platform) error { |
16 | | - platform.Architecture = strings.ToLower(platform.Architecture) |
17 | | - platform.OS = strings.ToLower(platform.OS) |
18 | | - // Based on https://github.com/moby/moby/pull/34642#issuecomment-330375350, do |
19 | | - // not support anything except operating system. |
20 | | - if platform.Architecture != "" { |
21 | | - return fmt.Errorf("invalid platform architecture %q", platform.Architecture) |
22 | | - } |
23 | | - if platform.OS != "" { |
24 | | - if !(platform.OS == runtime.GOOS || (LCOWSupported() && platform.OS == "linux")) { |
25 | | - return fmt.Errorf("invalid platform os %q", platform.OS) |
26 | | - } |
27 | | - } |
28 | | - if len(platform.OSFeatures) != 0 { |
29 | | - return fmt.Errorf("invalid platform osfeatures %q", platform.OSFeatures) |
30 | | - } |
31 | | - if platform.OSVersion != "" { |
32 | | - return fmt.Errorf("invalid platform osversion %q", platform.OSVersion) |
33 | | - } |
34 | | - if platform.Variant != "" { |
35 | | - return fmt.Errorf("invalid platform variant %q", platform.Variant) |
36 | | - } |
37 | | - return nil |
38 | | -} |
39 | | - |
40 | | -// ParsePlatform parses a platform string in the format os[/arch[/variant] |
41 | | -// into an OCI image-spec platform structure. |
42 | | -// TODO This is a temporary function - can be replaced by parsing from |
43 | | -// https://github.com/containerd/containerd/pull/1403/files at a later date. |
44 | | -// @jhowardmsft |
45 | | -func ParsePlatform(in string) *specs.Platform { |
46 | | - p := &specs.Platform{} |
47 | | - elements := strings.SplitN(strings.ToLower(in), "/", 3) |
48 | | - if len(elements) == 3 { |
49 | | - p.Variant = elements[2] |
50 | | - } |
51 | | - if len(elements) >= 2 { |
52 | | - p.Architecture = elements[1] |
53 | | - } |
54 | | - if len(elements) >= 1 { |
55 | | - p.OS = elements[0] |
56 | | - } |
57 | | - return p |
58 | | -} |
59 | | - |
60 | 7 | // IsOSSupported determines if an operating system is supported by the host |
61 | 8 | func IsOSSupported(os string) bool { |
62 | 9 | if strings.EqualFold(runtime.GOOS, os) { |
|
0 commit comments